繁体   English   中英

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

[英]Convert HTML + CSS to PDF with nodeJS or Javascript?

我有个问题。 我尝试了一些将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

有什么想法吗? 我在后端使用sailsJS的nodeJS,在前端使用ionic的javascript。

对不起,我的英语。

这是一个难题。 我还发现,现有的HTML到PDF库通常无法处理我扔给它们的HTML和CSS。

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

您提到您正在使用node.js ,但是尚不清楚您的环境是什么,因此我假设您的报告可通过http://my.domain/phase_one_report.html类的URL 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
    }
);

wkhtmltopdf有很多不同的命令行选项-您需要研究所有不同的配置方式。

如果您的报告无法通过URL访问,则情况会变得更加复杂-您需要内联CSS并将所有内容立即发送到wkhtmltopdf

现在有许多可用的选项:

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

如前所述的wkhtmltopdf可以完成这项工作,但有些过时了。

您将必须观看最新的chrome版本,其中包含--headless选项,以启用html + css + js到pdf的转换。

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

但是,Phantom.js是当前唯一真正无头且基于javascript的解决方案。 Slimer.JS可与Firefox一起使用,但要求您具有窗口管理器,至少xvfb是虚拟框架缓冲区。

如果您想要最新的浏览器功能,则必须使用slimer.js,或者使用另一个基于Electron的解决方案,该方案会不断弹出。 Electron基于Chrome,并且也可以编写脚本。 目前还随Docker容器一起提供的一种很好的解决方案是https://github.com/msokk/electron-render-service

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM