Массовая генерация pdf на основе шаблонов в PHP с использованием pdftk
я делаю массовое поколение pdf-файлов на основе шаблонов, и я столкнулся с большими проблемами производительности довольно быстро. Мой текущий сценарий выглядит следующим образом:
- получить данные для заполнения из БД
- создать fdf на основе одной строки данных и pdf-формы
- написать на диске
- объединить pdf с fdf с помощью pdftk (fill_form с командой flatten)
- продолжить итерацию по строкам, пока все
.pdf
С созданный - все сгенерированные файлы объединяются вместе в конце концов, и один 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, чтобы избежать необходимости записывать их на диск.