barryvdh / laravel-dompdf,Laravel 6,在 Chrome,Android 上没有响应

问题描述 投票:0回答:2

我有这个端点,它输出(在浏览器中呈现)一个 PDF 文件:

    $pdf = PDF::loadView('print.property', $data, []); // DOMPDF

    $filename = 'test.pdf';
    if($show) {
        return $pdf->stream( $filename );
    }
    return $pdf->download($filename);

,其中

$show
表示渲染,但不下载 PDF 文件。

对于桌面,一切正常并且呈现 PDF 文件,但是当我使用移动模拟器 Chrome Dev Tools 进行设置时,服务器没有响应,只是停留在加载模式。

我试过退出,没有带标题的返回:

header("Content-Type: application/octet-stream");
header("Content-Disposition: inline; filename=\"$filename\"");

使用

Content-Disposition: attachment
,它会下载正确生成的文件。 我猜问题出在标题中的某个地方。 * 我正在使用
LiteServer
.

这是一些从库响应头中生成的:

content-disposition: inline; filename="test.pdf"
content-type: application/pdf

我之前尝试过这个标题:

die ($pdf->stream( $filename));

header('Content-Length: 101840');
header('Content-Type: application/octet-stream');

或:

header('Content-Type: application/pdf');

或: header('Content-Disposition: inline; filename="'.$filename.'"'); 或者: header('Content-Disposition: attachment; filename="'.$filename.'"');

没有任何作用。我能得到的最接近的是在 Chrome(移动)的浏览器中将其下载或呈现为字符串。

laravel dompdf
2个回答
1
投票

我个人也有问题。现在,我使用“https://github.com/barryvdh/laravel-snappy”我不知道它在 v6 laravel 上是否有效。


0
投票

我还将此答案添加到另一个问题Preview pdf 而不是使用 Barryvdh\DomPDF\Facade 下载。

因为它对我有用,我尝试了 6 次以上才弄明白,最后我想出了这个解决方案

use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Storage;
use Barryvdh\DomPDF\Facade\Pdf;  

public function PDFDownload($view, $data = [], $fileName = 'File.pdf',  $paperSize = 'A4', $orientation = 'potrait') {
        $pdf =  PDF::loadView($view, $data)->setPaper($paperSize, $orientation)->setWarnings(false);
        $filePath = storage_path('app/temp/'.$fileName);

        // Save the PDF to a temporary file on the server
        Storage::put('temp/'.$fileName, $pdf->output());

        $headers = [
            'Content-Type' => 'application/pdf',
            'Content-Disposition' => 'attachment; filename="'.$fileName.'"',
        ];

        // Get the PDF content as a string
        $content = file_get_contents($filePath);

        // Delete the temporary file
        Storage::delete('temp/'.$fileName);

        // Return the response with the PDF content and headers
        return response($content, 200, $headers);
    }

移动设备也应该能够使用此代码。但是,在某些情况下,移动设备的安全设置会禁止从浏览器下载文件。

© www.soinside.com 2019 - 2024. All rights reserved.