nodejs上的wkhtmltopdf生成损坏的pdf

时间:2013-12-21 13:46:08

标签: node.js pdf wkhtmltopdf

我使用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

提前致谢。

1 个答案:

答案 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'}