【问题标题】:Node.js web service using Puppeteer to create PDF creates empty PDF fileNode.js Web 服务使用 Puppeteer 创建 PDF 创建空 PDF 文件
【发布时间】:2019-06-08 01:03:10
【问题描述】:

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

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

话虽如此,我已经记录了“h”的值,并且它确实显示了正确填写所有 Handlebar 占位符的 HTML 文档。

我感觉这与 Promise 有关系,但我不确定。希望另一双眼睛能帮助我看到问题。

注意:我知道 async/await,但是,我在 Node 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);
    });
});

【问题讨论】:

  • 更新:我注意到如果我使用带有 setContent( ) 的文字或包含标记的变量,它会起作用。但是,使用 promise 中的 'h' 参数 - 即使其中有标记 - 也会呈现空白。

标签: node.js pdf promise puppeteer


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-07-30
    • 2020-02-03
    • 2016-07-08
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    相关资源
    最近更新 更多