2012-08-29 20 views
7

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

  1. 获取数据从数据库
  2. 基于单一的数据行和PDF格式
  3. .fdf文件保存到磁盘
  4. 创建FDF充满合并与FDF的PDF使用pdftk(fill_form with flatten命令)
  5. 继续遍历行直到生成所有.pdf's
  6. 所有生成的文件合并在一起in结束和单个pdf给客户端

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

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

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

我很感谢任何建议。

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

编辑:

我最多找出语法来构建一个.fdf文件使用相同的PDF作为模板多页,花了几个小时,但没有找到任何好的文档。

+0

你可以使用像webgrind Xdebug的一些分析工具,看看什么东西实际上是需要时间(然后你就可以解决),我倒在同样的情况下几天就回来,是使用开源这是排队系统在我的情况下花时间。我正在使用dompdf,这也是开源解决方案。 – amitchhajer

+0

我做了分析,花费大量时间的主要事情是反复编写单独的pdf。 –

+0

为什么不直接运行6或7个pdftk转换,应该将总时间缩短到10秒钟。 –

回答

1

beeing面临着很长一段时间同样的问题后(​​希望基于胶乳生成我的PDF文件),我终于决定切换到另一种原油,但有效的方法:

我产生我的两个步骤的PDF文件:第我使用模板引擎如twig或smarty生成html。第二我使用mpdf生成PDF格式。我尝试了很多其他的html2pdf框架,最后使用了mpdf,它非常成熟并且很长一段时间(频繁更新,丰富的功能)开发。使用这种技术的好处是:您可以使用css来设计您的文档(mpdf完全使用css) - 它伴随着css好处(http://www.csszengarden.com),并且非常容易生成动态表格。

MPDF解析HTML表格并查找THEADER,tfooter元素并把它每一页上,如果你的表是大于一个页面大小。您还可以使用页面nr等动态实体来定义页面页眉和页面页脚元素。

我知道,用这种迂回似乎是一个解决办法,但说实话,没有乳胶,PDF无论发动机的强大和简单的HTML!

0

尝试像FPDF(http://www.fpdf.org/

不同不太复杂的图书馆中,我觉得很不错版和精简版。

总是找到小的图书馆,只做你需要他们做的事情。

库越大,消耗的资源就越多。

+0

是的,我已经看到并使用过这些库(fpdf,tcpdf,dompdf),但他们没有做我需要的。我必须生成一个基于一个PDF模板的大型PDF,并用数据填写。这些库都没有这样做。它们适合从头开始创建自己的pdf,但不适用于模板。 –

+0

那么你应该考虑一个不同的PHP调用,以确保每一代的内存被清除产生他们一个。确保即使您生成了清除任何大的变量。甚至可能是一个非PHP解决方案。 – transilvlad

0

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

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