html - 使用 puppeteer 将 Html 转换为 pdf
问题描述
我是 nodejs、express 和 puppeteer 的新手。任务是创建将 html 转换为 pdf 的网络服务器。经过研究,我为此目的找到了 puppeteer 和 phantomsjs(但 phantomjs 不再受支持)。我创建了简单的网络服务器,它采用带有 html 和其他设置的 json。但是 phantomjs 比 puppeteer 快,可能我有一些错误?
Puppeteer 代码:
路线:
router.post("/raw", jsonParser, async function(request, response) {
html2PdfConverter(request.body.html, pdf => {
response.setHeader('Content-Type', 'application/pdf');
response.send(pdf);
},
request.body.options,
request.body.puppeteerArgs,
request.body.remoteContent).catch(err => {
console.log(err);
response.status(500).send('An error occurred');
});
});
Html2Pdf转换器
const puppeteer = require('puppeteer');
let convertHTMLToPDF = async (html, callback, options = null, puppeteerArgs=null, remoteContent=true) => {
if (typeof html !== 'string') {
throw new Error(
'Invalid Argument: HTML expected as type of string and received a value of a different type. Check your request body and request headers.'
);
}
let browser;
if (puppeteerArgs) {
browser = await puppeteer.launch(puppeteerArgs);
} else {
browser = await puppeteer.launch();
}
const page = await browser.newPage();
if (!options) {
options = { format: 'Letter' };
}
if (remoteContent === true) {
await page.goto(`data:text/html,${html}`, {
waitUntil: 'networkidle0'
});
} else {
await page.setContent(html);
}
await page.pdf(options).then(callback, function(error) {
console.log(error);
});
await browser.close();
};
module.exports = convertHTMLToPDF;
我认为 phantomjs 工作得更快,因为 pdf 方法返回流并且 html 和 pdf 文件在 Temp 文件夹中创建。
如果有任何帮助,我将不胜感激。
解决方案
这是目前不使用 phantomjs 的两个主要原因,
phantomjs
已弃用,需要时不支持- 它使用的是旧的渲染器,这就是它速度快的原因,因为它与您的内容没有太多关系。
如果您希望 puppeteer 更快,您当然可以禁用 puppeteer 提供的许多最新功能,但 pdf 可能看起来不像启用所有功能时那样干净。
推荐阅读
- excel - Excel 数据透视表中的相同/重复列名
- python-3.x - 如何将 .txt 文件中的字符串拆分为列表,从 AZ 排序且不重复?
- visual-studio - 如何使用 ifort 编译器运行 fortran 程序?
- java - Twitter4j 搜索
- ansible - Ansible Json字符串如何使用json_query从json获取价值
- asp.net - npm 安装 Azure Devops
- npm - npm 是否仍然没有保存任何东西来加速已安装模块的安装?
- jquery - 将 html 附加到 JQUERY AJAX 调用的末尾
- java - 你能强制泛型类型也泛型吗?
- javascript - 调整日期 ChartJS 的 X 轴标签