使用PHP将HTML + CSS转换为PDF?

我有一个在Firefox 3和IE 7中呈现良好的HTML(不是XHTML)文档。它使用相当基本的CSS来设计它,并且在HTML中渲染得很好。

我现在正在将它转换为PDF。 我努力了:

  • DOMPDF:它有很多表格问题。 我分解了我的大型嵌套表,并且它有所帮助(在它耗尽高达128M的内存然后死亡之前 - 这是我在php.ini中对内存的限制),但是它使得表格变得非常混乱,似乎并没有得到图片。 这些表只是基本的东西,有些边框样式可以在不同的点添加一些线条;
  • HTML2PDF和HTML2PS:我其实有更好的运气。 它呈现了一些图像(所有的图像都是谷歌图表网址),表格格式更好,但它似乎有一些复杂性问题,我还没有想出来,并一直与未知​​的node_type()错误死亡。 不知道该从哪里出发; 和
  • Htmldoc:这对于基本的HTML似乎工作得很好,但几乎不支持CSS,所以你必须用HTML做所有事情(我没有意识到它仍然是2001年在Htmldoc-land中),所以对我来说是没用的。
  • 我尝试了一款名为Html2Pdf Pilot的Windows应用程序,它实际上做了一件相当不错的工作,但我需要的东西至少在Linux上运行,理想情况下通过Web服务器上的PHP按需运行。

    我错过了什么,或者我该如何解决这个问题?


    重要提示:请注意,这个答案是在2009年编写的,它可能不是当今2018年最具成本效益的解决方案。浏览器和其他开源渲染器在这方面比现在好得多。


    看看PrinceXML。

    这绝对是最好的HTML / CSS到PDF转换器,虽然它不是免费的(但是,嘿,你的编程也可能不是免费的,所以如果它节省了你10个小时的工作,你可以免费回家(因为你也需要考虑到替代解决方案将要求您使用正确的软件设置专用服务器)

    哦,是的,我提到过,这是第一个(也可能是唯一一个)完全支持ACID2的HTML2PDF解决方案吗?

    PrinceXML示例


    看看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设置:

  • pcre.backtrack_limit = 2000000; #可能比我需要的多,但没关系
  • memory_limit = 1024M; #是, 一千兆字节 ; 和
  • max_execution_time = 600; #是的, 10分钟
  • 现在精明的读者可能已经注意到我的HTML文件小于100k。 我可以猜测出为什么我遇到这个问题的唯一原因是,html2pdf将转换为xhtml作为过程的一部分。 也许这让我感到厌倦(尽管近50%的人看起来很奇怪)。 无论如何,上述工作。

    现在,html2pdf是一个资源管理器。 我的70k文件大约需要5分钟,至少需要500-600M的RAM才能创建35页的PDF文件。 对于不幸的是实时下载和内存使用情况的速度不够快(目前为止)会将内存的使用比率在1000到1的顺序(600M RAM为70K的文件),这是完全荒谬的。

    不幸的是,这是我所想到的最好的。

    链接地址: http://www.djcxy.com/p/15307.html

    上一篇: Convert HTML + CSS to PDF with PHP?

    下一篇: A font to override the High contrast setting