我有一个 HTML(不是 XHTML)文档,可以在 Firefox 3 和 IE 7 中呈现。它使用相当基本的 CSS 来设置它并在 HTML 中呈现得很好。
我现在正在采用将其转换为 PDF 的方法。我试过了:
我尝试了一个名为 Html2Pdf Pilot 的 Windows 应用程序实际上做了相当不错的工作,但我需要的东西至少在 Linux 上运行,理想情况下通过 Web 服务器上的 PHP 按需运行。
我错过了什么,或者我该如何解决这个问题?
看看wkhtmltopdf
。它是开源的,基于 webkit 和免费。
我们在这里写了一个小教程。
编辑(2017):
如果今天要建造一些东西,我就不会再去那条路了。
但是请改用http://pdfkit.org/ 。
可能会剥夺其所有 nodejs 依赖项,以便在浏览器中运行。
经过一些调查和一般的拉毛解决方案似乎是HTML2PDF 。 DOMPDF做了一个糟糕的工作,包括表格,边框甚至是中等复杂的布局, htmldoc似乎相当健壮,但几乎完全是 CSS 无知的,我不想回到没有 CSS 只为该程序做 HTML 布局。
HTML2PDF 看起来最有希望,但我一直有关于 node_type 的空引用参数的这个奇怪的错误。我终于找到了解决方案。基本上,PHP 5.1.x 在任何大小的字符串上使用正则表达式替换(preg_replace_ *)都能正常工作。 PHP 5.2.1 引入了一个名为pcre.backtrack_limit的 php.ini 配置指令。此配置参数的作用是限制完成匹配的字符串长度。为什么这是介绍我不知道。默认值选择为 100,000。为什么这么低的价值?再一次,不知道。
为此针对 PHP 5.2.1 提出了一个错误,该错误在 将近两年后仍然开放。
令人恐惧的是,当超过限制时,替换只是默默地失败 。至少如果出现错误并记录错误,您就会知道发生了什么,为什么以及要修改什么来修复它。但不是。
所以我有一个 70k 的 HTML 文件变成 PDF。它需要以下 php.ini 设置:
现在精明的读者可能已经注意到我的 HTML 文件小于 100k。我可以猜到为什么我遇到这个问题的唯一原因是 html2pdf 转换为 xhtml 作为过程的一部分。也许这让我过去了(虽然近 50%的膨胀看起来很奇怪)。无论如何,上述工作都有效。
现在,html2pdf 是一种资源匮乏。我的 70k 文件需要大约 5 分钟和至少 500-600M 的 RAM 才能创建 35 页的 PDF 文件。不幸的是,实时下载速度不够快(到目前为止)并且内存使用率使内存使用率大约为 1000 比 1(700k 文件的 RAM 为 600M),这完全是荒谬的。
不幸的是,这是我提出的最好的。