7

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

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

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

理想的情况是在内存中操作所有这些 pdf,而不是将它们中的每一个都写入单独的文件,但是由于我无法将这种数据传递给像 pdftk 这样的外部工具,所以输出将是不可能的。另一个想法是生成一个.fdf包含所有这些行的大文件,但看起来这是不允许的。

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

我很感谢您的任何建议。

PS。我知道我可以使用一些好的库,比如 pdflib,但我现在只考虑开放许可库。

编辑:

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

4

3 回答 3

1

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

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

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

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

于 2012-09-07T05:27:18.493 回答
0

尝试其他不太复杂的库,例如 fpdf ( http://www.fpdf.org/ )

我觉得它很好而且很精简。

总是找到小的库,只做你需要它们做的事情。

图书馆越大,消耗的资源就越多。

于 2012-09-01T18:26:54.800 回答
0

这不会帮助您解决多页问题,但我注意到 pdftk 接受该-字符表示“从标准输入读取”。

您可以.fdf通过它的标准输入将其发送到 pdftk 进程,以避免将它们写入磁盘。

于 2012-09-01T21:31:30.583 回答