Объединение 2 pdf с Zend Framework

Я пытаюсь объединить 2 PDF, один на моем сервере (не динамически сгенерированный) и один, сгенерированный непосредственно перед слиянием и не сохраненный нигде на сервере (я просто хочу, чтобы мой клиент его загрузил). Таким образом, у меня есть только контент в формате pdf. Оба PDF имеют одинаковый формат (A4).

Объединенный файл будет иметь 2 страницы и не будет сохранен на сервере.

Поскольку, я использую Zend Framework, я бы предпочел решение с ним (не могу найти один онлайн …) иначе какие-либо советы?

(общее решение найдено в Интернете, но не работает)

Изменить: потому что люди ленивы, чтобы щелкнуть. Код в ссылке в любом случае, так как это неправильно и не работает.

Я попробую сценарий ниже, но я получаю сообщение об ошибке:

Необлученное исключение «Zend_Pdf_Exception» с сообщением «Страница прикреплено к одному документу, но отображается в контексте другого

Хорошо, с гидом от комментария @Gordon в моем вопросе, я получил решение.

  1. У вас должно быть как минимум Zend Framework 1.11 (я был в 1.9, первая ошибка) (найденный благодаря 3-му комментарию к этому вопросу)
  2. Вы должны clone страницу из PDF-файла, который хотите объединить, иначе ваше приложение напечатает сообщение об ошибке (самоочевидное) (найденное благодаря этому слайд-шоу, которое очень интересно для Zend_Pdf)
  3. Статический PDF должен быть PDF <= 1.4 (мой был 1.6). Zend_Pdf не может разобрать PDF, версия которого> 1.4

Я использовал это приложение для преобразования статических файлов, которые у меня были в версии от 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-файлов:

  • Zend_Pdf медленный и неэффективен для больших компиляций,
  • pdftk освободить закладки документа и разбился, если размер документа больше объединенных документов,
  • pdflib действительно быстрый и сохраняет закладки, эффективен для больших компиляций.