Combining PDFs with PHP from Encoded PDFs - Error: "Template does not exist!"
Combining PDFs with PHP from Encoded PDFs - Error: "Template does not exist!"
我正在构建一个简单的 Web 服务,需要将两个 PDF 合并为一个 PDF 文件。我可以将两个 PDF 作为带有 POST 的文本(基本编码 64)传递给服务,服务需要将组合的 PDF 作为编码文本输出,然后客户端将重新编码并制作 PDF。
我在这里发现了这个让我开始的问题:
Can TCPDF / FPDI accept PDF as string?
我找到了一些示例代码和多个库:
- FPDI Example
- TCPDI<-setSourceData(字符串)
- TCPDF
这是一个简单的编码PDF单页。(Post数据)
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
这里出了什么问题?我该如何解决这个问题?
注意:此问题已解决via the Github issue tracker for TCPDI;我在这里回答也是为了让遇到这个 SO 问题的任何人受益。
根据 TCPDI installation instructions,TCPDI 当前不兼容与最新版本的 FPDF 捆绑在一起的 FPDF_TPL 版本。
尝试使用 FPDF_TPL 的捆绑版本会导致 "template does not exist" 错误;使用独立版本 (FPDF_TPL 1.2.3) 应该可以解决此问题。如果您在使用 FPDF_TPL 1.2.3 时继续收到错误消息,请针对 TCPDI 或 TCPDI_PARSER(视情况而定)记录一个 Github 问题,并提供触发您的问题的样本 PDF .
我正在构建一个简单的 Web 服务,需要将两个 PDF 合并为一个 PDF 文件。我可以将两个 PDF 作为带有 POST 的文本(基本编码 64)传递给服务,服务需要将组合的 PDF 作为编码文本输出,然后客户端将重新编码并制作 PDF。
我在这里发现了这个让我开始的问题: Can TCPDF / FPDI accept PDF as string?
我找到了一些示例代码和多个库:
- FPDI Example
- TCPDI<-setSourceData(字符串)
- TCPDF
这是一个简单的编码PDF单页。(Post数据) 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
这里出了什么问题?我该如何解决这个问题?
注意:此问题已解决via the Github issue tracker for TCPDI;我在这里回答也是为了让遇到这个 SO 问题的任何人受益。
根据 TCPDI installation instructions,TCPDI 当前不兼容与最新版本的 FPDF 捆绑在一起的 FPDF_TPL 版本。
尝试使用 FPDF_TPL 的捆绑版本会导致 "template does not exist" 错误;使用独立版本 (FPDF_TPL 1.2.3) 应该可以解决此问题。如果您在使用 FPDF_TPL 1.2.3 时继续收到错误消息,请针对 TCPDI 或 TCPDI_PARSER(视情况而定)记录一个 Github 问题,并提供触发您的问题的样本 PDF .