Массовая генерация pdf на основе шаблонов в PHP с использованием pdftk


Я занимаюсь массовым созданием PDF-файлов на основе шаблонов, и у меня довольно быстро возникли большие проблемы с производительностью. Мой текущий сценарий выглядит следующим образом:

  1. получить данные для заполнения из базы данных
  2. создайте fdf на основе одной строки данных и формы pdf
  3. запись .fdf файла на диск
  4. объединить pdf с fdf с помощью pdftk (заполнить форму с помощью команды выравнивания)
  5. продолжайте перебирать строки, пока не будут сгенерированы все .pdf
  6. все сгенерированные файлы являются в конце концов, они объединяются вместе, и один pdf-файл передается клиенту

Я использую passthru для предоставления необработанного вывода клиенту (экономит время на запись файла), но это всего лишь небольшое улучшение производительности. Общее время работы составляет около 50 секунд для 200 записей, и я хотел бы каким-то образом сократить время хотя бы до 10 секунд.

Идеальным сценарием было бы использовать все эти PDF-файлы в памяти, а не записывать каждый из них в отдельный файл, но тогда вывод будет это невозможно сделать, так как я не могу передавать такие данные во внешний инструмент, такой как pdftk. Еще одна идея состояла в том, чтобы создать один большой файл .fdf со всеми этими строками, но, похоже, это запрещено.

Я упускаю здесь что-то очень тривиальное?

Я благодарен за любой совет.

ПС. Я знаю, что мог бы использовать какую-нибудь хорошую библиотеку, такую как pdflib, но сейчас я рассматриваю только открытые лицензированные библиотеки.

РЕДАКТИРОВАТЬ:

Я собираюсь выяснить синтаксис для построения .fdf файл с несколькими страницами, использующий один и тот же pdf-файл в качестве шаблона, потратил несколько часов и не смог найти никакой хорошей документации.

Author: Nazar Gargol, 2012-08-29

3 answers

После того, как я долгое время сталкивался с одной и той же проблемой (хотел создать свои PDF-файлы на основе LaTeX), я, наконец, решил переключиться на другой грубый, но эффективный метод:

Я создаю свои PDF-файлы в два этапа: сначала я создаю html с помощью механизма шаблонов, такого как twig или smarty. во-вторых, я использую mpdf для создания PDF-файлов из него. Я пробовал многие другие фреймворки html2pdf и в итоге использовал mpdf, он очень зрелый и разрабатывается с давних пор (частые обновления, богатый функциональность). преимущество использования этой техники: вы можете использовать css для создания своих документов (mpdf полностью поддерживает css), что сопровождается преимуществом css (http://www.csszengarden.com) и очень легко создавать динамические таблицы.

Mpdf анализирует таблицы html и ищет элемент theader, tfooter и помещает его на каждую страницу, если ваши таблицы больше одного размера страницы. Также у вас есть возможность определять элементы верхнего и нижнего колонтитулов страницы с помощью динамических объектов, таких как номер страницы и так далее.

Я знаю, что использование этого обхода кажется обходным путем, но, честно говоря, никакой движок latex, pdf, какой бы он ни был, такой же сильный и простой, как html!

 1
Author: sics, 2012-09-07 05:27:18

Попробуйте другую, менее сложную библиотеку, такую как fpdf (http://www.fpdf.org/)

Я нахожу его довольно хорошим и легким.

Всегда находите небольшие библиотеки и делайте только то, что вам нужно.

Чем больше библиотека, тем больше ресурсов она потребляет.

 0
Author: transilvlad, 2012-09-01 18:26:54

Это не поможет вашей многостраничной проблеме, но я замечаю, что pdftk принимает символ -, означающий "чтение со стандартного ввода".

Возможно, вы сможете отправить .fdf процессу pdftk через его стандартный вход, чтобы избежать необходимости записывать их на диск.

 0
Author: Lethargy, 2012-09-01 21:31:30