【发布时间】: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