Node.js 使用 Puppeteer 创建 PDF 的网络服务创建空 PDF 文件
Node.js web service using Puppeteer to create PDF creates empty PDF file
以下代码来自 Node.js REST 服务。 "generate" 是 class 上的一种方法(未显示)。对 "generate" 的调用显示在 class 定义下方。
当我调用此端点时,将创建一个 PDF ("test.pdf"),并将结果返回到浏览器;然而,它是空的。就好像对 Handlebars 的调用没有执行,或者代码先于该调用并使用空字符串执行它 ("h")。
也就是说,我已经记录了 "h" 的值,它确实显示了 HTML 文档,所有 Handlebar 占位符都已正确填写。
我感觉这与 Promises 有关,但我不确定。希望另一双眼睛可以帮助我看到问题。
注意:我知道 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);
});
});
问题不在于 Node,而是我正在加载的 HTML 模板。它的格式不正确 HTML,导致页面无法在浏览器中显示,更不用说生成空白 PDF 了。
以下代码来自 Node.js REST 服务。 "generate" 是 class 上的一种方法(未显示)。对 "generate" 的调用显示在 class 定义下方。
当我调用此端点时,将创建一个 PDF ("test.pdf"),并将结果返回到浏览器;然而,它是空的。就好像对 Handlebars 的调用没有执行,或者代码先于该调用并使用空字符串执行它 ("h")。
也就是说,我已经记录了 "h" 的值,它确实显示了 HTML 文档,所有 Handlebar 占位符都已正确填写。
我感觉这与 Promises 有关,但我不确定。希望另一双眼睛可以帮助我看到问题。
注意:我知道 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);
});
});
问题不在于 Node,而是我正在加载的 HTML 模板。它的格式不正确 HTML,导致页面无法在浏览器中显示,更不用说生成空白 PDF 了。