es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Puppeteer: cómo generar un archivo PDF que solo tenga una página y que esta contenga todo el contenido de la página web.

Estoy tratando de generar un PDF con Puppeteer. Lo que quisiera tener es que el archivo PDF generado tenga solo una página. Y esta única página contenga todo el contenido de la página web.

A continuación está mi código, que se ha copiado de https://github.com/puppeteer/puppeteer/issues/5590#issuecomment-747638812

Pero no funciona como se esperaba.

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();
})();
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para generar un archivo PDF de una sola página de una página web utilizando Puppeteer, puede utilizar el código proporcionado en la pregunta con algunas modificaciones.

    En primer lugar, reemplace el parámetro height en defaultViewport con un valor más pequeño para limitar la altura visible de la página web:

    const browser = await puppeteer.launch({
      headless: true,
      defaultViewport: {
        width: 1024,
        height: 1000, // altura más pequeña para adaptar todo el contenido en una página
      },
      args: [
        '--no-sandbox',
        '--disable-gpu',
        '--hide-scrollbars',
        '--start-fullscreen',
      ],
    });
    

    Luego, establezca el parámetro scale en page.pdf() en 1 para evitar que Puppeteer ajuste automáticamente el nivel de zoom de la página web:

    await page.pdf({
      path: 'w3schools.pdf',
      printBackground: true,
      width: '1024px',
      scale: 1, // establezca la escala en 1 para adaptar todo el contenido en una página
    });
    

    Con estos cambios, el archivo PDF generado debería tener solo una página y contener todo el contenido de la página web.

Comments are closed.