Converting HTML to PDF in Python
IronPDF ofrece a los desarrolladores de Python un camino directo desde el marcado HTML hasta archivos PDF listos para producción — sin herramientas de diseño intermedias, sin motores de diseño propietarios, sin canal de renderizado separado. La clase ChromePdfRenderer de la biblioteca utiliza un motor basado en Chromium internamente, por lo que cualquier HTML que se visualice correctamente en Chrome se convertirá con precisión a PDF. Este tutorial recorre cada método de conversión compatible — cadenas HTML, archivos HTML locales y URLs en vivo — y luego cubre las opciones de renderización que le permiten controlar el tamaño de página, márgenes, encabezados, pies de página, y más.
Un tutorial complementario está disponible para convertir HTML a PDF en aplicaciones .NET si necesita el flujo de trabajo de C# o VB.NET.
Inicio rápido: Convertir HTML a PDF en Python
Cómo Convertir HTML A PDF en Python

- Instalar IronPDF for Python vía pip
- Importe la biblioteca con
from ironpdf import * - Instanciar
ChromePdfRenderer - Llame a
RenderHtmlAsPdf,RenderUrlAsPdf, oRenderHtmlFileAsPdf - Guarde el resultado con
pdf.SaveAs("output.pdf")
Tabla de contenido
- ¿Cómo se instala IronPDF for Python?
- ¿Cómo se configura IronPDF antes de convertir?
- ¿Cómo se convierte una cadena HTML a PDF?
- ¿Cómo se convierte un URL a PDF?
- ¿Cómo se convierte un archivo HTML a PDF?
- ¿Cómo se controlan las opciones de renderización PDF?
- ¿Cómo se añaden encabezados y pies de página personalizados?
- ¿Cuáles son los siguientes pasos?
Empezando
¿Cómo se instala IronPDF for Python?
IronPDF se distribuye a través de pip, el gestor de paquetes estándar de Python. Ejecute el siguiente comando en un terminal para instalar la última versión:
pip install ironpdf
Para fijar una versión específica — útil en pipelines CI o entornos containerizados — agregue el número de versión:
pip install ironpdf==2024.x.x
La primera vez que IronPDF se inicializa, descarga un binario de Chromium compatible. Esta descarga tarda un momento en una máquina nueva pero solo ocurre una vez por entorno. Las ejecuciones posteriores inician mucho más rápido porque el binario está almacenado en caché localmente.
Guía práctica y ejemplos de código
¿Cómo se configura IronPDF antes de convertir?
Dos tareas de configuración son recomendables antes de la primera llamada de conversión: establecer una clave de licencia y, opcionalmente, configurar la ubicación de un archivo de registro.
Importación del Paquete
Cada archivo Python que use IronPDF necesita esta única línea de importación. Colóquela en la parte superior del archivo:
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/import.pyfrom ironpdf import *
Todas las clases de IronPDF — ChromePdfRenderer, PdfDocument, License, Logger, y el resto — están disponibles a través de esta importación global.
Estableciendo una Clave de Licencia
Sin una clave de licencia, IronPDF añade una marca de agua mosaico a cada PDF generado. La marca de agua es adecuada para desarrollo y pruebas, pero despliegues en producción requieren una clave válida.
Los PDFs generados sin una clave de licencia incluyen una marca de agua mosaico. Visite la página de licencias para obtener una clave.
Establezca la clave antes de cualquier otra llamada a IronPDF:
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/set-license.pyfrom ironpdf import *
# Set the license key before any PDF operations
License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"
Comience una prueba gratuita para recibir una clave temporal, o compre una licencia para uso de producción sin restricciones.
Configuración de Salida de Registro
IronPDF escribe la salida de diagnóstico en un archivo llamado Default.log en el directorio de trabajo del script. Para redirigir el registro a una ruta diferente o capturar más detalles para depuración, configure las propiedades de Logger antes de la primera conversión:
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/configure-logging.pyfrom ironpdf import *
# Configure logging before running any conversions
Logger.EnableDebugging = True
Logger.LogFilePath = "ironpdf-debug.log"
Logger.LoggingMode = Logger.LoggingModes.All
Logger.LogFilePath debe establecerse antes de la primera llamada de conversión a PDF. Los cambios realizados después no tienen efecto en la sesión actual.Los registros detallados son más útiles al diagnosticar por qué una página HTML particular no se renderiza como se esperaba — capturan solicitudes de red, eventos de carga de CSS, y temporización de ejecución de JavaScript.
¿Cómo convertir una cadena HTML a PDF?
Convertir una cadena HTML en memoria es el enfoque más directo y funciona bien cuando el HTML es generado programáticamente — por ejemplo, a partir de una plantilla Jinja2 o un informe impulsado por base de datos.
Conversión de cadenas HTML básicas
Instancie ChromePdfRenderer, pase la cadena HTML a RenderHtmlAsPdf, y llame a SaveAs en el PdfDocument devuelto:
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-string-basic.pyfrom ironpdf import *
renderer = ChromePdfRenderer()
# Convert an HTML string to a PDF document
pdf = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF!</h1><p>Generated in Python.</p>")
pdf.SaveAs("hello.pdf")
El ChromePdfRenderer procesa HTML, CSS, y JavaScript de la misma manera que lo hace un navegador moderno. Cualquier contenido que se renderice correctamente en Chrome producirá un PDF preciso.
Cadena HTML con Recursos Externos
Cuando la cadena HTML referencia activos locales — hojas de estilo, imágenes, scripts — pase la ruta del directorio como segundo argumento a RenderHtmlAsPdf. IronPDF utiliza esta ruta como URL base al resolver referencias relativas:
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-string-assets.pyfrom ironpdf import *
html_content = """
<html>
<head>
<title>Styled Report</title>
<link rel='stylesheet' href='assets/style.css'>
</head>
<body>
<h1>Monthly Report</h1>
<img src='assets/logo.png' alt='Company logo'>
<p>Data as of Q1 2024.</p>
</body>
</html>
"""
renderer = ChromePdfRenderer()
# The second argument sets the base path for resolving relative asset URLs
pdf = renderer.RenderHtmlAsPdf(html_content, "./")
pdf.SaveAs("styled-report.pdf")
La ruta base puede apuntar a cualquier directorio local o un recurso compartido de red. Los recursos en subdirectorios se resuelven en relación a ella. Para ver más patrones que involucran cadenas HTML complejas, consulte el ejemplo de código de cadena HTML a PDF.
El Iron Suite juega un papel crucial en nuestras operaciones. Estas son herramientas que aumentan la eficiencia en toda la empresa, incluyendo la creación de planos y la mejora en la gestión de inventario.
¿Cómo convertir una URL a PDF?
El método RenderUrlAsPdf obtiene una URL en vivo, espera a que la página se cargue completamente — incluyendo cualquier contenido impulsado por JavaScript — y convierte el resultado renderizado a PDF. Esto lo hace adecuado para capturar tableros de control, informes, o cualquier página donde el estado visual final dependa de la ejecución de JavaScript.
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/url-to-pdf.pyfrom ironpdf import *
renderer = ChromePdfRenderer()
# Fetch and convert a live web page to PDF
pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Portable_Document_Format")
pdf.SaveAs("wikipedia-pdf.pdf")
ChromePdfRenderer antes de llamar a RenderUrlAsPdf. Consulte la guía de credenciales de inicio de sesión HTTP para más detalles.Cuando la página de destino carga contenido asíncrono, IronPDF espera que el motor de renderización Chromium señale que el documento está completamente pintado. Para páginas con JavaScript intensivo o solicitudes de red retrasadas, considere ajustar las propiedades de WaitFor en ChromePdfRenderOptions (cubierto en la sección de opciones de renderizado abajo). El ejemplo de código URL a PDF muestra patrones de configuración adicionales.
¿Cómo se convierte un archivo HTML a PDF?
RenderHtmlFileAsPdf acepta una ruta a un archivo HTML local y lo convierte directamente. Rutas relativas dentro del HTML — a archivos CSS, imágenes o JavaScript — se resuelven automáticamente contra el directorio propio del archivo HTML, por lo que no se necesita argumento de ruta base.
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-file-to-pdf.pyfrom ironpdf import *
renderer = ChromePdfRenderer()
# Convert a local HTML file (and its linked CSS/JS) to PDF
pdf = renderer.RenderHtmlFileAsPdf("invoices/TestInvoice1.html")
pdf.SaveAs("invoice.pdf")
Este método es particularmente útil para la generación de documentos del lado del servidor donde una plantilla HTML ya ha sido escrita en disco — un patrón común al usar Django o Flask para renderizar plantillas Jinja2 a archivos antes de convertirlos a PDF para descarga.
IronPDF resuelve cualquier etiqueta de <link>, <script>, y <img> en relación con la ubicación del archivo HTML, por lo que las hojas de estilo vinculadas, las fuentes incrustadas y las imágenes aparecen en el PDF exactamente como lo hacen en un navegador. El proceso refleja cómo RenderHtmlAsPdf maneja activos en línea, con la diferencia de que no es necesario suministrar una ruta base explícita.
¿Cómo se controlan las opciones de renderización PDF?
ChromePdfRenderOptions es el objeto de configuración pasado a ChromePdfRenderer (o directamente a cualquiera de los métodos de renderizado) para controlar el diseño de página, márgenes, tamaño de papel, y otras características de salida. Configurar opciones antes de la conversión es la manera estándar de adaptar la salida de PDF.
Tamaño de Papel y Orientación
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/render-options-paper.pyfrom ironpdf import *
renderer = ChromePdfRenderer()
# Configure page layout before rendering
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
renderer.RenderingOptions.MarginTop = 20
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.MarginLeft = 15
renderer.RenderingOptions.MarginRight = 15
pdf = renderer.RenderHtmlAsPdf("<h1>Landscape Report</h1><p>Content here.</p>")
pdf.SaveAs("landscape-a4.pdf")
Los márgenes se expresan en milímetros. PdfPaperSize soporta todos los tamaños ISO estándar — A0 a A10, Letter, Legal, Tabloid — así como Custom para dimensiones arbitrarias definidas por CustomPaperWidth y CustomPaperHeight.
Dimensiones de Papel Personalizadas
Cuando los tamaños estándar de papel no coinciden con el requisito de salida — por ejemplo, un formato de impresora de recibo o etiqueta — defina el ancho y la altura explícitamente:
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/render-options-custom-size.pyfrom ironpdf import *
renderer = ChromePdfRenderer()
# Set a custom paper size (in millimetres)
renderer.RenderingOptions.PaperSize = PdfPaperSize.Custom
renderer.RenderingOptions.CustomPaperWidth = 80 # 80 mm receipt roll width
renderer.RenderingOptions.CustomPaperHeight = 200
pdf = renderer.RenderHtmlAsPdf("<h2>Receipt</h2><p>Total: $12.50</p>")
pdf.SaveAs("receipt.pdf")
Habilitar la Ejecución de JavaScript
Por defecto, IronPDF ejecuta JavaScript durante la renderización. Si una página depende de JavaScript para generar contenido visible — gráficos, tablas de datos, valores de formularios dinámicos — este comportamiento significa que el PDF renderizado refleja el estado DOM final. Para deshabilitar JavaScript en páginas donde no es necesario:
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/render-options-javascript.pyfrom ironpdf import *
renderer = ChromePdfRenderer()
# Disable JavaScript for static HTML pages
renderer.RenderingOptions.EnableJavaScript = False
pdf = renderer.RenderHtmlAsPdf("<p>Static content only.</p>")
pdf.SaveAs("static.pdf")
Deshabilitar JavaScript reduce el tiempo de renderización para documentos HTML simples y estáticos.
Para obtener más detalles de configuración de renderización, consulte configuraciones de generación de PDF y el ejemplo de tamaño de papel personalizado.
¿Cómo se añaden encabezados y pies de página personalizados?
Los encabezados y pies de página en IronPDF se aplican a través de objetos HtmlHeaderFooter o TextHeaderFooter adjuntos al RenderingOptions del renderizador. HtmlHeaderFooter te da control total de HTML y CSS — ideal para membretes de marca con logotipos. TextHeaderFooter es más simple y cubre la mayoría de los requisitos basados en texto, incluidos los números de página dinámicos.
Encabezado y Pie de Página Basados en Texto
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/headers-footers-text.pyfrom ironpdf import *
renderer = ChromePdfRenderer()
# Add a text header with the document title
renderer.RenderingOptions.TextHeader = TextHeaderFooter()
renderer.RenderingOptions.TextHeader.CenterText = "Quarterly Report — Q1 2024"
renderer.RenderingOptions.TextHeader.DrawDividerLine = True
renderer.RenderingOptions.TextHeader.FontSize = 10
# Add a footer with page numbers
renderer.RenderingOptions.TextFooter = TextHeaderFooter()
renderer.RenderingOptions.TextFooter.RightText = "Page {page} of {total-pages}"
renderer.RenderingOptions.TextFooter.FontSize = 9
renderer.RenderingOptions.TextFooter.DrawDividerLine = True
html = "<h1>Executive Summary</h1><p>Revenue increased 12% year-over-year.</p>"
pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("report-with-footer.pdf")
Los marcadores de posición {page} y {total-pages} se reemplazan en el tiempo de renderizado con los valores correctos. Otros marcadores de posición disponibles incluyen {date}, {time}, y {url}.
Encabezado Basado en HTML con Logo
Cuando se requiere un encabezado de marca — un logotipo de la empresa, una banda de color, o un bloque de dirección formateado — use HtmlHeaderFooter en su lugar:
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/headers-footers-html.pyfrom ironpdf import *
renderer = ChromePdfRenderer()
header_html = """
<div style="font-family: Arial, sans-serif; border-bottom: 2px solid #003366; padding: 8px 0;">
<img src='assets/logo.png' style='height: 40px; float: left;' alt='Company logo'>
<span style='float: right; font-size: 11px; color: #666;'>Confidential</span>
<div style='clear:both;'></div>
</div>
"""
renderer.RenderingOptions.HtmlHeader = HtmlHeaderFooter()
renderer.RenderingOptions.HtmlHeader.HtmlFragment = header_html
renderer.RenderingOptions.HtmlHeader.BaseUrl = "./"
html_body = "<h1>Project Status Update</h1><p>All milestones on track.</p>"
pdf = renderer.RenderHtmlAsPdf(html_body, "./")
pdf.SaveAs("branded-report.pdf")
BaseUrl en HtmlHeaderFooter a la misma ruta base utilizada para el cuerpo del documento. Esto asegura que imágenes y hojas de estilo referenciadas dentro del HTML del encabezado se resuelvan correctamente.El encabezado y pie de página aparecen en cada página del PDF generado, incluyendo documentos de varias páginas. Para un ejemplo de trabajo con metadatos a nivel de página en el pie de página, consulte el ejemplo de código de encabezados y pies de página HTML.
Ajustes de margen para encabezados y pies de página
Al agregar un encabezado o pie de página, aumente el margen correspondiente para que el contenido no se superponga al cuerpo de la página:
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/headers-footers-margins.pyfrom ironpdf import *
renderer = ChromePdfRenderer()
renderer.RenderingOptions.MarginTop = 30 # Make room for header
renderer.RenderingOptions.MarginBottom = 20 # Make room for footer
renderer.RenderingOptions.TextHeader = TextHeaderFooter()
renderer.RenderingOptions.TextHeader.CenterText = "Internal Use Only"
renderer.RenderingOptions.TextFooter = TextHeaderFooter()
renderer.RenderingOptions.TextFooter.CenterText = "Page {page} of {total-pages}"
pdf = renderer.RenderHtmlAsPdf("<h1>Internal Document</h1><p>Body content.</p>")
pdf.SaveAs("margined-report.pdf")
Para documentos críticos para el diseño, combine los ajustes de márgenes con la configuración de PaperSize para hacer coincidir exactamente la salida con una especificación de impresión. Controles de diseño adicionales — tales como rellenos de fondo de IronSoftwareSystemDrawingColor y reglas de CSS de @page — se detallan en el ejemplo de márgenes personalizados.
¿Cuáles son los próximos pasos?
Este tutorial cubrió los tres métodos principales de conversión de HTML a PDF y las opciones de renderizado que controlan su salida. Las siguientes guías se basan en esta base y cubren tareas más especializadas:
- Configuraciones de Generación de PDF — Análisis detallado de
ChromePdfRenderOptions: DPI, renderizado de fondo, tipo de medio CSS, estrategias de espera de JavaScript, y modo de impresión vs. pantalla. - Encabezados y Pies HTML — Plantillas de encabezado y pie de página con logotipos, números de página, fechas y diseños de varias columnas.
- Márgenes personalizados y tamaño de papel — Ajuste fino de la geometría de la página para resultados listos para imprimir y formatos no estándar.
- Agregar marcas de agua a PDFs — Estampar texto o marcas de agua en imágenes sobre PDFs existentes o recién generados.
- Extraer texto de PDFs — Leer el contenido de texto de PDFs generados o existentes de manera programática.
Comience una prueba gratuita de 30 días para generar PDFs ilimitados y sin marcas de agua durante la evaluación. Cuando esté listo para la producción, consulte las opciones de licencia para implementaciones en equipos y enterprise.
Preguntas Frecuentes
¿Cómo convierto una cadena HTML a PDF en Python?
Instancia ChromePdfRenderer, luego llama a renderer.RenderHtmlAsPdf(html_string). El método acepta cualquier HTML válido, incluyendo CSS y JavaScript en línea. Guarda el PdfDocument devuelto con pdf.SaveAs('output.pdf').
¿Cómo instalo IronPDF for Python?
Ejecuta pip install ironpdf desde una terminal. IronPDF for Python requiere el SDK .NET 6.0 o posterior, que debe instalarse por separado antes del primer uso.
¿Puede IronPDF convertir una URL en vivo a PDF en Python?
Sí. Usa renderer.RenderUrlAsPdf('https://example.com'). IronPDF obtiene la página usando un motor Chromium, espera a que el JavaScript termine de ejecutarse y luego genera el PDF del DOM completamente renderizado.
¿Cómo convierto un archivo HTML local a PDF?
Llama a renderer.RenderHtmlFileAsPdf('path/to/file.html'). IronPDF resuelve todas las rutas relativas de recursos — hojas de estilo, imágenes, scripts — relativas al directorio del archivo HTML automáticamente.
¿Cómo elimino la marca de agua de los PDFs generados por IronPDF?
Establece una clave de licencia válida con License.LicenseKey = 'YOUR-KEY' antes de cualquier operación PDF. Sin una clave, IronPDF agrega una marca de agua adecuada para el desarrollo pero no para uso en producción.
¿Qué opciones de renderizado expone IronPDF for Python?
Las propiedades en renderer.RenderingOptions controlan el tamaño del papel (PaperSize), orientación (PaperOrientation), márgenes (MarginTop, MarginLeft, etc.), dimensiones personalizadas (CustomPaperWidth, CustomPaperHeight), ejecución de JavaScript (EnableJavaScript) y más.
¿Cómo agrego números de página a un PDF con IronPDF en Python?
Asigna un TextHeaderFooter a renderer.RenderingOptions.TextFooter e incluye el marcador de posición {page} o {total-pages} en una de las propiedades de texto como RightText o CenterText.
¿Puedo agregar un encabezado con logotipo de marca a cada página de un PDF generado?
Sí. Usa HtmlHeaderFooter con un fragmento de HTML que incluya una etiqueta <img>. Asígalo a renderer.RenderingOptions.HtmlHeader y establece BaseUrl para que la ruta de la imagen se resuelva correctamente.
¿IronPDF admite tamaños de papel personalizados en Python?
Sí. Establece renderer.RenderingOptions.PaperSize en PdfPaperSize.Custom, luego asigna CustomPaperWidth y CustomPaperHeight en milímetros para definir cualquier dimensión de página arbitraria.
¿Qué versión del .NET requiere IronPDF for Python?
IronPDF for Python requiere el SDK .NET 6.0 o posterior. El SDK está disponible sin costo desde la página de descargas de Microsoft .NET y debe ser instalado antes de instalar mediante pip o ejecutar IronPDF.










