最近有一个将微信公众号的文章转为pdf的想法,主要是为了将很多文章保存下来,方便打印阅读。
最终使用的方法是phantomjs来生成网页的pdf。
PhantomJS 是一个基于WebKit的服务器端 JavaScript API。它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, Canvas, 和 SVG。PhantomJS可以用于页面自动化,网络监测,网页截屏,以及无界面测试等。
使用方法:
进入phantomjs可执行文件目录,执行
>phantomjs.exe render_pdf.js https://mp.weixin.qq.com/s/CFVZAyEFat2n6U2UAOhbyA test.pdf
转换长图片类似
>phantomjs.exe render_pdf.js https://mp.weixin.qq.com/s/CFVZAyEFat2n6U2UAOhbyA test.png
需要先安装好phantomjs,在phantomjs可执行文件目录编写render_pdf.js。
全部代码如下:
render_pdf.js
var page = require('webpage').create(),
system = require('system'),
address, output, size;
if (system.args.length < 3 || system.args.length > 5) {
console.log('Usage: rasterize.js URL filename');
phantom.exit(1);
} else {
address = system.args[1];
output = system.args[2];
console.log(page.settings.userAgent );
page.paperSize = { format: 'A4', orientation: 'portrait', margin: '0.8cm' };
console.log("open page now");
page.open(address, function (status) {
console.log(status);
var size = page.evaluate(function () {
console.log('start image lazy loading');
var imgs = document.getElementsByTagName('img');
var size = 0;
console.log(size);
for (var i = imgs.length - 1; i >= 0; i--) {
var data_src = imgs[i].getAttribute("data-src");
if (data_src){
imgs[i].setAttribute("src", data_src);
size++;
}
}
return size;
} );
console.log("change lazy load img number:" + size);
window.setTimeout(function () {
page.render(output);
page.close();
console.log('render ok');
phantom.exit();
}, 5000);
});
};
最终生成的pdf渲染效果良好,无排版错乱。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)