0

我的问题是 - 用户可以上传 PDF 文件,现在我想在用户上传 PDF 的每一页之后添加其他(1 到 n 之间)单页 PDF。

例如,用户上传了一个包含 4 页的 PDF,而我的网络服务器上有 3 个单页 PDF,我想与用户 PDF 合并。生成的 PDF 应如下所示:

第 1 页:来自用户上传的 PDF 的第 1 页

第 2 页:来自网络服务器的第一个单页 PDF

第 3 页:来自用户上传的 PDF 的第 2 页

第 4 页:来自网络服务器的第二个单页 PDF

第 5 页:来自用户上传的 PDF 的第 3 页

第 6 页:来自网络服务器的第三个单页 PDF

第 7 页:来自用户上传的 PDF 的第 4 页

第 8 页:来自网络服务器的第一个单页 PDF

到目前为止,我已经尝试使用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 的页码?

4

1 回答 1

0

您应该避免使用 PDFMerger 类。它快 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');
于 2015-11-26T08:08:49.177 回答