pdf - Puppeteer:如何生成只有一页且该页包含网页所有内容的PDF

标签 pdf pdf-generation puppeteer

我正在尝试使用 Puppeteer 生成 pdf。我想要的是生成的pdf文件应该只有一页。而这个单页就包含了网页的所有内容。

以下是我的代码,复制自https://github.com/puppeteer/puppeteer/issues/5590#issuecomment-747638812

但它没有按预期工作。

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    headless: true,
    defaultViewport: {
      width: 1024,
      height: 800,
    },
    args: [
      '--no-sandbox',
      '--disable-gpu',
      '--hide-scrollbars',
      '--start-fullscreen',
    ]
  });
  const page = await browser.newPage();
  await page.goto('https://www.w3schools.com/', {
    waitUntil: 'networkidle0',
  });
  await page.emulateMediaType('screen');

  const totalPage = await page.$('html');
  const boundingBox = await totalPage.boundingBox();
  console.log(boundingBox);

  await page.pdf({
    path: 'w3schools.pdf', 
    printBackground: true,
    width: '1024px',
    height: `${boundingBox.height + 20}px`,
  });

  await browser.close();
})();

最佳答案

根据我的经验,更干净的方法是使用 page.eval()获取文档的高度并将其作为选项传递给 page.pdf()

const puppeteer = require('puppeteer');

const docHeight = () => {
  const body = document.body
  const html = document.documentElement;
  return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);
}

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto("https://en.wikipedia.org/wiki/JavaScript");
    const height = await page.evaluate(docHeight);

    await page.pdf({path: `js.pdf`, height: `${height}px`})
    
})();

关于pdf - Puppeteer:如何生成只有一页且该页包含网页所有内容的PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70345012/

相关文章:

javascript - 如何使用 puppeteer 截取多个网站的完整屏幕截图?

php - Symfony2服务打开pdf文件

javascript - 使用 JavaScript AJAX 调用 PHP 后端打开 PDF

ruby-on-rails - 使用 Prawn 生成的 PDF 中右侧缩进的文本

java - 如何为 PDFPTable 中的 PDF 单元定义不同的字体样式

调试PDF错误

node.js - 为什么 Puppeteer 需要 --no-sandbox 在 Cloud Functions 中启动 Chrome

puppeteer - pyppeteer 等待页面的所有元素加载完毕

php - 用 TCPDF 定位 h1,h2,h3 和其他标签

java - 下载时显示空白 PDF