如何解决laravel / snappy错误代码127?

问题描述

最近我已将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')));

解决方法

如果您使用的是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'),

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

,

我正在使用 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
,

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

然后在配置示例 config/snappy.php

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

我终于得到了答案。 问题是我正在使用utf-8进行波斯语解析,并且正在使用的wkhtmltopdf的唯一版本是0.12.16-1,结果是负责保存pdf的二进制目录在新版本中有所不同。 / p>

最后,如果您使用的是wkhtmltopdf并收到此错误,则应更改nginx(或所选的Web服务器)中的二进制目录以使其正常工作