将 pdf 与 zendpdf 合并

merge pdfs with zendpdf

我使用 zendpdf class 在网站上生成 PDF,它工作正常。 现在我正在尝试将不同的 pdf 与 zendpdf 合并,并且有一个问题总是 return 在空白 PDF 中,但没有任何错误。这是我的代码:

$pdf_merged = new ZendPdf\PdfDocument();

$pdf_1 = new ZendPdf\PdfDocument();
$pdf_1->load("public/files/invoices/pdf1.pdf");
$pdf_2 = new ZendPdf\PdfDocument();
$pdf_1->load("public/files/invoices/pdf2.pdf");

foreach ($pdf_1->pages as $page){
    $pdf_extract = clone $page;
    $pdf_merged->pages[] = $pdf_extract;
}
unset($pdf_extract);

foreach ($pdf_2->pages as $page){
    $pdf_extract = clone $page;
    $pdf_merged->pages[] = $pdf_extract;
}
unset($pdf_extract);

$pdf_merged->save("public/files/invoices/MERGED.pdf");

我也尝试过使用提取器 class,但结果相同:

$pdf_merged = new ZendPdf\PdfDocument();

$pdf_1 = new ZendPdf\PdfDocument();
$pdf_1->load("public/files/invoices/pdf1.pdf");
$pdf_2 = new ZendPdf\PdfDocument();
$pdf_1->load("public/files/invoices/pdf2.pdf");
$extractor = new ZendPdf\Resource\Extractor();

foreach ($pdf_1->pages as $page){
    $pdf_extract = $extractor->clonePage($page);
    $pdf_merged->pages[] = $pdf_extract;
}
unset($pdf_extract);

foreach ($pdf_2->pages as $page){
    $pdf_extract = $extractor->clonePage($page);
    $pdf_merged->pages[] = $pdf_extract;
}
unset($pdf_extract);

$pdf_merged->save("public/files/invoices/MERGED.pdf");

我做了一些研究(这里和 zf2 手册),显然这个解决方案应该有效,但它不适用于我的情况。

会不会是PDF版本的问题?

提前致谢

据我所知,大于 5MB 的 pdf 存在问题。检查问题 here on GitHub.

不确定您遇到的是不是同样的问题。您是否尝试使用较小的文件?

根据 GitHub 上的答案,模块是 "no longer maintained".
我仍在寻找替代方案...

编辑

ZendPdf\PdfDocument::loada static method。你可以这样做:

use ZendPdf\PdfDocument;

...

$pdf_1 = PdfDocument::load("public/files/invoices/pdf1.pdf");
$pdf_2 = PdfDocument::load("public/files/invoices/pdf2.pdf");

即使 PHP 方法很适合合并 PDF 文件,但仍有很多不便之处(库不再维护、错误、与 PHP 本身相关的问题、性能...)

我放弃 PHP 的替代方案,转而使用 PDFUNITE

这个能够在不到 0.20 秒的时间内合并超过 500 万个 PDF 文件(我的生产环境中的发票)。在那之后我无法回到 PHP.