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.