pdf-servicio

HTML → PDF y PDF → imagen, con la misma API que pdf.co. Para usarlo desde cualquier proyecto con una llamada HTTP.

Cómo empezar

  1. Pide una clave para tu proyecto (cada proyecto tiene la suya, con su nombre).
  2. Mándala en el encabezado x-api-key en cada pedido.
  3. El cuerpo puede ir en JSON o como formulario.

Esta instancia: https://pdfjh.neboaiconsulting.com

HTML → PDF

POST /v1/pdf/convert/from/html

CampoQué es
htmlEl HTML completo. Obligatorio. Las imágenes y fuentes por URL pública se cargan solas.
nameNombre del archivo (sin o con .pdf).
paperSizeLetter (por defecto), A4, Legal, Tabloid, A3, A5… o medidas: "210mm 297mm".
marginsComo en CSS: "10mm" o "3mm 10mm 2mm 10mm" (arriba, derecha, abajo, izquierda).
landscapetrue para horizontal.
header, footerHTML del encabezado y pie de cada página. Admite <span class="pageNumber"> y <span class="totalPages">. Dale tamaño de letra explícito (p. ej. style="font-size:9px") y deja margen para que quepa.
inlinetrue: responde el PDF directo (application/pdf, con el número de páginas en X-Page-Count) en vez de una URL.

Respuesta (como pdf.co):

{ "url": "https://…/archivos/3f9c…/Cotizacion.pdf", "pageCount": 2, "name": "Cotizacion.pdf",
  "error": false, "status": 200, "credits": 0, "remainingCredits": 0 }

La URL es pública pero imposible de adivinar, y el archivo se borra a las 24 horas: descárgalo y guárdalo donde lo necesites.

curl

curl -X POST https://pdfjh.neboaiconsulting.com/v1/pdf/convert/from/html \
  -H "x-api-key: TU_CLAVE" -H "Content-Type: application/json" \
  -d '{"html":"<h1>Hola</h1>","name":"prueba","paperSize":"A4","margins":"10mm"}'

JavaScript (Node 18+ o navegador desde tu servidor)

const r = await fetch('https://pdfjh.neboaiconsulting.com/v1/pdf/convert/from/html', {
  method: 'POST',
  headers: { 'x-api-key': process.env.PDF_CLAVE, 'Content-Type': 'application/json' },
  body: JSON.stringify({ html, name: 'Factura 123', paperSize: 'Letter', margins: '10mm', inline: true }),
});
if (!r.ok) throw new Error((await r.json()).message);
const pdf = Buffer.from(await r.arrayBuffer());   // con inline: true, el PDF directo

n8n (cambiar un nodo de pdf.co)

En el nodo HTTP Request: la URL pasa a https://pdfjh.neboaiconsulting.com/v1/pdf/convert/from/html y la autenticación a Generic Credential Type → Header Auth, con nombre x-api-key y la clave como valor. Los parámetros y lo que sigue al nodo ({{ $json.url }}, pageCount) quedan igual.

Página web → PDF

POST /v1/pdf/convert/from/url — igual que la anterior, pero con url (pública, http o https) en vez de html.

PDF → imágenes

POST /v1/pdf/convert/to/jpg · POST /v1/pdf/convert/to/png

CampoQué es
urlURL pública del PDF (hasta 25 MB). Obligatorio.
pagesComo pdf.co, empezando en 0: "0", "0,2-3", "1-". Sin él, todas.
resolutionDPI, de 36 a 300. Por defecto 150.
nameBase del nombre de las imágenes (nombre-1.jpg, nombre-2.jpg…).
{ "urls": ["https://…/archivos/…/doc-1.jpg", "https://…/archivos/…/doc-2.jpg"], "pageCount": 2,
  "name": "doc.jpg", "error": false, "status": 200, "credits": 0, "remainingCredits": 0 }

Errores

Con la forma de pdf.co: { "error": true, "status": 400, "message": "…" }.

CódigoCuándo
400Falta un campo, una opción no vale, la URL no es pública o el PDF no es PDF.
401Sin clave o clave no válida.
413El cuerpo pasa de 30 MB.
503Hay demasiadas conversiones en espera (se hacen de a una): reintenta en unos segundos.

Límites