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 puedo habilitar saltos de página PDF desde HTML, tal vez utilizando un marcador en el archivo HTML de origen?

Estoy utilizando pdfkit para crear un PDF a partir de un archivo HTML… como se muestra a continuación:

import pdfkit
pdfkit.from_file([fuente], destino + '.pdf')

Yo mismo creo el archivo HTML antes de hacer esta conversión.
Lo que estoy intentando hacer ahora es encontrar una forma de implementar un salto de página.
El archivo HTML no utiliza saltos de página porque… bueno, es HTML básico.
Pero los PDF son estructuras con páginas.

Entonces, ¿cómo puedo identificar algo en el HTML como un marcador, y luego usar eso para implementar un salto de página en el PDF?

Por supuesto, pdfkit.from_file([fuente], destino + '.pdf') es una simple línea única… no hay análisis del contenido… así que no veo cómo podría indicarle qué buscar.

¿Alguna ideas?

EDITAR
Con el consejo de @Nathanial a continuación, he agregado lo siguiente a mi CSS:

@media print {
  h2 { 
    page-break-before: always;
  }
}

Pero no veo cómo pdfkit.from_file([fuente], destino + '.pdf') lo está implementando.

Abrir el archivo HTML en el navegador e imprimirlo en PDF funciona perfectamente, así que este es más un problema con pdfkit.

Encontré una pregunta similar aquí:
https://stackoverflow.com/questions/42005819/how-to-insert-a-page-break-in-html-so-wkhtmltopdf-parses-it

Creo que el envoltorio de pdfkit para wkhtmltopdf está limitado.
En la línea de comandos, esto funciona perfectamente.

wkhtmltopdf --print-media-type 10100005.html 10100005.pdf

Pero, ¿cómo puedo replicarlo en Python? No es mi primera opción usar os.execute…:/

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una posible solución es agregar una regla CSS a tu archivo HTML que especifique un salto de página. Por ejemplo, podrías agregar la siguiente regla a tu CSS:

    @media print {
      .page-break { 
        page-break-before: always;
      }
    }
    

    Luego, en tu archivo HTML, puedes agregar un marcador que indique dónde deseas que ocurra el salto de página:

    <div class="page-break"></div>
    

    Cuando conviertas el HTML a PDF utilizando pdfkit.from_file, la regla @media print debería aplicarse, lo que provocará un salto de página antes de cualquier elemento con la clase page-break.

    Si este enfoque no funciona, podrías intentar utilizar una herramienta diferente para convertir el HTML a PDF. Por ejemplo, podrías utilizar el módulo subprocess en Python para llamar directamente a wkhtmltopdf con los argumentos de línea de comandos apropiados.

Comments are closed.