我正在尝试生成网页的pdf
文件,并想要保存到本地磁盘以便稍后发送电子邮件。
我曾尝试this方法,但问题在于,它不适用于像this这样的网页。我能够生成pdf
,但它与网页内容不匹配。
非常清楚pdf
之前生成document ready
或者可能是其他内容。我无法弄清楚确切的问题。我只是在寻找一种可以将网页输出保存为pdf
的方法。
我希望在pdf
然后node
生成php
网页更合适?如果php
中的任何解决方案可用,那么它将是一个很大的帮助,甚至节点实现也很好。
答案 0 :(得分:2)
非常清楚pdf是在文档准备好之前生成的
非常正确,因此有必要等到脚本加载并执行完毕。
<小时/> 您链接到使用phantom节点模块的答案。
该模块从那时起进行了升级,现在支持async / await函数,使脚本更具可读性。
如果我建议使用async / await version (版本4.x,需要节点8 +)的解决方案。
const phantom = require('phantom');
const timeout = ms => new Promise(resolve => setTimeout(resolve, ms));
(async function() {
const instance = await phantom.create();
const page = await instance.createPage();
await page.property('viewportSize', { width: 1920, height: 1024 });
const status = await page.open('http://www.chartjs.org/samples/latest/charts/pie.html');
// If a page has no set background color, it will have gray bg in PhantomJS
// so we'll set white background ourselves
await page.evaluate(function(){
document.querySelector('body').style.background = '#fff';
});
// Let's benchmark
console.time('wait');
// Wait until the script creates the canvas with the charts
while (0 == await page.evaluate(function(){ return document.querySelectorAll("canvas").length }) ) {
await timeout(250);
}
// Make sure animation of the chart has played
await timeout(500);
console.timeEnd('wait');
await page.render('screen.pdf');
await instance.exit();
})();
在我的开发机上,等待图表准备就绪需要600毫秒。比await timeout(3000)
或任何其他任意秒数好多了。
答案 1 :(得分:0)
我使用html-pdf package
做了类似的事情。
代码很简单,你可以像这样使用:
pdf.create(html, options).toFile('./YourPDFName.pdf', function(err, res) {
if (err) {
console.log(err);
}
});
在包页here中查看有关它的更多信息。
希望对你有所帮助。