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.

Cómo crear un archivo PDF de una sola página a partir de un archivo HTML.

Cómo crear un archivo PDF de una sola página a partir de un archivo HTML

Actualmente estoy utilizando la biblioteca convert-html-to-pdf (versión: 1.0.1) para convertir archivos HTML en PDF. Sin embargo, la conversión está separando mi HTML en varias páginas y termina rompiendo el código (divs estirados).

Dado que mi archivo HTML es receptivo a ciertas necesidades, el tamaño de los bloques de div cambia en cada archivo y por eso no puedo determinar cuándo “romper” cada página a menos que de alguna manera mida el tamaño de la página y el tamaño de los bloques.
Hay dos posibles correcciones:
– crear un PDF de una sola página (este es el preferido)
– medir el tamaño de la página y compararlo con los elementos para asegurarse de que no estén separados en cada página

Se supone que el primero es más fácil, pero no encuentro nada en la documentación que me ayude a hacerlo.

Estoy inclinado a aceptar sugerencias de bibliotecas para crear un PDF de una sola página.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para crear un archivo pdf de una sola página a partir de un archivo html, puede intentar utilizar la biblioteca puppeteer que ofrece una API de alto nivel para controlar Chrome o Chromium sin cabeza. Aquí están los pasos para crear un archivo pdf de una sola página:

    1. Instale la biblioteca puppeteer utilizando npm:
    npm install puppeteer
    
    1. Utilice puppeteer para lanzar una instancia de Chrome sin cabeza y navegar al archivo html:
    const puppeteer = require('puppeteer');
    
    (async () => {
      const browser = await puppeteer.launch();
      const page = await browser.newPage();
      await page.goto('file:///ruta/a/su/archivo/html.html');
    
    1. Establezca el tamaño de la ventana y la escala para ajustar el contenido en una sola página:
      const pageWidth = await page.evaluate(() => document.body.offsetWidth);
      const pageHeight = await page.evaluate(() => document.body.offsetHeight);
      await page.setViewport({ width: pageWidth, height: pageHeight });
      await page.evaluate(() => {
        const scale = Math.min(
          document.body.offsetWidth / document.body.scrollWidth,
          document.body.offsetHeight / document.body.scrollHeight,
        );
        document.body.style.transformOrigin = 'top left';
        document.body.style.transform = `scale(${scale})`;
      });
    

    Esto establecerá el tamaño de la ventana para ajustar el contenido y lo reducirá para que quepa en una sola página.

    1. Genere el pdf utilizando el método page.pdf() y guárdelo en un archivo:
      const pdfOptions = { format: 'A4', printBackground: true };
      await page.pdf(pdfOptions).then(data => {
         fs.writeFile("output.pdf", data, function(err) {
             if(err) {
                 return console.log(err);
             }
             console.log("¡El archivo se guardó como output.pdf!");
         }); 
      });
    
      await browser.close();
    })();
    

    Esto generará un archivo pdf con el contenido del archivo html en una sola página. Puede personalizar las opciones de pdf como el tamaño de la página y los márgenes utilizando el objeto pdfOptions.

Comments are closed.