使用Puppeteer创建PDF的Node.js Web服务将创建空的PDF文件

时间:2019-06-06 20:51:11

标签: node.js pdf promise puppeteer

以下代码来自Node.js REST服务。 “生成”是类(未显示)上的方法。在类定义下方显示了对“ generate”的调用。

当我调用此端点时,将创建一个PDF(“ test.pdf”),结果返回到浏览器;但是,它是空的。好像没有执行对Handlebars的调用,或者代码领先于该调用并以空字符串(“ h”)执行。

话虽如此,我已经记录了“ h”的值,并且可以肯定地显示了HTML文档,其中所有Handlebar占位符均正确填写。

我觉得这与承诺有关,但是我不确定。希望另一双眼睛可以帮助我解决问题。

注意:我知道异步/等待,但是,我在节点6.9.5上,因此它不可用。

谢谢!

class PDF {
    ...
    generate() {
        return new Promise((resolve,reject)=>{
            this.render().then((h)=>{
                const browser = Puppeteer.launch({headless: true}).then((b)=>{
                    const page = b.newPage().then((p)=>{
                        p.setContent(h, {waitUntil: 'load'}).then(()=>{
                            p.pdf({path: 'test.pdf', format: 'A4'}).then((z)=>{
                                resolve(z);
                            });
                        });
                    });
                });
            });
        });
    }
}


// *****************************************************************************
// REST API Routes
// *****************************************************************************
app.get('/mysite/pdf', (req,res)=>{
    var pdf = new PDF(33);
    pdf.generate().then((data)=>{
        res.contentType('application/pdf');
        res.send(data);
    });
});

1 个答案:

答案 0 :(得分:0)

问题不是Node,而是我正在加载的HTML模板。它的HTML格式错误,导致该页面无法在浏览器中显示,更不用说生成空白PDF了。