PHP Вставить несколько PDF-файлов в PDF на конкретный номер страницы

Моя проблема в том, что пользователь может загрузить PDF-файл, и теперь я хочу добавить другие (от 1 до n) одностраничные PDF-файлы после каждой страницы загруженного пользователем PDF-файла.

Например, пользователь загружает PDF с 4 страницами, и у меня есть 3 одностраничных PDF на моем веб-сервере, которые я хочу объединить с пользовательским PDF. Полученный PDF должен выглядеть следующим образом:

Страница 1: Страница № 1 из загруженного пользователем файла PDF

Страница 2: Первая одностраничная PDF с веб-сервера

Страница 3: Страница № 2 из загруженного пользователем файла PDF

Страница 4: Второй одностраничный PDF от веб-сервера

Страница 5: Страница № 3 из загруженного пользователем файла PDF

Страница 6: Третья одностраничная PDF с веб-сервера

Страница 7: Страница № 4 из загруженного пользователем файла PDF

Страница 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?

1 ответ

Решение

Вы должны избегать использования класса 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');
Другие вопросы по тегам