¡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.
- 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)