PHP 在特定页码的 PDF 中插入多个 PDF
PHP Insert multiple PDF's into PDF on specific page number
我的问题是 - 用户可以上传 PDF 文件,现在我想在用户上传 PDF 的每个页面后添加其他(1 到 n 之间)单页 PDF。
例如,用户上传了一个 4 页的 PDF,而我的 Web 服务器上有 3 个单页 PDF,我想将其与用户 PDF 合并。生成的 PDF 应如下所示:
Page 1: Page #1 from User uploaded PDF
Page 2: First Single-Page-PDF from Webserver
Page 3: Page #2 from User uploaded PDF
Page 4: Second Single-Page-PDF from Webserver
Page 5: Page #3 from User uploaded PDF
Page 6: Third Single-Page-PDF from Webserver
Page 7: Page #4 from User uploaded PDF
Page 8: First Single-Page-PDF from Webserver
到目前为止我已经用 PDFMerger
试过了
$pdf = new PDFMerger;
$pdf->addPDF('samplepdfs/userpdf.pdf', 'all')
->addPDF('samplepdfs/one.pdf', 'all')
->addPDF('samplepdfs/two.pdf', 'all')
->addPDF('samplepdfs/three.pdf', 'all')
->merge('file', 'xxx/result.pdf');
但这只会在最后添加其他 PDF。
PHP 中是否有解决方案,我可以在其中指定要插入其他 PDF 的页码?
您应该避免使用 PDFMerger class。它快 6(!!!)岁了!
您可以毫不费力地使用 FPDI 执行相同的操作。无论如何,您应该按照希望它们出现的顺序插入页面。所以我想这更像是一个逻辑问题。根据您在问题中所写的内容,我假设您想要导入整个文档,同时在导入的页面之间展开另一个包含 3 页的文档。因此,一个简单的 POC 可能如下所示:
<?php
require_once("libs/fpdf/fpdf.php");
require_once("libs/fpdi/fpdi.php");
$pdf = new FPDI();
// let's prepare the static "filler pages"
$staticIds = array();
$pageCount = $pdf->setSourceFile('pdf/on/the/webserver.pdf');
for ($pageNumber = 1; $pageNumber <= $pageCount; $pageNumber++) {
$staticIds[$pageNumber] = $pdf->importPage($pageNumber);
}
// get the page count of the uploaded file
$pageCount = $pdf->setSourceFile('the/uploaded.pdf');
// let's track the page number for the filler page
$fillerPageCount = 1;
// import the uploaded document page by page
for ($pageNumber = 1; $pageNumber <= $pageCount; $pageNumber++) {
$tplId = $pdf->importPage($pageNumber);
$pdf->AddPage();
$pdf->useTemplate($tplId, null, null, 0, 0, true);
// add the current filler page
$pdf->AddPage();
$pdf->useTemplate($staticIds[$fillerPageCount], null, null, 0, 0, true);
// update the filler page number or reset it
$fillerPageCount++;
if ($fillerPageCount > count($staticIds)) {
$fillerPageCount = 1;
}
}
// done
$pdf->Output('xxx/result.pdf', 'F');
我的问题是 - 用户可以上传 PDF 文件,现在我想在用户上传 PDF 的每个页面后添加其他(1 到 n 之间)单页 PDF。
例如,用户上传了一个 4 页的 PDF,而我的 Web 服务器上有 3 个单页 PDF,我想将其与用户 PDF 合并。生成的 PDF 应如下所示:
Page 1: Page #1 from User uploaded PDF
Page 2: First Single-Page-PDF from Webserver
Page 3: Page #2 from User uploaded PDF
Page 4: Second Single-Page-PDF from Webserver
Page 5: Page #3 from User uploaded PDF
Page 6: Third Single-Page-PDF from Webserver
Page 7: Page #4 from User uploaded PDF
Page 8: First Single-Page-PDF from Webserver
到目前为止我已经用 PDFMerger
试过了$pdf = new PDFMerger;
$pdf->addPDF('samplepdfs/userpdf.pdf', 'all')
->addPDF('samplepdfs/one.pdf', 'all')
->addPDF('samplepdfs/two.pdf', 'all')
->addPDF('samplepdfs/three.pdf', 'all')
->merge('file', 'xxx/result.pdf');
但这只会在最后添加其他 PDF。 PHP 中是否有解决方案,我可以在其中指定要插入其他 PDF 的页码?
您应该避免使用 PDFMerger class。它快 6(!!!)岁了! 您可以毫不费力地使用 FPDI 执行相同的操作。无论如何,您应该按照希望它们出现的顺序插入页面。所以我想这更像是一个逻辑问题。根据您在问题中所写的内容,我假设您想要导入整个文档,同时在导入的页面之间展开另一个包含 3 页的文档。因此,一个简单的 POC 可能如下所示:
<?php
require_once("libs/fpdf/fpdf.php");
require_once("libs/fpdi/fpdi.php");
$pdf = new FPDI();
// let's prepare the static "filler pages"
$staticIds = array();
$pageCount = $pdf->setSourceFile('pdf/on/the/webserver.pdf');
for ($pageNumber = 1; $pageNumber <= $pageCount; $pageNumber++) {
$staticIds[$pageNumber] = $pdf->importPage($pageNumber);
}
// get the page count of the uploaded file
$pageCount = $pdf->setSourceFile('the/uploaded.pdf');
// let's track the page number for the filler page
$fillerPageCount = 1;
// import the uploaded document page by page
for ($pageNumber = 1; $pageNumber <= $pageCount; $pageNumber++) {
$tplId = $pdf->importPage($pageNumber);
$pdf->AddPage();
$pdf->useTemplate($tplId, null, null, 0, 0, true);
// add the current filler page
$pdf->AddPage();
$pdf->useTemplate($staticIds[$fillerPageCount], null, null, 0, 0, true);
// update the filler page number or reset it
$fillerPageCount++;
if ($fillerPageCount > count($staticIds)) {
$fillerPageCount = 1;
}
}
// done
$pdf->Output('xxx/result.pdf', 'F');