Puppeteer 从多个 HTML 字符串生成 PDF

2024-01-08

我正在使用 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。


我能够通过执行以下操作来做到这一点:

  1. 使用 puppeteer 生成 3 个不同的 PDF。您可以选择将文件保存在本地或将其存储在变量中。

  2. 我在本地保存了文件,因为我发现的所有 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(使用前将#替换为@)

Puppeteer 从多个 HTML 字符串生成 PDF 的相关文章

随机推荐