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

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

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

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

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

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

Я thanksfull за любые советы.

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

EDIT:

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

3 ответов


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

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

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

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


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

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

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

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


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

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