首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >laravel-snappy:文件未创建

laravel-snappy:文件未创建
EN

Stack Overflow用户
提问于 2018-02-09 05:30:34
回答 2查看 3.7K关注 0票数 2

目前,考虑到没有任何重大变化,我正在试图追踪这个问题是从何而来的。

但是,目前我使用laravel-snappy生成pdfs,直到现在我才突然收到以下错误:

未创建文件'C:\Users\ADMINI~1\AppData\Local\Temp\knp_snappy5a7d3011c11883.41249127.pdf‘(命令:"C:\Program \wkhtmltopdf\bin\wkhtmltopdf“-低质量-图像-启用-javascript- "C:\Users\ADMINI~1\AppData\Local\Temp\knp_snappy5a7d3011b9a179.91650543.html”"C:\Users\ADMINI~1\AppData\Local\Temp\knp_snappy5a7d3011c11883.41249127.pdf").

不幸的是,它并没有告诉我为什么它没有被创建。此时,错误处理程序指向它返回此错误的特定行:

代码语言:javascript
复制
if (!$this->fileExists($output)) {
    throw new \RuntimeException(sprintf(
        'The file \'%s\' was not created (command: %s).',
        $output, $command
    ));
}

这一行来自以下文件:vendor\knplabs\knp-snappy\src\Knp\Snappy\AbstractGenerator.php

我的wkhtmltopdf二进制文件位于正确的位置,对这些文件的设置没有任何改变。是的,目前这些文件被托管并在Windows平台上服务。

我对snappy的配置:

代码语言:javascript
复制
<?php

return array(

    'pdf' => array(
        'enabled' => true,
        'binary' => '"C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf"',
        'timeout' => false,
        'options' => array(),
        'env'     => array(),
    ),
    'image' => array(
        'enabled' => true,
        'binary'  => '"C:\Program Files\wkhtmltopdf\bin\wkhtmltoimage"',
        'timeout' => false,
        'options' => array(),
        'env'     => array(),
    ),

);

我的文件是通过我的控制器生成的:

代码语言:javascript
复制
  public function downloadPDF(Shipment $shipment) {
      $shipment_details = $shipment->shipment_details;
      $shipment->print_date = Carbon::now();
      $shipment->save();

      $pdf = PDF::loadView('shipments.pdf', compact('shipment','shipment_details'))
                    ->setOption('images', true)
                    ->setOption('enable-javascript', true)
                    ->setOption('javascript-delay', 10);
      return $pdf->download('shipment'.$shipment->uuid.'.pdf');

      $shipment->print_date = Carbon::now();
      $shipment->save();
  }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-17 23:39:22

解决这个问题的最简单方法是执行一个原始命令,wkhtmltopdf在Linux/Windows上没有相同的命令行参数,这意味着snappy包装器只对amd64工作,当它与64位窗口可执行文件一起使用时失败。

代码语言:javascript
复制
exec("C:/path/to/wkhtmltopdf.exe path/to/my.html destination/for/my.pdf");

由于这个解决方案很糟糕,而且wkhtmltopdf功能受限于windows,所以我强烈建议您使用docker部署,或者只在Linux下进行开发。否则您将无法使用倍数功能,如pdf页脚,pdf编码utf-8和更多.

这是一个关于如何使用码头组成的教程的拉拉!

票数 1
EN

Stack Overflow用户

发布于 2020-03-12 04:55:00

如果其他人的googling有同样的问题,他们不喜欢被接受的“在Linux中做它”的答案。

对我来说,这是因为Visual 2013没有安装--在命令行中运行文件会导致redist中包含的缺少C++的错误。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48699278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档