我正在尝试使用 dompdf 将较大的 html 表格呈现为 pdf。有最少的 css 样式,但表中可能有 200 - 300 行。每行有 4 个带有基本文本的 td。
我可以毫无问题地生成较小表格的 pdf,但较大表格会耗尽内存限制并且脚本会终止。解决这个问题的最佳方法是什么?我开始了关于 serverfault 的讨论,一位用户建议生成一个新进程,以免耗尽 php/apache 的内存限制?这是最好的方法吗?这让我产生了关于它如何工作的问题,因为 dompdf 当前将下载流式传输到浏览器,但我假设如果我创建一个新进程来生成报告,我将无法再将输出发送到浏览器用户下载?
感谢任何能够提出解决此问题的好方法的人!
最佳答案
如果您使用辅助 PHP 进程(例如使用 exec()
)呈现 HTML,则执行时间和内存限制会得到缓解。当以这种方法呈现时,您将呈现的 PDF 保存到网站上的一个目录并将用户重定向到下载(如果您想运行呈现队列,甚至可以通过电子邮件向他们发送链接)。一般来说,我发现这种方法确实在速度和内存使用方面提供了适度的改进。
但是,这并不意味着渲染在您的情况下会执行得更快。目前使用 dompdf 渲染表格是资源密集型的。如果可以的话,可能更好的方法是将文档分成几个部分,分别呈现每个部分(再次使用辅助 PHP 进程),将生成的 PDF 集合组合成一个文件(使用类似 pdftk 的东西),然后将 PDF 保存在用户可以访问的位置。我已经看到使用此方法显着提高了性能。
或者使用 wkhtmltopdf 之类的东西(如果您可以通过 shell 访问您的服务器并且愿意处理安装过程)。
关于php 和 dompdf - 如何在不让我的服务器突然停止的情况下生成大型 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16202461/