PHP插入多个PDF';s转换为特定页码上的PDF

PHP插入多个PDF';s转换为特定页码上的PDF,php,cakephp,pdf,merge,page-numbering,Php,Cakephp,Pdf,Merge,Page Numbering,我的问题是-一个用户可以上传一个PDF文件,现在我想在用户上传的每一页PDF之后添加其他(1到n个)单页PDF 例如,一个用户上载了一个包含4页的PDF,我在我的Web服务器上得到了3个单页PDF,我想与该用户的PDF合并。生成的PDF应如下所示: <?php require_once("libs/fpdf/fpdf.php"); require_once("libs/fpdi/fpdi.php"); $pdf = new FPDI(); // let's prepare the s

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

例如,一个用户上载了一个包含4页的PDF,我在我的Web服务器上得到了3个单页PDF,我想与该用户的PDF合并。生成的PDF应如下所示:

<?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');
第1页:用户上传的PDF第1页

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

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

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

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

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

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

第8页:来自Web服务器的第一个单页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的页面编号?

您应该避免使用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');

什么是恢复页面顺序?我正在使用mPdf获得类似的内容。在我的例子中,我有一个带有页码的PDF。现在有人带来了两个新的pdf,并要求我将这两个新的pdf合并到某个特定页面的pdf中。在位置3和位置7说。最后,页码也应相应地排列。有什么建议吗?@DeepakSingh这只是一个逻辑问题,应该由程序员解决。