如何自动执行HTML到PDF的转换?

我一直在使用htmldoc,但是我遇到了一些相当严重的限制。 我需要最终解决scheme在Linux机器上工作。 我将从Perl应用程序调用这个库/实用程序/应用程序,所以任何Perl接口都将是一个奖金。

PrinceXML是我见过的最好的一个(它parsing常规的HTML以及XML / XHTML)。 怎么样最好? 那么,它通过了我认为令人印象深刻的acid2testing

但是,它相当昂贵

很抱歉发现这个旧的post,但它是我最先find最好的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 ... 

我做了一些Googlesearch,并提出了两个select。 可能还有更多,我的谷歌策略是尝试“webkit命令行pdf”和“gecko命令行pdf”,基本上寻找命令行程序,将两个stream行的开源渲染引擎embedded到命令行渲染器中。 这是我发现的:

Firefox命令行打印机 – 输出到PDF和PNG

wkpdf – 虽然这是为mac,它可能是相当便携。

从Chrome 59开始,就有了一种新的无头模式。由于所有其他的解决scheme都与更新的(或者不是那么新的)CSSfunction(比如flexbox)发生冲突,所以在我的情况下,这是唯一能够生成正确的PDF输出的解决scheme。

要从本地html文件创buildpdf,只需使用以下命令: chrome --headless --disable-gpu --print-to-pdf file:///path/to/myfile.html

对于/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome Mac OS替代版。

我注意到唯一的缺点是(目前)你不能通过stdin传递html,但是创build一个临时文件并不是什么大问题。

有关详情,请参阅https://developers.google.com/web/updates/2017/04/headless-chrome#create_a_pdf_dom

更新:事实certificate,铬的家伙将最有可能提供某种节点模块这个任务,这将最终弃用无头模式( https://bugs.chromium.org/p/chromium/issues/detail?id = 719921 )。

最好的办法是使用基于节点的方法,使用https://developers.google.com/web/updates/2017/04/headless-chrome#node中记载的puppeteer模块,并通过Page.printToPDF打印页面命令,这也启用了一些额外的configuration。;

当然,你也可以从节点(即PHP脚本)以外的任何其他环境连接到debugging控制台websocket。

我不会说这是“最好”的解决scheme,但它是我使用的“一个”解决scheme。

HTMLinput – > HTML 2 PS – > PS 2 PDF – > PDF输出

这将是完全矫枉过正,但你可以下载和安装欢乐 。 它是一个消息路由引擎,但它能够将HTML转换为PDF,所以你可以设置它来拾取一个文件夹中的HTML文件,转换为PDF,并将PDF放在相同或其他文件夹。 就像我说的,过度的,一点点的学习曲线,但它是免费的,和Java,所以你可以在Linux上运行它,如果你喜欢。 而你所有的perl应用程序将不得不做的是把HTML的文件。

你应该看看http://phantomjs.org/

转换可以通过一个小脚本rasterize.js然后发行

 phantomjs rasterize.js 'http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes' jakarta.pdf 

您可能想要查看Peernet的“文档转换服务”(位于http://www.peernet.com/conversion-software/batch-document-converter/ )。 这在Windows桌面或Windows Server计算机上作为服务运行。 它在Web浏览器中打开HTML文档,然后通过打印驱动程序打印它们以创buildPDF文档,以便生成的PDF文档看起来与您从浏览器打印HTML文档完全一样。