【问题标题】:TCPDI useTemplate excedes timeout with somes pdfTCPDI useTemplate 超出了某些 pdf 的超时时间
【发布时间】:2020-05-27 00:07:48
【问题描述】:

我正在尝试使用 TCPDI 将文本放入一些 pdf 文件中。

它在大多数 pdf 中都可以正常工作,但在某些 pdf 中,代码在到达 useTemplate() 函数时会卡住,并出现 500 错误(超出最大时间)。

它们不是很长的 pdf(最多 1、2、3 页),而另一些具有更多页面的 pdf 也可以。这是我的代码:

$pdf = new TCPDI();

$pageCount = $pdf->setSourceFile($path);

for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {

    $templateId = $pdf->importPage($pageNo);

    $size = $pdf->getTemplateSize($templateId);

    if ($size['w'] > $size['h']) {
        $pdf->AddPage('L', array($size['w'], $size['h']));
    } else {
        $pdf->AddPage('P', array($size['w'], $size['h']));
    }

    $pdf->useTemplate($templateId); //Here is where it takes so long that it exceeds time

$pdf->SetFont('Helvetica');
$pdf->SetFontSize(10);
$pdf->SetTextColor(255, 0, 0);
$pdf->SetXY(2, 0);
$pdf->Write(0, 'Code nº 4');

}

$pdf->Output($file,'D'); 

pdf 是否有任何道具可以使其保持锁定状态?有替代品吗?

我有一个代码可以循环处理多个 pdf 并使用此代码将它们放入一个 zip 中,当链中有一个 pdf 时,该代码会堵塞代码,zip 显然无法处理,所以如果有办法检测什么 pdf 会给我带来问题,我不能跳过那里并生成带有货物的 zip。

我无法控制 pdf,它们是由很多客户上传的

编辑:在日志中有超过一百万行类似于 PHP Warning: Illegal string offset 'DAmip' in ...\TCPPDF\tcpdi_parser.php on line 712 before Maximum execution Time Fatal Error

【问题讨论】:

  • 您是否检查了您的 PHP 错误日志以了解有关错误的详细信息?您不能在循环中使用此代码,因为它会将生成的 PDF 发送给客户端,而这只会发生在单个文件中。
  • 嗨,当我在循环中使用此代码时,我不会将结果发送到客户端,而是将结果存储到服务器临时文件夹中,以便稍后在处理所有 pd 时制作一个 zip .如果我使用此代码仅编辑一个 pdf,任何时候问题都是相同的。 (正如我所说,它仅发生在某些 pdf 中,它们中的大多数都可以正常工作。)最后几行(超过数百万行)的错误日志很大:PHP 警告:...\TCPD\tcpdi_parser 中的非法字符串偏移 'DAmip'第 712 行的 .php 最后:PHP 致命错误:第 712 行的 ...TCPD\tcpdi_parser.php 中超过了 300 秒的最大执行时间
  • 看起来像使用的解析器中的错误。您应该考虑切换到更可靠的解决方案,例如官方的FPDI + FPDI PDF-Parser(均由我们创建 - 后者不是免费的,但增加了对使用压缩交叉引用流和对象流读取 PDF 的支持) .一般你也应该知道you cannot edit a PDF with FPDI

标签: php pdf timeout tcpdf fpdi


【解决方案1】:

对我来说同样的问题。

我“解决”了在行前添加行 set_time_limit(10); 的情况

while (strspn($data{$offset}, "\x00\x09\x0a\x0c\x0d\x20") == 1) {

我知道这不是正确的解决方案,但至少不会阻止您的程序

【讨论】:

    猜你喜欢
    • 2020-11-14
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2013-08-29
    • 2018-05-15
    相关资源
    最近更新 更多