【问题标题】:Knp\Snappy\Pdf generateFromHTML not generating the PDF with correct filenameKnp\Snappy\Pdf generateFromHTML 未生成具有正确文件名的 PDF
【发布时间】:2017-03-31 16:24:31
【问题描述】:

我的 Laravel 应用程序中有 PDF 下载功能。

当 PDF 文件名是英文时它工作得很好,问题出在其他语言上。

$pdf = new Pdf();
...
$pdf->generateFromHtml(View::make('invoices.download'.$preferences->invoice_template, $data), $pdf_file_loc);
return Response::download($pdf_file_loc);

在上述代码中,$pdf_file_loc 具有 PDF 文件的完整路径以及 PDF 文件名。目前例如文件名为“Förderverein_für.pdf”(德语)时,创建的PDF文件的真实名称为“Frderverein_fr.pdf”。

换句话说,generateFromHtml 函数没有创建具有正确德语文件名的 PDF 文件。

但在那之后,由于$pdf_file_loc 包含正确的德语名称,它正在尝试下载不存在的“Förderverein_für.pdf”文件(在return Response::download($pdf_file_loc) 中)。

所以当我尝试下载 PDF 文件时显示错误页面

这在我的实时应用程序中造成了一个严重的问题,因为 PDF 文件名包含我们客户的公司名称,而且它通常是用外语(不是英语)编写的。

【问题讨论】:

  • 我想如果PDF文件的编码有问题,我尝试将编码选项设置为utf8,但它没有给我效果。 $pdf->setOption('encoding', 'utf8');
  • PDF是动态生成的吗?如果是这样,呈现给用户的文件名不需要与磁盘上的文件相同。实际上,磁盘上根本不需要文件。您能解释一下这是如何工作的吗?
  • 谢谢,halfer,你对不同文件名的想法给了我线索,我终于解决了我的问题。我在回答中提供了详细信息。再次感谢。

标签: php pdf wkhtmltopdf


【解决方案1】:

由于generateFromHtml 函数不会使用其他语言(不是英语)创建文件,因此我没有在文件名中包含其他语言,而是在下载文件时尝试使用其他语言重置文件名。

所以,现在$pdf_file_loc 不包含其他语言,它在应用商店中仅以英语存储,但在下载时将其转换为其他语言。

return Response::download($pdf_file_loc, $filename);

我认为这不是最好的答案,但只要目的是获取其他语言的 PDF 文件名,这就解决了我的问题。

【讨论】:

    猜你喜欢
    • 2019-06-30
    • 2014-03-28
    • 2015-05-15
    • 2014-09-29
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多