我使用wkhtmltopdf在nodejs中生成pdfs
以下是我生成pdf的示例代码
var wkhtmltopdf = require('wkhtmltopdf')
, createWriteStream = require('fs').createWriteStream;
var r = wkhtmltopdf('http://www.google.com', { pageSize: 'letter' })
.pipe(createWriteStream('C:/MYUSERNAME/demo.pdf'));
r.on('close', function(){
mycallback();
});
上面的代码生成了损坏的pdf。我无法弄清楚这个问题。 虽然当我使用命令提示符生成pdfs时,它正确生成 就像我在Windows命令提示符下使用下面的代码一样
wkhtmltopdf http://www.google.com demo.pdf
我得到正确的pdf生成,遗憾的是当我尝试在节点环境中生成pdf时,它会生成损坏的pdf。
这有助于我使用 wkhtmltopdf 0.11.0 rc2
提前致谢。
答案 0 :(得分:3)
wkhtmltopdf for node有一个Windows错误,所以你可以写一个新的。
像这样:
function wkhtmltopdf(input, pageSize) {
var spawn = require('child_process').spawn;
var html;
var isUrl = /^(https?|file):\/\//.test(input);
if (!isUrl) {
html = input;
input = '-';
}
var args = ['wkhtmltopdf', '--quiet', '--page-size', pageSize, input, '-']
if (process.platform === 'win32') {
var child = spawn(args[0], args.slice(1));
} else {
var child = spawn('/bin/sh', ['-c', args.join(' ') + ' | cat']);
}
if (!isUrl) {
child.stdin.end(html);
}
return child.stdout;
}
// usage:
createWriteStream = require('fs').createWriteStream;
wkhtmltopdf('http://google.com/', 'letter')
.pipe(createWriteStream('demo1.pdf'));
wkhtmltopdf('<body>hello world!</body>', 'letter')
.pipe(createWriteStream('demo2.pdf'));
注意:该参数现在是'letter'而不是{pageSize:'letter'}