Слияние 2 PDF с Zend Framework - PullRequest
       25

Слияние 2 PDF с Zend Framework

5 голосов
/ 23 ноября 2010

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

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

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

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

Редактировать: потому что люди ленивые, чтобы нажать.В любом случае код указан в ссылке, так как он неправильный и не работает.

Я пробую приведенный ниже скрипт, но получаю сообщение об ошибке:

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

Ответы [ 5 ]

8 голосов
/ 23 ноября 2010

Хорошо, с руководством из комментария @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 в качестве ... заголовка.$pdf2show->render() создает объединенное содержимое PDF в виде строки.

4 голосов
/ 10 марта 2011
$extractor = new Zend_Pdf_Resource_Extractor();
$clone_page_to_use_in_any_pdf = $extractor->clonePage($original_pdf->pages[0]);

Вот как я это сделал.

Надеюсь, это поможет всем.

TJ

2 голосов
/ 10 марта 2011
$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

0 голосов
/ 31 мая 2012

Мой опыт слияния pdf:

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

Вы пытались объединить их с помощью PDF toolkit ?

Объединить несколько PDF-файлов с ним можно с помощью:

pdftk 1.pdf 2.pdf 3.pdf cat output 123.pdf

123.pdf будетитоговый PDF.Вы можете временно сохранить полученный PDF-файл на сервере, отправить его в браузер и удалить, когда он больше не нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...