使用Node.js将HTML转换为PDF
我正在寻找创build我的网站网页的可打印的pdf
版本。 像express.render()
这样的东西只会将页面渲染为pdf
有谁知道这样做的节点模块?
如果不是,你将如何去实施一个? 我已经看到一些方法使用像phantom.js
这样的无头浏览器,但不知道stream量是phantom.js
。
延伸穆斯塔法的答案。
B)安装幻像节点模块https://github.com/amir20/phantomjs-node
C)下面是一个渲染pdf的例子
var phantom = require('phantom'); phantom.create().then(function(ph) { ph.createPage().then(function(page) { page.open("http://www.google.com").then(function(status) { page.render('google.pdf').then(function() { console.log('Page Rendered'); ph.exit(); }); }); }); });
PDF的输出:
编辑: 无声打印PDF
java -jar pdfbox-app-2.0.2.jar PrintPDF -silentPrint C:\print_mypdf.pdf
Phantom.js是一个无头的webkit服务器,它会加载任何网页,并将其呈现在内存中,虽然您可能无法看到它,但有一个屏幕捕捉function,您可以在其中导出当前视图为PNG,PDF ,JPEG和GIF。 从phantom.js文档看看这个例子
如果你想将HTML导出为PDF。 你有很多select。 甚至没有节点
选项1:在你的html页面上有一个调用window.print()函数的button。 使用浏览器原生的HTML到PDF。 使用媒体查询,使您的HTML页面看起来不错的PDF。 而且您还可以在打印之前和之后打印可用于更改页面的事件。
选项2. htmltocanvas或rasterizeHTML 。 将你的html转换成canvas,然后调用canvas对象上的toDataURL()来获取图像。 并使用像jsPDF这样的JavaScript库将该图像添加到PDF文件。 这种方法的缺点是pdf不能编辑。 如果你想从PDF中提取数据,有不同的方法。
选项3. @Jozzhard答案
我find的最佳解决scheme是html-pdf。 这很简单,并与大html的工作。
https://www.npmjs.com/package/html-pdf
就这么简单:
pdf.create(htm, options).toFile('./pdfname.pdf', function(err, res) { if (err) { console.log(err); } });
从外部URL创buildPDF
这里是以前使用html-pdf
答案的一个改进,但是也将它与requestify
相结合,因此它可以与外部URL一起工作:
安装您的依赖关系
npm i -S html-pdf requestify
然后,创build脚本:
//MakePDF.js var pdf = require('html-pdf'); var requestify = require('requestify'); var externalURL= 'http://www.google.com'; requestify.get(externalURL).then(function (response) { // Get the raw HTML response body var html = response.body; var config = {format: 'A4'}; // or format: 'letter' - see https://github.com/marcbachmann/node-html-pdf#options // Create the PDF pdf.create(html, config).toFile('pathtooutput/generated.pdf', function (err, res) { if (err) return console.log(err); console.log(res); // { filename: '/pathtooutput/generated.pdf' } }); });
然后你只需从命令行运行:
node MakePDF.js
看你美丽的像素完美的PDF为你创造(免费!)
使用html-pdf
var fs = require('fs'); var pdf = require('html-pdf'); var html = fs.readFileSync('./test/businesscard.html', 'utf8'); var options = { format: 'Letter' }; pdf.create(html, options).toFile('./businesscard.pdf', function(err, res) { if (err) return console.log(err); console.log(res); // { filename: '/app/businesscard.pdf' } });
包
我用html-pdf
易于使用,不仅可以将pdf保存为文件,还可以将pdf内容传送到WriteStream(所以我可以直接将其stream式传输到Google Storage以保存我的报告)。
使用CSS +图像
它考虑到CSS。 我面临的唯一问题 – 它忽视了我的形象。 我find的解决scheme是用base64代替src
attrribute中的url,例如
<img src="data:image/png;base64,iVBOR...kSuQmCC">
您可以使用您的代码或使用在线转换器之一,例如https://www.base64-image.de/
从html片段+ css编译有效的html代码
- 我必须得到我的
html
文件的一个片段(我只是在jQueryselect器上添加.html()方法)。 - 然后我读了相关的
css
文件的内容。
使用这两个值(相应地存储在variableshtml
和css
)我已经编译了一个有效的HTML代码使用模板string
var htmlContent = ` <!DOCTYPE html> <html> <head> <style> ${css} </style> </head> <body id=direct-sellers-bill> ${html} </body> </html>`
并通过它来create
html-pdf的方法。