2016-12-15 66 views
0

我有一个问题。我试过一些将html转换为PDF但不导入CSS的库,所以我的PDF无效。使用nodeJS或Javascript将HTML + CSS转换为PDF?

我与 “HTML2PDF”, “pdfmake”, “jspdf” 试过..

PDFMake并不能帮助我,因为它需要生成HTML数据的JSON ...

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

  • HTML:WWW /模板/ phase_one_report.html
  • CSS:WWW/C ss/phase_one_report.css

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

对不起,我的英语。

+1

您的css文件是否包含在html文件中?你能提供一些关于它不起作用的例子(图片)吗? “PDF无效”是什么意思?你的意思是风格混乱吗? – Alic

+0

你试过[link](http://wkhtmltopdf.org/downloads.html)吗? – Mntfr

+0

@ZichenJiang我认为“PDF无效”是因为它没有样式。我在phase_one_report.html中有一个按钮,它应该生成PDF – oihi08

回答

0

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

我发现的最佳解决方案根本不是Javascript:wkhtmltopdf。这实际上是一个包装了webkit渲染引擎的程序,因此您可以为其提供任何HTML + CSS,Webkit可以渲染它并返回PDF文档。它做得很出色,因为它实际上就像浏览器一样渲染文档。

您提到您正在使用node.js,但尚不清楚您的环境是什么,因此我假定您的报告可在像http://my.domain/phase_one_report.html这样的URL处获得。最简单的方法是在服务器上安装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命令行选项 - 你需要考虑所有不同的方式进行配置。

如果您的报告是而不是可以通过网址访问,那么这会变得更加复杂 - 您需要内嵌CSS并将所有内容一次发送到wkhtmltopdf

0

有许多可用的选项现在:如前面提到的

wkhtmltopdf做这项工作,但稍显陈旧。

你将不得不观看最新的chrome发行版,它将有一个--headless选项来启用html + css + js到pdf转换。

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

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

如果您想要获得最新的浏览器功能,您将不得不使用slimer.js或另一种选择,使用其中一种基于Electron的解决方案,并不断弹出。 Electron基于Chrome并且可以脚本化。 Docker容器附带的优秀解决方案目前是https://github.com/msokk/electron-render-service

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