我正在使用 Puppeteer 从 HTML 字符串生成 PDF 文件。
阅读文档,我发现了两种生成PDF文件的方法:
首先,传递一个 url 并调用goto
方法如下:
page.goto('https://example.com');
page.pdf({format: 'A4'});
第二个,这是我的情况,调用该方法setContent
如下:
page.setContent('<p>Hello, world!</p>');
page.pdf({format: 'A4'});
问题是我有从客户端发送的 3 个不同的 HTML 字符串,并且我想生成一个包含 3 个页面的 PDF 文件(如果我有 3 个 HTML 字符串)。
我想知道 Puppeteer 是否有办法做到这一点?我接受其他建议,但我需要使用 chrome-headless。
我能够通过执行以下操作来做到这一点:
使用 puppeteer 生成 3 个不同的 PDF。您可以选择将文件保存在本地或将其存储在变量中。
我在本地保存了文件,因为我发现的所有 PDF 合并插件只接受 URL,而不接受缓冲区。在本地同步生成 PDF 后,我使用以下命令合并它们PDF轻松合并 https://www.npmjs.com/package/easy-pdf-merge.
代码是这样的:
const page1 = '<h1>HTML from page1</h1>';
const page2 = '<h1>HTML from page2</h1>';
const page3 = '<h1>HTML from page3</h1>';
const browser = await puppeteer.launch();
const tab = await browser.newPage();
await tab.setContent(page1);
await tab.pdf({ path: './page1.pdf' });
await tab.setContent(page2);
await tab.pdf({ path: './page2.pdf' });
await tab.setContent(page3);
await tab.pdf({ path: './page3.pdf' });
await browser.close();
pdfMerge([
'./page1.pdf',
'./page2.pdf',
'./page3.pdf',
],
path.join(__dirname, `./mergedFile.pdf`), async (err) => {
if (err) return console.log(err);
console.log('Successfully merged!');
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)