将 PDF 与编码 PDF 中的 PHP 合并 - 错误:“模板不存在!


Combining PDFs with PHP from Encoded PDFs - Error: "Template does not exist!"

我正在构建一个简单的网络服务,需要将两个PDF合并为一个PDF文件。我可以将两个PDF作为文本(基本编码64)与POST传递给服务,并且服务需要吐出组合的PDF作为编码文本,然后客户端将重新编码并制作PDF。

我在这里发现了这个问题,这让我开始了:TCPDF/FPDI可以接受PDF作为字符串吗?

我找到了一些示例代码和多个库:

  • FPDI 示例
  • TCPDI<-setSourceData(string)
  • TCPDF

这是一个编码的PDF单页简单。(发布数据)http://pastebin.com/zLXmCNJt

这是我的代码:

<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/FPDF/tcpdf/tcpdf.php');
require_once($_SERVER['DOCUMENT_ROOT'].'/FPDF/tcpdf/tcpdi.php');

class ConcatPdf extends TCPDI 
{
    public $files = array();
    public function setFiles($files)
    {
        $this->files = $files;
    }
    public function concat()
    {
        foreach($this->files AS $file) {
            //$pageCount = $this->setSourceFile($file);
            $pageCount = $this->setSourceData($file);//i modified this
            for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
                 $tplIdx = $this->ImportPage($pageNo);
                 $s = $this->getTemplatesize($tplIdx);
                 $this->AddPage($s['w'] > $s['h'] ? 'L' : 'P', array($s['w'], $s['h']));
                 $this->useTemplate($tplIdx); //error here
            }
        }
    }
}

$pdf641 = $_POST['pdf1'];
$pdf642 = $_POST['pdf2'];
$pdf = new ConcatPdf();
$pdf->setFiles(array(base64_decode($pdf641), base64_decode($pdf642) ));
$pdf->concat(); //!!error here!!
echo base64_encode($pdf->Output('concat.pdf', 'S'));
?>

以下是来自服务器的错误日志:http://pastebin.com/q2vzZfft

这里出了什么问题?我该如何解决这个问题?

注意:此问题已通过 TCPDI 的 Github 问题跟踪器得到解决;我在这里回答也是为了任何遇到这个 SO 问题的人的利益。

根据 TCPDI 安装说明,TCPDI 当前与最新版本的 FPDF 捆绑在一起的FPDF_TPL版本不兼容。

尝试使用捆绑版本的FPDF_TPL可能会导致"模板不存在"错误;使用独立版本 (FPDF_TPL 1.2.3) 应该可以解决此问题。 如果您在使用 1.2.3 FPDF_TPL时仍然收到错误消息,请针对 TCPDI 或 TCPDI_PARSER(视情况而定)记录 Github 问题,并提供触发问题的示例 PDF。