Я пытаюсь объединить 2 PDF, один на моем сервере (не динамически сгенерированный) и один, сгенерированный непосредственно перед слиянием и не сохраненный нигде на сервере (я просто хочу, чтобы мой клиент его загрузил). Таким образом, у меня есть только контент в формате pdf. Оба PDF имеют одинаковый формат (A4).
Объединенный файл будет иметь 2 страницы и не будет сохранен на сервере.
Поскольку, я использую Zend Framework, я бы предпочел решение с ним (не могу найти один онлайн …) иначе какие-либо советы?
(общее решение найдено в Интернете, но не работает)
Изменить: потому что люди ленивы, чтобы щелкнуть. Код в ссылке в любом случае, так как это неправильно и не работает.
Я попробую сценарий ниже, но я получаю сообщение об ошибке:
Необлученное исключение «Zend_Pdf_Exception» с сообщением «Страница прикреплено к одному документу, но отображается в контексте другого
Хорошо, с гидом от комментария @Gordon в моем вопросе, я получил решение.
clone
страницу из PDF-файла, который хотите объединить, иначе ваше приложение напечатает сообщение об ошибке (самоочевидное) (найденное благодаря этому слайд-шоу, которое очень интересно для Zend_Pdf) Я использовал это приложение для преобразования статических файлов, которые у меня были в версии от 1.6 до 1.4.
Вот грубый код, который у меня есть и работает (я знаю, что он не оптимизирован, я сделаю это позже, но все же, это может быть полезно)
$pdf2show = new Zend_Pdf(); // Initializing the merged PDF $pdf1 = Zend_Pdf::parse($pdfContent, 1); // $pdfContent is the generated one, got the content... $template = clone $pdf1->pages[0]; // cloning the page (a must do) $page1 = new Zend_Pdf_Page($template); // Creating the first page of the merged PDF with the previous content $pdf2show->pages[] = $page1; // Adding this page to the final PDF $pdf2 = Zend_Pdf::load('urlToYourPDF.pdf'); // Loading the statif PDF $template2 = clone $pdf2->pages[0]; // cloning the page (a must do) $page2 = new Zend_Pdf_Page($template2); // Creating the second page of the merged PDF with the previous content $pdf2show->pages[] = $page2; // Adding this page to the final PDF sendToWebBrowser('title', $pdf2show->render());
sendToWebBrowser
– это функция, отправляющая содержимое PDF в браузер с title
как … title. $pdf2show->render()
создает объединенный PDF-контент в виде строки.
$extractor = new Zend_Pdf_Resource_Extractor(); $clone_page_to_use_in_any_pdf = $extractor->clonePage($original_pdf->pages[0]);
Вот как я это сделал.
Надеюсь, это поможет всем.
TJ
$extractor = new Zend_Pdf_Resource_Extractor(); $page1 = $extractor->clonePage($pdf->pages[$templatePageIndex1]); $page2 = $extractor->clonePage($pdf->pages[$templatePageIndex2]); $page1->drawText('Some text...', $x, $y); $page2->drawText('Another text...', $x, $y); $pdf = new Zend_Pdf(); $pdf->pages[] = $page1; $pdf->pages[] = $page2;
Прямо от уст лошадей.
http://framework.zend.com/manual/en/zend.pdf.pages.html#zend.pdf.pages.cloning
Вы пытались слить их с помощью инструментария PDF ?
Слияние нескольких PDF-файлов с ним может быть достигнуто с помощью:
pdftk 1.pdf 2.pdf 3.pdf cat output 123.pdf
123.pdf будет результирующим PDF. Вы можете временно сохранить полученный PDF-файл на сервере, отправить его в браузер и удалить его, когда он больше не нужен.
Мой опыт слияния PDF-файлов: