使用nodeJS或Javascript将HTML + CSS转换为PDF?

时间:2016-12-15 16:03:31

标签: javascript html css node.js pdf

我有问题。我尝试了一些将html转换为PDF的库,但是他们没有导入CSS,因此我的PDF无效。

我试过" html2pdf" ," pdfmake"," jspdf" ..

PDFMake对我没有帮助,因为它需要生成带有HTML数据的JSON ......

我想要转换为PDF的文件结构是:

  • html :www / templates / phase_one_report.html
  • css :www / css / phase_one_report.css

一些想法?我在后端使用nodeJS和sailsJS,在前端使用离子javascript。

对不起我的英语。

2 个答案:

答案 0 :(得分:1)

现在有很多选择:

编辑09/2018:使用puppeteer,JS Headless Chrome驱动程序。 Firefox现在也有无头模式,但我不确定哪个库对应于puppeteer。

如前所述,wkhtmltopdf可以胜任这项工作,但有点过时了。

你必须观看最新的chrome版本,这些版本将有一个--headless选项来启用html + css + js到pdf的转换。

然后是PhantomJS和Slimer.js。两者都可以与节点和Javascript一起使用。 Nightmare.js也是一个选项,但它位于它之上。

但是,Phantom.js是目前唯一真正无头和基于javascript的解决方案。 Slimer.JS适用于Firefox,但要求你有一个窗口管理器,至少xvfb,一个虚拟帧缓冲区。

如果你想要最新的浏览器功能,你必须使用slimer.js,或者另一种选择,选择一种不断出现的基于电子的解决方案。 Electron基于Chrome,也可以编写脚本。目前还提供了Docker容器附带的精细解决方案https://github.com/msokk/electron-render-service

此列表可能不完整,并且在不久的将来会发生很大变化。

答案 1 :(得分:0)

这是一个难题。我还发现现有的HTML到PDF库通常不会处理HTML&我扔给他们的CSS。

我找到的最佳解决方案根本不是Javascript:wkhtmltopdf。这本质上是一个包装webkit呈现引擎的程序,以便您可以为其提供webkit可以呈现的任何HTML + CSS,并且它将返回PDF文档。它做得非常出色,因为它实际上就像浏览器一样呈现文档。

您提到您正在使用node.js,但它并不清楚您的环境究竟是什么,因此我假设您的报告可在{{{ {1}}。最简单的方法是在服务器上安装http://my.domain/phase_one_report.html应用程序,然后使用wkhtmltopdf执行它。

例如:

child_process.exec

import { exec } from 'child_process'; // generate the report // execute the wkhtmltopdf command exec( 'wkhtmltopdf http://my.domain/phase_one_report.html output_file.pdf', (error) => { // send the PDF file to the client } ); 有许多不同的命令行选项 - 您需要查看配置它的所有不同方法。

如果您的报告在网址上可访问,那么这会变得有点复杂 - 您需要内联CSS并立即将所有内容发送到wkhtmltopdf