【发布时间】:2023-03-21 20:55:02
【问题描述】:
我使用 composer 安装了 CakePdf 的插件。所以在我的供应商文件夹中,我有 CakePdf 插件和其他依赖项。
我下载了 wkhtmltopdf 并将其安装在一个目录中。目录是C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe
接下来通过运行命令./bin/cake plugin load CakePdf -b我在src/application.php中添加了插件
$this->addPlugin('CakePdf', ['bootstrap' => true]);
然后我在config/routes.phpRouter::scope之前写了下面一行
Router::extensions(['pdf']);
在config/bootstrap.php
Configure::write('CakePdf', [
'engine' => [
'className' => 'CakePdf.WkHtmlToPdf',
'binary' => 'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe',
'options' => [
'print-media-type' => false,
'outline' => true,
'dpi' => 96
],
],
]);
现在在我写的abc 控制器view 动作中
$this->viewBuilder()->options([
'pdfConfig' => [
'orientation' => 'portrait',
'filename' => 'Invoice_' . $id.'.pdf'
]
]);
我还在src/Templates/abc/pdf/view.ctp 内部创建了view.ctp,并在src/Templates/Layout/pdf/default.ctp 内部创建了default.pdf 布局。
现在当我转到 localhost/abc/view/1.pdf 时,我收到一条错误消息 Failed to load PDF document!
Failed to load the PDF document
我真的很想知道可能出了什么问题以及如何修复它以使其正常工作?
【问题讨论】:
-
你有
'filename' => 'Invoice_' . $id.'.pdf',但你正在寻找localhost/abc/view/1.pdf。 -
@Tigger 我不能有我想要的文件名吗!
-
您可以将文件名设置为您想要的任何有效字符。重新阅读我写的内容。您设置的文件名(作为示例)
Invoice_1.pdf,但与1.pdf(您要查找的内容)完全不同。 -
不,选项是正确的,
filename选项将用于响应的Content-Disposition标头中,它与请求 URL 无关。确保您已启用调试模式,并检查您的日志中是否存在可能的错误。还要下载无效的 PDF 并查看其源代码以确定正在生成的输出。 -
这就是我想知道的
'filename'!调试模式已启用,但没有错误日志。下载pdf并在记事本中打开它,它是普通的Html。 @ndm
标签: php pdf cakephp-3.0 wkhtmltopdf cakephp-3.6