¡wkhtmltopdf ha quedado obsoleto porque se ha discontinuado! Se deshabilitará el 17 de diciembre de 2024.

Playwright

Estos scripts utilizan la biblioteca Playwright que convierte HTML y CSS en archivos PDF sin la necesidad de un navegador de fondo.

  1. Instalar Playwright:
pip install playwright
playwright install

create_pdf.py

import argparse
from playwright.sync_api import sync_playwright

def url_2_pdf(url, output_pdf='output.pdf'):
    try:
        with sync_playwright() as p:
            # Abre un navegador Chromium
            browser = p.chromium.launch()
            page = browser.new_page()

            # Navega a la URL proporcionada
            page.goto(url)

            # Genera el PDF del contenido de la página
            page.pdf(path=output_pdf, format='A4')

            print(f"PDF generado exitosamente: {output_pdf}")

            # Cierra el navegador
            browser.close()
    except Exception as e:
        print(f"Error al generar el PDF: {e}")

if __name__ == "__main__":
    # Configuración de los argumentos de línea de comandos
    parser = argparse.ArgumentParser(description="Convertir una página web a PDF usando Playwright")
    parser.add_argument('url', type=str, help='La URL de la página web a convertir en PDF')
    parser.add_argument('--output', type=str, default='output.pdf', help='Nombre del archivo de salida (opcional)')

    # Parsear los argumentos
    args = parser.parse_args()

    # Llamar a la función con los argumentos proporcionados
    create_pdf_from_url(args.url, args.output)

text_to_pdf.py

from playwright.sync_api import sync_playwright

def read_text_from_file(filename):
    try:
        with open(filename, 'r', encoding='utf-8') as file:
            return file.read().strip()  # Lee el contenido y elimina espacios en blanco extra
    except FileNotFoundError:
        print(f"Error: El archivo {filename} no se encontró.")
        return None
    except Exception as e:
        print(f"Error al leer el archivo {filename}: {e}")
        return None

def text_2_pdf(text, output_pdf='output.pdf'):
    if not text:
        print("No se pudo generar el PDF debido a que el texto está vacío.")
        return

    try:
        # HTML básico con un título centrado
        html_content = f"""
        <html>
        <head>
            <style>
                body {{
                    display: flex;
                    justify-content: center;
                    align-items: center;
                    height: 100vh;
                    margin: 0;
                }}
                h1 {{
                    font-size: 48px;
                    text-align: center;
                }}
            </style>
        </head>
        <body>
            <h1>{text}</h1>
        </body>
        </html>
        """

        with sync_playwright() as p:
            # Abre un navegador Chromium
            browser = p.chromium.launch()
            page = browser.new_page()

            # Carga el contenido HTML generado
            page.set_content(html_content)

            # Genera el PDF del contenido cargado
            page.pdf(path=output_pdf, format='A4')

            print(f"PDF generado exitosamente: {output_pdf}")

            # Cierra el navegador
            browser.close()
    except Exception as e:
        print(f"Error al generar el PDF: {e}")

# Leer el texto desde un archivo llamado "titulo.txt"
filename = 'titulo.txt'
title_text = read_text_from_file(filename)

# Generar el PDF con el texto leído
create_pdf_with_title(title_text)