在 CentOS 上使用 snappy laravel 已向该进程发出信号“11”

问题描述 投票:0回答:1

我已成功使用 Snappy 库在我的 Windows 计算机上生成 PDF。但是,当尝试在基于 CentOS 的服务器上生成相同的 PDF 时,我遇到了错误。这个问题似乎特别发生在处理大型数据集时,导致 PDF 超过 3000 页。

采取的步骤:

安装了 CentOS 7 特定版本的 Snappy。 尝试通过 Composer 库直接使用 Snappy。 遇到错误: `Symfony\Component\Process\Exception\ProcessSignaledException 该过程已通过信号“11”发出信号。

do {
$this->checkTimeout();
$running = $this->isRunning() && ('\' === \DIRECTORY_SEPARATOR || $this->processPipes->areOpen());
$this->readPipes($running, '\' !== \DIRECTORY_SEPARATOR || !$running);
} while ($running);
while ($this->isRunning()) {
$this->checkTimeout();
usleep(1000);
}

  if ($this->processInformation['signaled'] && $this->processInformation['termsig'] !== $this->latestSignal) {
        throw new ProcessSignaledException($this);
    }`

附加信息:

在处理大型数据集时,该错误始终会发生。 PDF 生成过程在 Windows 环境下正常运行。 此问题会妨碍 CentOS 服务器上应用程序的功能。 对于如何解决此问题并使用 Snappy 库在 CentOS 服务器上成功生成 PDF 的任何见解或建议,我将不胜感激。

我用来创建 PDF 的代码,一直有效到 800 页,之后它给出了相同的错误,但仅限于 centOS 服务器环境。

$body = view('ENG.Reports.Bomrep.BomRepdtlallpdfBody', compact('fdatas', 'unit_detail', 'unit_code', 'unitname', 'pcode', 'userData'))->render();
            $snappy = app('snappypdf'); // Use the 'snappypdf' service
            $header = view('ENG.Reports.Header')->render();
            $pdf = $snappy->loadHTML($body, [], [
                'enable-local-file-access' => true,
                'orientation' => 'portrait',
                'encoding' => 'UTF-8',
                'dpi' => 72,
            ]);
            $pdf->setTimeout(100000000);
            $pdf->setOption('margin-top', 12);
            $pdf->setOption('header-html', $header);
            $pdf->setOption('header-spacing', 2);
            return $pdf->download('BOMdetail.pdf');

enter image description here

我尝试了现有的可用修复,例如转移到 wkhtmltopdf centos 版本、使用 Composer 转到供应商二进制文件,还尝试优化查询并使其更快,但没有任何效果。

我正在尝试找到一些解决方案来帮助我解决 CentOS 上的这个问题。

laravel centos wkhtmltopdf snappy
1个回答
0
投票

问题是我的全局标头和 JS

    <script> var date = new Date(); var time = date.toLocaleTimeString(); var formattedDate = date.toDateString().split(' ').slice(1).join('-'); document.write(formattedDate + ', ' + time); </script> <br> <script> var vars = {}; var x = document.location.search.substring(1).split('&'); for (var i in x) { var z = x[i].split('=', 2); vars[z[0]] = unescape(z[1]); } document.write('Page ' + vars['page'] + ' of ' + vars['topage']); </script>
© www.soinside.com 2019 - 2024. All rights reserved.