使用TCPDF将现有的PDF与动态生成的PDF合并

问题描述 投票:3回答:3

我正在使用TCPDF生成PDF文档。我的要求是在动态生成的PDF的最后一页上合并现有的PDF内容。

php tcpdf
3个回答
2
投票

到目前为止,解决您的问题的最佳方法是使用FPDI

https://github.com/Setasign/FPDI

[它的工作方式是FPDI扩展了TCPDF,因此您可以使用与FPDI一起使用的所有方法来使用TCPDF对象,但可以使用所需的其他方法从现有的PDF文件(setSourceFilegetTemplateSizeuseTemplate)导入页面。

设置起来似乎有些艰巨,但是如果您使用的是Composer,它实际上非常简单。只需将setasign/fpdisetasign/fpdi-tcpdf添加到composer.json文件中,然后使用FPDI的实例代替TCPDF实例。我发现我什至不必像github页面上提到的那样调用class_exists('TCPDF', true)。当我将其他条目添加到composer.json并运行composer dumpautoload后,它就开始工作了。


1
投票

TCPDF仍在开发中:http://www.tcpdf.org/doc/code/classTCPDF__IMPORT.html#a5a9effc936e8fa461c0f6717c2d10d93

[如果可能,您可以使用ZEND:

require_once 'Zend/Pdf.php';

$pdf1 = Zend_Pdf::load("1.pdf");
$pdf2 = Zend_Pdf::load("2.pdf");

foreach ($pdf2->pages as $page){
    $pdf1->pages[] = $page;
}

$pdf1->save('3.pdf');

如果您在Linux上运行,则还可以运行shell命令。

<?php
exec('pdfjam 1.pdf 2.pdf -o 3.pdf'); // -o = output

您可以从此处安装pdfjam:http://www2.warwick.ac.uk/fac/sci/statistics/staff/academic/firth/software/pdfjam/pdfjam_latest.tgz


0
投票

我尝试了FPDI的免费版本,但不支持PDF版本1.5或更高版本。

[如果其他人正在寻找免费的解决方案,我已经使用TCPDI。您可以在github上找到它。

我的项目不使用作曲家,因此我使用了https://github.com/pauln/tcpdi中的master分支如果您使用的是作曲家,那么您也可以为作曲家找到一些叉子。只需在github上搜索tcpdi。

一旦将其添加到项目中,代码就非常简单。

这是我的代码的摘录。我用它来保存隐私策略的副本(静态pdf),在页脚中带有用户名和协议日期。

// Create new PDF document
$pdf = new TCPDI(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
...
// Add the pages from the source file.
$pagecount = $pdf->setSourceFile($localPrivacy);
for ($i = 1; $i <= $pagecount; $i++) {
    $tplidx = $pdf->importPage($i);
    $pdf->AddPage();
    $pdf->useTemplate($tplidx);
    // Add agreement text in document footer
    $pdf->SetXY(15,282);
    $pdf->Cell(180, 5, "Documento approvato da {$fullName} il {$date}", 0, 0, 'C');
}
// Send PDF on output
$pdf->Output(FOLDER_PATH . DIRECTORY_SEPARATOR . "{$userId}.pdf", 'F');
© www.soinside.com 2019 - 2024. All rights reserved.