WeasyPrint como API alojada

Envía HTML y recibe un PDF maquetado por WeasyPrint. 1 crédito por renderizado, PDF/A en los planes de pago, un servidor MCP y ningún stack de Pango que instalar.

Última actualización

Endpoint POST /v1/weasyprint/render con un cuerpo JSON: html (obligatorio), filename (opcional), pdf_variant (opcional, planes de pago)
Precio 1 crédito por renderizado, sea cual sea el número de páginas; las llamadas rechazadas y fallidas no cuestan nada
Límites por renderizado 2 MB de HTML, 50 páginas, 20 s con clave y 8 s sin ella
Servidor MCP /mcp/weasyprint/ en el host de la API, con la herramienta render_pdf
Motor WeasyPrint 70 con las fuentes DejaVu

pagespool ejecuta WeasyPrint, el motor de código abierto que maqueta HTML y CSS como páginas impresas. Envía un documento HTML a POST /v1/weasyprint/render y el cuerpo de la respuesta es el PDF. El CSS de impresión funciona: @page, cajas de margen, contadores de página y saltos de página (compatibilidad con CSS, en inglés). No se ejecuta JavaScript y no se carga nada de la red.

Un renderizado cuesta 1 crédito, sea cual sea el número de páginas. Las llamadas rechazadas y fallidas no cuestan nada. Un renderizado admite hasta 2 MB de HTML y 50 páginas, y puede durar 20 s con clave de API u 8 s sin ella. Los planes de pago añaden la salida PDF/A-2b y PDF/A-3b (precios). Son los mismos créditos que gastan los demás motores de aquí.

Inicio rápido con curl

Esta llamada funciona sin clave de API, con 10 créditos gratis al día por dirección IP:

curl -X POST https://api.pagespool.com/v1/weasyprint/render \
  -H 'Content-Type: application/json' \
  -H "X-API-Key: $PAGESPOOL_KEY" \
  -d '{"html": "<h1>Invoice 1</h1><p>Thanks for your business.</p>", "filename": "invoice.pdf"}' \
  -o invoice.pdf -w '%{http_code}\n'

Un estado distinto de 200 significa que invoice.pdf contiene un error JSON en lugar de un PDF (códigos de error, en inglés). Para PDF/A en un plan de pago, añade "pdf_variant": "pdf/a-2b" al JSON.

Inicio rápido con Python

httpx o requests es toda la integración. Aquí la clave viaja como HTTP Basic, con la clave como contraseña:

import os

import httpx

resp = httpx.post(
    "https://api.pagespool.com/v1/weasyprint/render",
    json={"html": "<h1>Report</h1><p>Generated in Python.</p>", "filename": "report.pdf"},
    auth=("x", os.environ["PAGESPOOL_KEY"]),
    timeout=30,
)
if resp.status_code != 200:
    problem = resp.json()
    raise RuntimeError(f"{resp.status_code} {problem['code']}: {problem['detail']}")
with open("report.pdf", "wb") as f:
    f.write(resp.content)

Más en la guía de Python y la guía de Node.js, ambas en inglés.

Tres formas de enviar la clave

Cada motor de aquí acepta la clave de tres formas. Elige la que admita tu cliente:

Forma Qué envías
Cabecera X-API-Key: YOUR_KEY
Token Bearer Authorization: Bearer YOUR_KEY
HTTP Basic La clave como contraseña, cualquier nombre de usuario: curl -u x:YOUR_KEY o auth=("x", key)

Un cliente que solo acepta una URL envía HTTP Basic cuando la clave va en la URL: https://x:YOUR_KEY@ seguido del host de la API. No pongas nunca la clave en la ruta ni en la query string. Las claves se crean en el panel. Una clave ausente o no válida no hace fallar un renderizado; se ejecuta con el límite de las llamadas sin clave.

Alojado por ti o aquí

WeasyPrint es de código abierto y puedes ejecutarlo tú.

WeasyPrint alojado por ti Alojado aquí
Instalación Python más los paquetes de Pango, HarfBuzz y fuentes de tu sistema, siempre actualizados Una clave de API
HTML no fiable La documentación de WeasyPrint pide limitar el tiempo y la memoria de cada proceso y bloquear las URL de archivos y de red Cada renderizado se ejecuta en su propio proceso, que se detiene en su límite de tiempo, con 768 MiB de memoria como máximo; solo se cargan URI data:
Memoria Calcula para el documento más grande que renderices, por renderizado en paralelo No es asunto tuyo
PDF/A pdf_variant en tu propio código pdf_variant en un plan de pago, validado con veraPDF en documentos de ejemplo
Agentes Construye una herramienta a su alrededor El servidor MCP de abajo

El HTML escrito para esta API también se renderiza en tu propio WeasyPrint 70 con las fuentes DejaVu, así que puedes cambiar más adelante.

Servidor MCP y herramienta gratuita

Los agentes llaman a WeasyPrint por su propio servidor MCP en https://api.pagespool.com/mcp/weasyprint/, con la herramienta render_pdf. Acepta hasta 256 KB de HTML y devuelve un enlace al PDF que funciona 15 minutos. Los pasos para cada cliente están en la página de conexión y en la guía de MCP (en inglés).

Para probar antes un documento, pégalo en la herramienta gratuita, sin cuenta.

WeasyPrint es una marca de su titular; pagespool no está afiliado a él.

Preguntas frecuentes

¿Cuánto cuesta un renderizado con WeasyPrint?
1 crédito por renderizado, sea cual sea el número de páginas. Las llamadas rechazadas y fallidas no cuestan nada. Cada cuenta recibe 10 créditos gratis al día y el plan gratuito 100 al mes. Los créditos son comunes a los siete motores.
¿Puedo obtener PDF/A del WeasyPrint alojado?
Sí, en los planes de pago. Pon pdf_variant a pdf/a-2b o pdf/a-3b. Sin plan de pago, la llamada recibe el estado 403 (feature_not_available) y no cuesta nada.
¿Qué cabecera lleva la clave de API?
Cualquiera de tres: X-API-Key, Authorization: Bearer o HTTP Basic con la clave como contraseña. Una URL como https://x:YOUR_KEY@ seguida del host de la API envía Basic.