【问题标题】:how to solve laravel/snappy error code 127?如何解决 laravel/snappy 错误代码 127?
【发布时间】:2021-07-21 13:42:14
【问题描述】:

最近我已将 laravel 更新到第 7 版,当我想从 laravel/snappy 下载 pdf 时出现此错误:

The exit status code '127' says something went wrong:\nstderr: \"sh: 1: /usr/local/bin/wkhtmltopdf: not found\n\"\nstdout: \"\"\ncommand: /usr/local/bin/wkhtmltopdf --lowquality --orientation 'landscape' --page-size 'a4' --encoding 'utf-8' '/tmp/knp_snappy5fa9279006a045.56009440.html' '/tmp/knp_snappy5fa9279006aaf0.09066361.pdf

产生此错误的原始代码:

$data['company'] = $this->user->company->toArray();
        $data['departments'] = $this->user->company->departments->toArray();

        $this->prepareText($data);

        /* @var $pdf PdfWrapper */
        $pdf = App::make('snappy.pdf.wrapper');
        $pdf->loadView('ticket.index', compact('data'))
            ->setOrientation('landscape')
            ->setOption('encoding', 'utf-8')
            ->setPaper('a4');

        return $pdf->inline(sprintf('Employee-Report-(%s).pdf', Jalalian::forge('now')
            ->format('Y-m-d')));

【问题讨论】:

    标签: php laravel laravel-snappy


    【解决方案1】:

    最好的选择应该是安装 wkhtmltopdf 作为 composer 依赖 install this

    在 config 之后以 config/snappy.php 为例

     'pdf' => [
        'enabled' => true,
        'binary'  => env(
            'WKHTML_PDF_BINARY',
            base_path('vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64'),
        ),
        'timeout' => false,
        'options' => [],
        'env'     => [],
    ],
    
    'image' => [
        'enabled' => true,
        'binary'  => env(
            'WKHTML_IMG_BINARY',
            base_path('vendor/h4cc/wkhtmltoimage-amd64/bin/wkhtmltoimage-amd64'),
        ),
        'timeout' => false,
        'options' => [],
        'env'     => [],
    ],
    

    【讨论】:

      【解决方案2】:

      如果您使用的是 Linux 或 macOS,请运行 $ which wkhtmltopdf 以查找二进制文件在您的计算机上的存储位置(前提是您已安装该软件)。

      然后,确保 config/snappy.php 配置指向该二进制文件,请参阅:

          'pdf' => [
              'enabled' => true,
              'binary'  => env('WKHTML_PDF_BINARY', '/usr/local/bin/wkhtmltopdf'),
              'timeout' => false,
              'options' => [],
              'env'     => [],
          ],
      
          'image' => [
              'enabled' => true,
              'binary'  => env('WKHTML_IMG_BINARY', '/usr/local/bin/wkhtmltoimage'),
              'timeout' => false,
              'options' => [],
              'env'     => [],
          ],
      

      如果您将二进制路径存储在.env 文件中,您可能需要使用php artisan config:clear 清除缓存。

      【讨论】:

        【解决方案3】:

        我正在使用 laradock 和 php 7.4 并遇到了同样的问题。 只需在 laradock\php-fpm\Dockerfile 中替换下面的代码

        ARG INSTALL_WKHTMLTOPDF=true
        
        RUN if [ ${INSTALL_WKHTMLTOPDF} = true ]; then \
            apt-get install -y \
            libxrender1 \
            libfontconfig1 \
            libx11-dev \
            libjpeg62 \
            libxtst6 \
            fontconfig \ 
            libjpeg62-turbo \
            xfonts-base \
            xfonts-75dpi \
            wget \
            && wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.stretch_amd64.deb -O /usr/local/bin/wkhtmltopdf \
            && chmod +x /usr/local/bin/wkhtmltopdf \
            && dpkg -i --force-depends /usr/local/bin/wkhtmltopdf \
            && apt -f install \
        ;fi
        

        那么,

        docker-compose build php-fpm workspace
        

        【讨论】:

          【解决方案4】:

          我终于得到了答案。 问题是我正在使用 utf-8 进行波斯语解析,唯一可以使用的 wkhtmltopdf 版本是 0.12.16-1,因此负责保存 pdf 的二进制目录在新版本中是不同的。

          总之,如果您使用 wkhtmltopdf 并遇到此错误,您应该更改 nginx(或您选择的 Web 服务器)中的二进制目录以使其正常工作

          【讨论】:

            猜你喜欢
            • 2018-07-27
            • 1970-01-01
            • 2010-11-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多