将 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::load
是 a 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.
我使用 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::load
是 a 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.