经过一些调查和一般的拉毛解决方案似乎是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。为什么这么低的价值呢?再一次,不知道。
令人恐惧的是,当超过限制时,替换只是默默地失败。至少如果一个错误被提出并记录下来,你就会知道发生了什么,为什么以及要修改什么来修复它。但不是。
所以我有一个70k的HTML文件转换成PDF。它需要以下php.ini设置:pcre.backtrack_limit = 2000000; #可能比我需要的还多,但没关系
memory_limit = 1024M; #yes,一千兆字节 ; 和
max_execution_time = 600; #yes,10分钟。
现在精明的读者可能已经注意到我的HTML文件小于100k。我可以猜到为什么我遇到这个问题的唯一原因是html2pdf转换为xhtml作为过程的一部分。也许这让我过去了(虽然近50%的膨胀看起来很奇怪)。无论如何,上述工作都有效。
现在,html2pdf是一种资源匮乏。我的70k文件需要大约5分钟和至少500-600M的RAM来创建35页的PDF文件。不幸的是,实时下载速度不够快(到目前为止)并且内存使用率使内存使用率大约为1000比1(700k文件的RAM为600M),这完全是荒谬的。
不幸的是,这是我提出的最好的。