Ir al contenido
Tutorial

Genere archivos PDF a partir de HTML y Markdown con una API REST

| 6 min read

Dos solicitudes POST convierten HTML o Markdown en archivos PDF descargables. Sin Puppeteer, sin Chromium, sin dependencia de 500 MB. Facturas, informes y recibos en menos de 1 segundo.

Printed document pages on a desk
Photo by Bank Phrom on Unsplash

Tu aplicación genera facturas. Tienes la plantilla HTML. Ahora necesitas convertirlo en un PDF descargable. El enfoque estándar: instalar Puppeteer, iniciar una instancia Chromium sin cabeza, llamar page.pdf(). Son entre 300 y 500 MB de dependencias para una función de impresión.

Empeora en la producción. Chromium pierde memoria bajo carga. Las imágenes de Docker superan 1 GB. Los arranques en frío tardan entre 3 y 8 segundos. Terminas manteniendo un grupo de procesos del navegador para algo. esa debería ser una llamada de función única.

Hay un camino más corto. Envíe su HTML a una API y obtenga un PDF.

HTML a PDF en una solicitud POST

La /v1/pdf/from-html El punto final acepta una cadena HTML y devuelve un PDF. Sin binarios de navegador, sin dependencias, sin configuración.

curl -X POST https://api.botoi.com/v1/pdf/from-html \\
  -H "Content-Type: application/json" \\
  -d '{
    "html": "<h1>Invoice #1042</h1><p>Amount due: $2,450.00</p>"
  }'

Respuesta:

{
  "success": true,
  "data": {
    "url": "https://api.botoi.com/pdfs/f7a2c1e8.pdf",
    "size_bytes": 24576,
    "pages": 1
  }
}

La url El campo apunta al PDF generado. Descárgalo, redirige a tu usuario a él, o guárdelo en su propio depósito S3. La API maneja la representación, la paginación y la incrustación de fuentes.

Markdown a PDF en una solicitud POST

No todos los documentos comienzan como HTML. Los informes, registros de cambios y documentación suelen vivir como Markdown. El /v1/pdf/from-markdown endpoint convierte Markdown a un PDF con estilo directamente.

Respuesta:

Las tablas, los encabezados, el texto en negrita, los bloques de código y las listas se representan correctamente. La API se aplica limpia valores predeterminados tipográficos para que la salida se vea presentable sin CSS personalizado.

Ejemplo práctico: generación de facturas

Una factura realista necesita un encabezado de empresa, dirección de facturación, tabla de artículos en línea, cálculo de impuestos, y condiciones de pago. Aquí hay una factura completa enviada como una llamada API:

Esa única solicitud produce una factura profesional en PDF con el membrete de Cascade Software, cuatro artículos de línea por un total de $2257,00, 8,5 % de impuesto sobre las ventas de $191,85 y un total general de $2448,85. El CSS en el <style> La etiqueta controla las fuentes, el espaciado, los bordes de las tablas y el fila total en negrita. Puede utilizar cualquier CSS que admita el navegador, incluidos flexbox, grid y @page reglas para márgenes y tamaño de página.

Ejemplo práctico: informe trimestral de Markdown

Los informes son una opción natural para Markdown. Los gerentes de producto, analistas y equipos de operaciones ya escriben en rebajas. La conversión a PDF para distribución o archivado por correo electrónico es una llamada API:

La API procesa las tablas, los encabezados, el texto en negrita y la lista numerada en un PDF limpio. No paso HTML intermedio de tu lado. Pasa la cadena Markdown desde tu base de datos, un Git repositorio o una exportación de Notion.

Ejemplo práctico: generación de recibos en Express

Aquí hay una ruta Express que genera un recibo en PDF a pedido cuando un usuario lo solicita para un pedido pasado:

La buildReceiptHtml La función toma datos del pedido de su base de datos y produce una cadena HTML con estilo. La ruta lo envía a la API de botoi y devuelve la URL del PDF al cliente. Ningún titiritero. Sin operaciones del sistema de archivos. Sin directorios temporales.

Mismo patrón en Hono

Si estás ejecutando Cloudflare Workers o Bun, la versión de Hono es casi idéntica:

La diferencia clave: Hono accede a las variables de entorno a través de c.env en lugar de process.env. Todo lo demás sigue igual. Una llamada de recuperación, una respuesta JSON, una URL de PDF.

Comparación: API vs Puppeteer vs wkhtmltopdf vs Prince

Cuatro enfoques comunes para la conversión de HTML a PDF, comparados con lo que importa en producción:

Titiritera le brinda control total del navegador pero conlleva un alto costo operativo. Estás ejecutando Chromium en tu servidor, administrando límites de memoria y aplicando parches de seguridad. vulnerabilidades en el binario del navegador. Funciona bien si necesita ejecución de JavaScript, cookie inyección o representación de página autenticada.

wkhtmltopdf es más ligero que Puppeteer pero utiliza el obsoleto QtWebKit motor. El soporte de CSS está estancado en los niveles de 2015. Flexbox y grid no funcionan. El proyecto es archivado en GitHub sin mantenedores activos.

Príncipe XML produce resultados de impresión de la más alta calidad con medios paginados CSS completos apoyo. La compensación: una tarifa de licencia de 3.800 dólares por servidor. Eso tiene sentido para publicar. flujos de trabajo, no para generar facturas en una aplicación SaaS.

El enfoque API gana cuando necesita archivos PDF de plantillas que usted controla (facturas, recibos, informes, contratos) y no es necesario representar páginas autenticadas arbitrarias. Cero Configuración, mantenimiento cero, latencia predecible.

Puntos clave

  • Dos puntos finales, dos formatos de entrada. /v1/pdf/from-html para HTML completo con CSS. /v1/pdf/from-markdown para contenido Markdown.
  • Sin dependencias del lado del servidor. Sin Titiritero, sin Chromium, sin wkhtmltopdf binario. Una llamada HTTP desde cualquier idioma.
  • Soporte completo de CSS. Estilos en línea, etiquetas de estilo, flexbox, cuadrícula, Google Fonts, y @page Todas las consultas de medios funcionan.
  • Nivel gratuito disponible. 5 solicitudes por minuto sin clave API. Planes pagos desde $9/mes para cargas de trabajo de producción.
  • Casos de uso comunes. Facturas, recibos, informes, contratos, documentación. exportaciones y archivos adjuntos de correo electrónico.

Compruebe el API documentos para obtener la referencia completa de los parámetros, incluido el tamaño de página, los márgenes y el encabezado/pie de página configuración.

FAQ

¿Cómo genero un PDF a partir de HTML mediante programación?
Envíe una solicitud POST a https://api.botoi.com/v1/pdf/from-html con un cuerpo JSON que contenga su cadena HTML. La API devuelve un PDF codificado en base64 o una URL de descarga. No se requiere binario de navegador, instancia sin cabeza ni dependencia del lado del servidor.
¿Puedo convertir Markdown a PDF con esta API?
Sí. Envíe una solicitud POST a https://api.botoi.com/v1/pdf/from-markdown con su cadena Markdown. La API procesa Markdown en HTML con estilo internamente y devuelve un PDF. Admite encabezados, tablas, bloques de código y listas.
¿La API admite estilos CSS en la entrada HTML?
Sí. Puede incluir estilos en línea, etiquetas de estilo y CSS completo en su HTML. El motor de renderizado admite flexbox, grid, fuentes personalizadas a través de enlaces de Google Fonts y consultas de medios específicas de impresión como @page para márgenes y tamaño de página.
¿La API de generación de PDF es gratuita?
El acceso anónimo permite 5 solicitudes por minuto con limitación de velocidad basada en IP. No se requiere clave API ni registro. Los planes pagos comienzan en $9/mes y eliminan el límite de tarifa para cargas de trabajo de producción como generación de facturas o informes por lotes.
¿Cómo se compara la API con Puppeteer para la generación de PDF?
Puppeteer requiere instalar Chromium (300-500 MB), administrar instancias del navegador, manejar pérdidas de memoria y mantener la compatibilidad de versiones. La API de botoi es una única llamada HTTP sin infraestructura. La configuración tarda unos segundos en lugar de horas. Para la mayoría de los casos de uso de PDF (facturas, informes, recibos), la API cubre lo que necesita sin la sobrecarga operativa.

Empieza a construir con botoi

150+ endpoints de API para consultas, procesamiento de texto, generacion de imagenes y utilidades para desarrolladores. Plan gratuito, sin tarjeta de credito.