【问题标题】:Laravel snappy file was not createdLaravel snappy 文件未创建
【发布时间】:2019-03-08 14:09:12
【问题描述】:

我正在尝试使用 Laravel snappy 创建 pdf。

问题是当我尝试在控制台中运行 wkhtmltopdf 命令时:

wkhtmltopdf http://google.com google.pdf

它工作正常并生成 pdf。

但是当我尝试在我的控制器中生成 pdf 时,它会抛出这个异常:

RuntimeException
文件 '/home/alemil/Projects/test/storage/app/annual_reports/Pdf test.pdf' 未创建 (命令:/usr/local/bin/wkhtmltopdf --lowquality --orientation '风景'--页面大小'a3' '/tmp/knp_snappy5bb49cd6bfcf14.16728595.html' '/home/alemil/Projects/test/storage/app/annual_reports/Pdf test.pdf')。

我试图复制上面的命令并直接在控制台中执行。这就是我得到的:

加载页面 (1/6) 错误:无法加载 http://tmp/knp_snappy5bb49cd6bfcf14.16728595.html,网络状态代码 3 和 http 状态代码 0 - 找不到主机 tmp 错误:加载页面失败http:///tmp/knp_snappy5bb49cd6bfcf14.16728595.html(有时它可以通过 --load-error-handling ignore 忽略此错误) 由于网络错误,退出代码 1:HostNotFoundError

正如我所见,它尝试获取本地文件,因为它是远程的。我找不到这个问题,所以我问是否有人可以解决这个问题或有任何想法。

我的环境是 Ubuntu 18.04 PHP 和 PHP 7.2.10。

这是我的代码:

    // app.php aliases
   'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,    

    // controller code
    PDF::loadView('admin.reports.annual.pdf_template', $data)
        ->setPaper('a3', 'landscape')
        ->save(
            storage_path('app/annual_reports/') . $report->pdf, 
            true // when there is file with same name it throws file already exists so I had to set owerwrite to true
        );

另外,还要指出一件事,我使用的是 barryvdh/laravel-dompdf,一切正常,只是它无法渲染图表,所以我现在正在尝试设置 snappy。

【问题讨论】:

  • 这很奇怪。如果一切都失败了,你可以试试这个家伙库,它对我很有效github.com/mikehaertl/phpwkhtmltopdf。这是我在使用时写的博客delboy1978uk.wordpress.com/2014/11/24/…
  • 我认为这个问题与 wkhtmltopdf 有关,因为它试图将本地 html 作为远程获取。
  • 我以为你是想上谷歌?这就是你在终端所做的。你在调用什么代码?我们需要看到它
  • @delboy1978uk 我用代码更新了问题,希望对您有所帮助

标签: php laravel wkhtmltopdf laravel-snappy knp-snappy


【解决方案1】:

我认为(不确定)您的应用程序中存在阻止您的控制器访问链接的阻塞。或者在创建 PDF 时。

它也可以是你的代码语法。

你可以试试这个 html :

$pdf = new Pdf('/usr/local/bin/wkhtmltopdf');
$pdf->generateFromHtml('<h1>test</h1><p>test from test</p>', '/tmp/test-123.pdf');

【讨论】:

  • 那么你可以试试这个方法: $pdf = PDF::loadView('pages.application.app', array('policy' => $policy)); $pdf->save('zzsnappytest.pdf');
  • 我认为这不相关,因为我上面的代码中使用了相同的方法
【解决方案2】:

就我而言,问题是我将$html 中的null 传递给Knp\Snappy\Pdf::getOutputFromHtml($html)Under the hood 检查$html !== null 是否为$html !== null 并创建一个临时文件以进一步生成PDF。如果临时文件不存在wkhtmltopdf 会抛出问题中描述的错误。

【讨论】:

    猜你喜欢
    • 2018-07-19
    • 2016-01-23
    • 2018-07-20
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    相关资源
    最近更新 更多