使用pdftk在PHP中生成基于批量模板的pdf生成

Naz*_*gol 7 php pdf pdf-generation fdf pdftk

我正在基于模板进行批量生成的pdf文件,并且我很快遇到了大的性能问题.我目前的情况如下:

  1. 获取要从db填充的数据
  2. 根据单个数据行和pdf格式创建fdf
  3. .fdf文件写入磁盘
  4. 使用pdftk将pdf与fdf合并(fill_form with flatten命令)
  5. 继续遍历行直到.pdf生成所有行
  6. 所有生成的文件最终合并在一起,单个pdf被提供给客户端

passthru用来给客户端提供原始输出(节省写入文件的时间),但这只是一点性能改进.对于200条记录,总操作时间约为50秒,我想以某种方式降低至少10秒.

理想的情况是在内存中运行所有这些pdf,而不是将它们中的每一个写入单独的文件,但是输出将无法完成,因为我无法将这种数据传递给外部工具,如pdftk.另一个想法是生成一个.fdf包含所有这些行的大文件,但看起来不允许这样做.

我在这里错过了一些非常微不足道的东西吗?

我很感谢任何建议.

PS.我知道我可以使用像pdflib这样的好库,但我现在只考虑开放的许可库.

编辑:

我正在弄清楚.fdf使用相同的pdf作为模板构建具有多个页面的文件的语法,花了几个小时并且找不到任何好的文档.

sic*_*ics 1

在长时间面临同样的问题之后(想基于 LaTeX 生成我的 pdf),我最终决定改用另一种粗糙但有效的技术:

我分两步生成 pdf:首先,我使用twig或 smarty 等模板引擎生成 html。其次,我使用mpdf生成 pdf。我尝试了很多其他的html2pdf框架,最终使用了mpdf,它非常成熟,并且已经开发了很长时间(更新频繁,功能丰富)。使用这种技术的好处:您可以使用 css 来设计您的文档(mpdf 完全具有 css) - 它附带 css 好处(http://www.csszengarden.com)并且非常容易生成动态表格。

Mpdf 解析 html 表格并查找 theheader、tfooter 元素,如果您的表格大于一页大小,则将其放在每一页上。您还可以使用动态实体(如页面编号等)定义页眉和页脚元素。

我知道,使用这个绕道似乎是一种解决方法,但说实话,没有乳胶,pdf任何引擎都像html一样强大和简单!