我一直在使用htmldoc,但是我遇到了一些相当严重的限制.我需要最终解决方案才能在Linux机器上运行.我将从Perl应用程序调用此库/实用程序/应用程序,因此任何Perl接口都将是一个奖励.
很抱歉发现这篇旧帖子,但它在我搜索最佳HTML/PDF转换工具时首先出现.在Linux上,wkhtmltopdf非常好(考虑到CSS等)和GPL.
WeasyPrint生成带有可选文本和超链接的精美PDF.
weasyprint input.html output.pdf
如果您wkhtmltopdf
改用,请尝试以下选项:
wkhtmltopdf --margin-bottom 20mm --margin-top 20mm --minimum-font-size 16 ...
PrinceXML是我见过的最好的(它解析常规HTML以及XML/XHTML).它是如何最好的?好吧,它通过了acid2测试,我认为这是非常令人印象深刻的
然而,它非常昂贵
自Chrome 59以来,有一种新的无头模式.由于所有其他解决方案真的很难与更新(或不再那么新)的CSS功能如flexbox,这在我的情况下是产生正确PDF输出的唯一解决方案.
要从本地html文件创建pdf,只需使用以下命令:
chrome --headless --disable-gpu --print-to-pdf file:///path/to/myfile.html
.
对于Mac OS替代chrome
用/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
.
到目前为止我注意到的唯一缺点是(目前)你无法通过stdin传递html,但创建一个临时文件并不是一个问题.
有关详细信息,请参阅https://developers.google.com/web/updates/2017/04/headless-chrome#create_a_pdf_dom
更新:事实证明,chrome人员很可能会为此任务提供某种节点模块,最终会弃用无头模式(https://bugs.chromium.org/p/chromium/issues/detail?id = 719921).
最好的办法是使用https://developers.google.com/web/updates/2017/04/headless-chrome#node中记录的puppeteer 模块使用基于节点的方法,并通过Page.printToPDF打印页面命令,也可以进行一些额外的配置.
当然,您也可以从节点以外的任何其他环境(即PHP脚本)连接到调试控制台websocket.
我为你做了一些谷歌搜索,并提出了两个选项.可能还有更多,我的谷歌策略是尝试"webkit命令行pdf"和"gecko命令行pdf",基本上寻找在命令行渲染器中嵌入两个流行的开源渲染引擎的命令行程序.这是我发现的:
Firefox命令行打印机 - 输出到pdf和png
wkpdf - 虽然这是用于mac,但它可能非常便携.