Nodejs中使⽤phantom将html转为pdf或图⽚格式的⽅法
最近在项⽬中遇到需要把html页⾯转换为pdf的需求,并且转换成的pdf⽂件要保留原有html的样式和图⽚。也就是说,html页⾯的图⽚、表格、样式等都需要完整的保存下来。
最初到三种⽅法来实现这个需求,这三种⽅法都只是粗浅的看了使⽤⽅法,从⽽出适合这个需求的⽅案:
html-pdf 模块
wkhtmltopdf ⼯具
phantom 模块
最终使⽤了phantom模块,也达到了预期效果。现在简单的记录三种⽅式的使⽤⽅法,以及三者之间主要的不同之处。
1.html-pdf
安装:
npm install -g html-pdf
使⽤命令⾏:
html-pdf /test/index.html index.pdf
这样便可以把index.html页⾯转换为对应的index.pdf⽂件。
使⽤代码:
var express = require('express');
var router = express.Router();
var pdf = require('html-pdf');
<('/url',function(req,res){
html2Pdf(html,'html.pdf');
/
/........
});
});
/**
* 这种⽅法没有渲染样式和图⽚
* @param url
* @param pdfName
pdf转html*/
exports.html2Pdf = function(html,pdfName){
var options = {format:true};
if (err) return console.log(err);
console.log(res);
});
};
在测试过程中发现,⽣成的pdf⽂件中并没有⽀持样式渲染和图⽚加载,不能⽀持通过url直接加载html;但是在分页的⽀持上很好。
结果如下:
2、wkhtmltopdf
安装完毕之后,使⽤命令⾏:
即可⽣成对应的PDF⽂件。
代码使⽤:
var wkhtmltopdf = require('wkhtmltopdf');
var fs = require('fs');
// URL 使⽤URL⽣成对应的PDF
wkhtmltopdf('github', { pageSize: 'letter' })
.ateWriteStream('out.pdf'));
除了可以通过URL⽣成之外,还能通过HTML⽂件内容⽣成,就像HTML-PDF⼀样,只要有HTML格式的字符串就可以⽣成相应的PDF。结果如下:
3、phantom 模块
模块安装:
node版本6.X以上的:
npm install phantom –save
node版本5.X的:
npm install phantom@3 –save
node版本4.X及以下的:
npm install phantom@2 –save
以下的例⼦都是基于node 4.x
代码使⽤:
var phantom = require('phantom');
page.open("acle/index.html").then(function(status) {
page.property('viewportSize',{width: 10000, height: 500});
console.log('Page rendered');
});
});
});
});
代码中,phantom能够通过URL转换为相应的PDF,⽽且能够通过 page.property('viewportSize',{width:width,height:height}) 来设置⽣成的PDF的宽度和⾼度。
此例phantom中并没有分页,它是以整个浏览器截图的形式,获取全⽂,转化为PDF格式。
选择phantom的主要原因就是便于设置PDF的宽度,更能兼容HTML的排版。
结果如下: