Puppeteer pdf

栏目: NodeJs 发布时间:2024-12-24

本教程将详细指导你如何使用 puppeteer 生成 PDF 文件。

使用 Puppeteer 生成 PDF

使用 Puppeteer 生成 PDF 文件通常涉及以下几个关键步骤:

  1. 启动浏览器实例
  2. 打开新页面
  3. 导航到目标网页
  4. 生成 PDF
  5. 关闭浏览器

下面是一个完整的示例代码,展示了如何使用 Puppeteer 生成 PDF 文件:

(async () => {
  // 启动浏览器实例
  const browser = await puppeteer.launch({
    headless: true, // 无头模式,不打开浏览器窗口
    args: ['--no-sandbox', '--disable-setuid-sandbox'] // 解决 Linux 上的沙箱问题
  });

  // 打开新页面
  const page = await browser.newPage();

  // 导航到目标网页(可以替换为你的 URL)
  await page.goto('https://tides.cn', { waitUntil: 'networkidle2' });

  // 生成 PDF,并指定输出路径和格式选项
  const pdfOptions = {
    path: 'example.pdf', // PDF 文件保存路径
    format: 'A4', // 纸张大小
    printBackground: true, // 是否打印背景
    preferCSSPageSize: true, // 是否优先使用 CSS 设置的页面大小
    margin: {
      top: '1cm',
      right: '1cm',
      bottom: '1cm',
      left: '1cm'
    }, // 边距设置
    headerTemplate: `<div style="width:100%; text-align:right; margin-right: 20px; font-size:10px">页眉</div>`, // 页眉模板
    footerTemplate: `<div style="width:100%; text-align:right; margin-right: 20px; font-size:10px">页脚</div>`, // 页脚模板
    // 你可以根据需要添加更多的选项,如 landscape: true(横向打印)等
  };

  await page.pdf(pdfOptions);

  // 关闭浏览器
  await browser.close();

  console.log('PDF 已成功生成并保存到 example.pdf');
})();

注意事项

  • 无头模式:在上面的示例中,我们使用了 headless: true 选项来启动无头浏览器实例,这意味着不会打开实际的浏览器窗口。这通常用于服务器环境或自动化脚本中,以减少资源消耗。
  • 等待页面加载:在调用 page.pdf() 方法之前,我们使用 await page.goto('https://tides.cn', { waitUntil: 'networkidle2' }); 来确保页面已经完全加载。waitUntil: 'networkidle2' 表示等待网络请求稳定(即没有新的网络请求超过 500ms)。
  • PDF 选项page.pdf() 方法接受一个选项对象,用于配置 PDF 的各种属性,如纸张大小、边距、是否打印背景、页眉和页脚模板等。你可以根据需要调整这些选项。
  • 错误处理:在实际应用中,你应该添加错误处理逻辑来捕获和处理可能发生的异常,例如网络问题、页面加载失败等。

运行代码

将上述代码保存为一个 JavaScript 文件(例如 generate-pdf.js),然后在终端中运行以下命令来执行脚本:

node generate-pdf.js

如果一切正常,你将在脚本所在的目录下找到一个名为 example.pdf 的文件,该文件包含从 https://tides.cn 导出的网页内容。

通过本教程,你应该已经掌握了如何使用 Puppeteer 生成 PDF 文件的基本方法。你可以根据需要进一步自定义 PDF 的输出选项,并将该方法集成到你的 node.js 应用程序中。

本文地址:https://www.tides.cn/p_node-puppeteer-pdf