更新:
似乎wkhtmltopdf无法正常退出的问题
我在节点中执行以下操作:
console.log("before");
fs.writeFile(html_filename, html, function (err) {
if (err) {res.writeHead(400); res.end("" + err); return;}
console.log("wrote html fine; now converting");
exec('wkhtmltopdf ' + html_filename + ' ' + pdf_filename, function (err, stdout, stderr) {
if (err) {res.writeHead(400); res.end("" + err); return;}
console.log("converted; now reading");
fs.readFile(pdf_filename, function (err, data) {
if (err) {res.writeHead(400); res.end("" + err); return;}
console.log("read fine; now serving");
res.writeHead(200, {"content-type" : "application/pdf"});
res.end(data);
});
});
});
工作正常,除非每次执行此操作,节点程序挂起,当我cmd + tab时,我看到一个“exec”进程。当我选择此过程时,节点程序继续。
任何想法为什么?
答案 0 :(得分:3)
作为wkhtmltopdf的替代方案,我会使用Phantom.js:http://phantomjs.org/
您可以创建一个简单的栅格化脚本:
var page = require('webpage').create(),
address, output, size;
if (phantom.args.length < 2 || phantom.args.length > 3) {
console.log('Usage: rasterize.js URL filename');
phantom.exit();
} else {
address = phantom.args[0];
output = phantom.args[1];
page.viewportSize = { width: 600, height: 600 };
page.open(address, function (status) {
if (status !== 'success') {
console.log('Unable to load the address!');
} else {
window.setTimeout(function () {
page.render(output);
phantom.exit();
}, 200);
}
});
}
然后致电:
phantomjs rasterize.js http://path/to/webpage output.pdf
答案 1 :(得分:0)