【发布时间】:2019-10-13 03:06:44
【问题描述】:
我正在努力让 Puppeteer 在浏览器中下载文件。我目前将文件保存在 Cloud9 本地,但我想单击下载 PDF 按钮并在 Chrome 中下载。
我尝试将 page.pdf 保存到变量中,但没有奏效。我也试过打开本地保存的文件,但我也无法让它工作。
var express = require("express");
var puppeteer = require("puppeteer");
module.exports = function pdf(url, req) {(async () => {
var browser = await puppeteer.launch();
var page = await browser.newPage();
await page.goto('https://node-and-mysql-mbegg.c9users.io/clients/'+req.params.id+'/reports/monthlyreport/'+req.params.marketplace+'/'+req.params.month, {waitUntil: 'networkidle2'});
await page.pdf({path: 'public/temp/Performance Report -'+req.params.month+'.pdf', format: 'A4', landscape: true, printBackground: true});
await browser.close();
})();
}
///Print PDF route
router.get("/clients/:id/reports/monthlyreport/:marketplace/:month/pdf", function(req, res) {
var url = "/clients/"+req.params.id+"/reports/monthlyreport/"+req.params.marketplace+"/"+req.params.month
pdf(url, req);
res.contentType("application/pdf");
res.send(pdf);;
});
我知道 res.send(pdf) 需要将 page.pdf() 保存到变量并返回。我只是没有从路线中删除它。
当我将 page.pdf() 保存到变量时会发生什么,我只是得到一个空白文件 - 而不是 PDF - 它似乎只是一个空白缓冲区或其他东西。我不知道我做错了什么没有在 chrome 浏览器中下载文件。
【问题讨论】:
-
但是等等,所以你在客户端上运行 puppeteer 来生成 pdf 文件?这意味着您的客户也将下载铬引擎,因为这就是 puppeteer 在幕后使用的。顺便说一句,您的部署规模有多大?