php 和 dompdf - 如何在不让我的服务器突然停止的情况下生成大型 pdf

标签 php pdf-generation dompdf

我正在尝试使用 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/

相关文章:

php - 自定义 DomPDF 名称

php - 规范 : How to save HTML form data into MySQL database

php - jQuery.ajax - 将数据发布回同一页面后重复内容

php , mysql 插入 $ 符号不起作用

r - "Compile PDF"和 knit2pdf 的区别

php - dompdf 0.7.0 beta 的粗体字体

html - DOMPDF 0.8.1 固定页眉和页脚不显示在第一页上

php - 我的 mysql_num_rows($query);函数没有得到结果

ruby-on-rails - 使用 Prawn 生成的 PDF 中右侧缩进的文本

ruby-on-rails - 每页的页脚在 rails 3.2 中不起作用( Prawn PDF)