API de cualquier archivo a PDF#
El endpoint POST /v1/convert/anything-to-pdf convierte casi cualquier archivo que subas — Word, Excel, PowerPoint, OpenDocument, Apple Pages y Numbers, HTML, Markdown, texto plano, EPUB, imágenes y SVG — en un PDF. Detecta automáticamente el formato del archivo que envías, lo redirige al motor de renderizado adecuado y devuelve un único PDF. Un solo endpoint reemplaza toda la pila de PDF específica por formato: subes un archivo y recibes un PDF, sea cual sea el tipo de origen.
Es el superconjunto de una sola llamada de los endpoints de PDF específicos por formato (html-to-pdf, doc-to-pdf, excel-to-pdf y los demás): usa esos cuando ya conoces el tipo de entrada y quieres un control detallado de la página, y usa este cuando la entrada podría ser cualquier cosa. Este endpoint funciona solo con archivos; para renderizar a PDF una página web en vivo, usa url-to-pdf. Para el equivalente en Markdown que convierte cualquier archivo en Markdown limpio, consulta anything-to-markdown.
Endpoint#
POST /v1/convert/anything-to-pdf
Content-Type: multipart/form-data
Formato de salida: PDF (.pdf, application/pdf). El tipo de entrada se detecta automáticamente a partir de la extensión del nombre del archivo subido y de sus magic bytes; no especificas un formato de entrada.
Formatos de entrada admitidos#
El tipo de entrada se detecta a partir de la extensión del archivo (validada contra los magic bytes del archivo). Estos son todos los formatos que acepta el endpoint:
| Categoría | Formatos | Extensiones | Notas |
|---|---|---|---|
| Word | DOCX, DOC | .docx, .doc |
Renderizado con LibreOffice, conservando estilos, tablas y diseño. |
| Excel | XLSX, XLS | .xlsx, .xls |
Hojas de cálculo renderizadas a un PDF paginado mediante LibreOffice. |
| PowerPoint | PPTX, PPT | .pptx, .ppt |
Una página de PDF por diapositiva, mediante LibreOffice. |
| OpenDocument | ODT, ODS, ODP, OTS | .odt, .ods, .odp, .ots |
Documentos de texto, hoja de cálculo, presentación y plantilla de hoja de cálculo, mediante LibreOffice. |
| Apple iWork | Pages, Numbers | .pages, .numbers |
Documentos de Apple Pages y Numbers, mediante LibreOffice. |
| Texto enriquecido / datos | RTF, CSV | .rtf, .csv |
Documentos RTF y tablas CSV renderizados mediante LibreOffice. |
| Web / marcado | HTML, XHTML | .html, .htm, .xhtml |
Renderizado con WeasyPrint, respetando el propio CSS del documento. |
| Markdown | Markdown | .md, .markdown, .mdown, .mkd |
Renderizado a un PDF con estilos, con encabezados, tablas y bloques de código. |
| Texto plano | Text | .txt, .text |
Renderizado con una disposición monoespaciada que conserva los espacios en blanco. |
| Libros electrónicos | EPUB | .epub |
Capítulos convertidos en orden de lectura (spine) a un PDF de texto. |
| Imágenes | PNG, JPEG, GIF, BMP, TIFF, WebP, HEIC | .png, .jpg, .jpeg, .gif, .bmp, .tiff, .tif, .webp, .heic, .heif |
Cada imagen se convierte en un PDF de una sola página; la transparencia se aplana sobre fondo blanco. |
| Vectorial | SVG | .svg |
Renderizado como vector (no rasterizado) con CairoSVG. |
.pdf |
Aceptado y devuelto tal cual; útil para la normalización a escala de grises (ver pdf_options). |
grayscale. Para un control total de la página, envía HTML o Markdown a html-to-pdf o markdown-to-pdf. Para convertir una URL en vivo a PDF, usa url-to-pdf.
Autenticación#
Este endpoint admite autenticación tanto con clave privada como con clave pública.
Clave privada#
Incluye tu clave secreta en la cabecera X-API-Key. Úsala para llamadas de servidor a servidor donde la clave nunca se expone al cliente.
X-API-Key: sk_live_your_private_key
Clave pública con JWT#
Para uso del lado del cliente, primero genera un token JWT con tu clave pública y luego pásalo como token Bearer.
Paso 1 -- Obtén un token:
POST /v1/auth/token
X-API-Key: pk_live_your_public_key
Paso 2 -- Usa el token:
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
El flujo completo, incluidos el bloqueo por dominio y la renovación del token, está en la guía de autenticación. Cada clave de API lleva una lista de endpoints permitidos; si /v1/convert/anything-to-pdf no está en la lista de la clave, la petición se rechaza con 403.
Parámetros de la petición#
Envía el archivo como multipart/form-data. El documento va en el campo file; el resto son campos de formulario opcionales.
| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|---|---|---|---|---|
file |
file | Sí | -- | El archivo de documento, imagen o marcado que se va a convertir. Su extensión debe ser uno de los formatos de entrada admitidos anteriores. |
output_filename |
string |
No | Nombre de entrada | Nombre personalizado para el archivo de salida. La extensión .pdf se añade automáticamente. |
direct_download |
boolean |
No | true |
Se acepta por paridad de forma con las peticiones de los demás endpoints de conversión. |
job_id |
string |
No | -- | ID de trabajo proporcionado por el cliente para la recuperación tras un timeout. Cuando una conversión síncrona supera los límites de timeout del proxy inverso, consulta GET /v1/convert/status/{job_id} para obtener el resultado. |
pdf_options |
string |
No | null |
Cadena JSON con opciones de PDF. En este endpoint solo se respeta grayscale; ver más abajo. |
Opciones de PDF#
Pásalas como una cadena JSON en el campo de formulario pdf_options. Como el formato de entrada se detecta automáticamente y cada formato se renderiza con un motor distinto, aquí solo se aplica grayscale de forma uniforme.
| Parámetro | Tipo | Predeterminado | Descripción |
|---|---|---|---|
grayscale |
boolean |
false |
Convierte el PDF de salida a escala de grises mediante posprocesamiento con Ghostscript. Se aplica a todos los tipos de entrada, incluida una subida que ya sea PDF. |
Para un tamaño de página personalizado, márgenes, orientación, encabezados o pies de página, convierte HTML o Markdown a través de los endpoints específicos html-to-pdf o markdown-to-pdf, que aceptan el esquema completo de pdf_options.
Respuesta#
La conversión se ejecuta en el proceso y el archivo .pdf resultante se almacena; después, el endpoint devuelve un cuerpo JSON con una URL de descarga prefirmada:
{
"presigned_url": "https://spaces.example.com/...signed...",
"object_key": "env/files/{project_id}/anything-to-pdf/report_20260714_101530123.pdf",
"filename": "report_20260714_101530123.pdf",
"file_size": 51240,
"conversion_time_seconds": 2.1,
"job_id": null
}
Los mismos valores se reflejan en las cabeceras de respuesta (X-Object-Key, X-File-Size, X-Conversion-Time, X-Filename) para que puedas leerlos sin analizar el cuerpo. Descarga el PDF desde presigned_url; el enlace tiene una vida corta.
Cómo se convierte cada formato#
Cada formato se normaliza a un PDF, de modo que obtienes una salida coherente sin importar el tipo de origen.
- Word / Excel / PowerPoint — Renderizados con LibreOffice en modo headless, conservando estilos, tablas y diseño; las presentaciones producen una página por diapositiva. Los formatos binarios heredados (
.doc,.xls,.ppt) los gestiona el mismo motor. - OpenDocument, Apple Pages / Numbers, RTF, CSV — También renderizados con LibreOffice, de modo que los documentos ODF, las exportaciones de iWork, el texto enriquecido y las tablas CSV se paginan de forma limpia.
- HTML / XHTML — Renderizados con WeasyPrint, que respeta el propio CSS del documento. Los recursos externos referenciados por URL pueden no resolverse; incrusta tu CSS en línea y codifica las imágenes en base64 para obtener mejores resultados.
- Markdown — Convertido a HTML (encabezados, tablas al estilo GitHub-Flavored, bloques de código) y renderizado con WeasyPrint en un PDF limpio y con estilos.
- Texto plano — Renderizado con una disposición monoespaciada que conserva los espacios en blanco y ajusta las líneas largas, de modo que los registros y el código siguen siendo legibles.
- EPUB — Los documentos de contenido se leen en orden de spine (lectura) y se renderizan capítulo a capítulo en un PDF de texto; el documento de navegación se omite.
- Imágenes (PNG, JPEG, GIF, BMP, TIFF, WebP, HEIC) — Cada imagen se convierte en un PDF de una sola página mediante Pillow. La transparencia se aplana sobre un fondo blanco y solo se usa el primer fotograma de una imagen de varios fotogramas (GIF animado, TIFF de varias páginas).
- SVG — Renderizado como gráficos vectoriales reales con CairoSVG, de modo que el resultado se mantiene nítido a cualquier nivel de zoom.
- PDF — Un PDF subido se valida y se devuelve sin cambios, lo que convierte a este endpoint en una forma cómoda de normalizar a escala de grises un PDF existente.
Formato de salida#
El resultado es un PDF estándar (application/pdf):
- Los documentos conservan su paginación, encabezados, tablas y estilos del motor de renderizado de origen.
- Las imágenes producen una única página del tamaño de la imagen; SVG se mantiene vectorial.
- Escala de grises — cuando
pdf_options.grayscaleestrue, el PDF final se desatura mediante una pasada de posprocesamiento con Ghostscript.
Si necesitas Markdown limpio en lugar de un PDF — por ejemplo, para alimentar un pipeline de LLM o RAG — envía el mismo archivo a anything-to-markdown o el endpoint de ingest.
Formatos admitidos por endpoint#
Los endpoints de subida de archivos comparten la misma detección automática de formato, pero apuntan a salidas distintas. Este endpoint (anything-to-pdf) acepta el conjunto más amplio: los 36 formatos siguientes. anything-to-markdown y /v2/ingest aceptan entre sí los mismos 22 formatos de documento (las imágenes, SVG y los formatos de Apple/OTS son solo para PDF), y /v2/ingest además acepta fuentes web — una lista de URL, un sitemap o un rastreo — no solo archivos.
| Categoría | Extensiones | anything-to-pdf | anything-to-markdown | /v2/ingest |
|---|---|---|---|---|
.pdf |
✓ | ✓ | ✓ | |
| Word | .docx, .doc |
✓ | ✓ | ✓ |
| Excel | .xlsx, .xls |
✓ | ✓ | ✓ |
| PowerPoint | .pptx, .ppt |
✓ | ✓ | ✓ |
| CSV | .csv |
✓ | ✓ | ✓ |
| Texto enriquecido | .rtf |
✓ | ✓ | ✓ |
| OpenDocument | .odt, .ods, .odp |
✓ | ✓ | ✓ |
| Plantilla ODF | .ots |
✓ | — | — |
| Apple iWork | .pages, .numbers |
✓ | — | — |
| Web / marcado | .html, .htm, .xhtml |
✓ | ✓ | ✓ |
| Markdown / texto | .md, .markdown, .mdown, .mkd, .txt, .text |
✓ | ✓ | ✓ |
| Libros electrónicos | .epub |
✓ | ✓ | ✓ |
| Imágenes | .png, .jpg, .jpeg, .gif, .bmp, .tiff, .tif, .webp, .heic, .heif |
✓ | — | — |
| Vectorial | .svg |
✓ | — | — |
Un ✓ significa que el endpoint acepta ese formato como subida de archivo; un — significa que no. Las imágenes y SVG se convierten a PDF aquí, pero los endpoints con salida en Markdown los rechazan (el OCR de imágenes es un pipeline aparte). Los límites de tamaño por archivo dependen del plan (Free: 5 MB) en los tres endpoints.
Ejemplos de código#
curl (clave privada)#
curl -X POST https://api.enconvert.com/v1/convert/anything-to-pdf \
-H "X-API-Key: sk_live_your_private_key" \
-F "[email protected]"
Python (clave privada)#
import requests
with open("quarterly-report.docx", "rb") as f:
response = requests.post(
"https://api.enconvert.com/v1/convert/anything-to-pdf",
headers={"X-API-Key": "sk_live_your_private_key"},
files={"file": ("quarterly-report.docx", f)},
)
response.raise_for_status()
result = response.json()
# Download the PDF from the pre-signed URL.
pdf = requests.get(result["presigned_url"]).content
with open("quarterly-report.pdf", "wb") as out:
out.write(pdf)
Node.js (clave privada)#
import { readFile, writeFile } from "node:fs/promises";
const form = new FormData();
form.append(
"file",
new Blob([await readFile("quarterly-report.docx")]),
"quarterly-report.docx"
);
const response = await fetch(
"https://api.enconvert.com/v1/convert/anything-to-pdf",
{ method: "POST", headers: { "X-API-Key": "sk_live_your_private_key" }, body: form }
);
const result = await response.json();
const pdf = await fetch(result.presigned_url).then((r) => r.arrayBuffer());
await writeFile("quarterly-report.pdf", Buffer.from(pdf));
PHP (clave privada)#
$ch = curl_init("https://api.enconvert.com/v1/convert/anything-to-pdf");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["X-API-Key: sk_live_your_private_key"],
CURLOPT_POSTFIELDS => [
"file" => new CURLFile("quarterly-report.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "quarterly-report.docx"),
],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $data["presigned_url"];
Respuestas de error#
| Estado | Condición |
|---|---|
400 Bad Request |
Tipo de archivo no admitido, un archivo vacío o un documento corrupto/ilegible (p. ej., una imagen no válida o un EPUB con formato incorrecto). |
400 Bad Request |
Los bytes del archivo no coinciden con su extensión declarada (discordancia de magic bytes). |
400 Bad Request |
JSON de pdf_options no válido. |
401 Unauthorized |
Clave de API o token JWT ausente o no válido. |
402 Payment Required |
Se alcanzó el límite mensual de conversiones o el límite de almacenamiento. |
403 Forbidden |
/v1/convert/anything-to-pdf no está entre los endpoints permitidos de la clave de API. |
413 Payload Too Large |
La subida supera el límite de tamaño por archivo de tu plan. |
500 Internal Server Error |
La conversión falló inesperadamente. |
La referencia completa de códigos de estado está en la guía de códigos de error.
Límites#
| Límite | Valor |
|---|---|
| Tamaño máximo de subida | Según el plan (Free: 5 MB) |
| Conversiones mensuales | Según el plan (Free: 100) |
| Retención de archivos | Según el plan (Free: 1 hora) |
| Opciones de geometría de página | No se aplican en este endpoint (solo grayscale) |
| Formatos de entrada admitidos | Ver la tabla de formatos de entrada admitidos |
Preguntas frecuentes#
¿Cómo convierto cualquier archivo a PDF con una API?#
Envía una petición POST a /v1/convert/anything-to-pdf como multipart/form-data con tu archivo en el campo file y tu clave en la cabecera X-API-Key. El endpoint detecta automáticamente el formato, lo renderiza a PDF y devuelve JSON con un presigned_url al .pdf terminado. No necesitas indicarle el tipo de entrada: lo deciden la extensión y los magic bytes.
¿Qué formatos de archivo puedo convertir a PDF?#
Word (.docx, .doc), Excel (.xlsx, .xls), PowerPoint (.pptx, .ppt), OpenDocument (.odt, .ods, .odp, .ots), Apple Pages y Numbers, RTF, CSV, HTML/XHTML, Markdown, texto plano, EPUB, imágenes (.png, .jpg, .jpeg, .gif, .bmp, .tiff, .webp, .heic) y SVG. Un PDF existente se acepta y se devuelve tal cual. La lista completa con notas por formato está en la tabla de formatos de entrada admitidos.
¿Puedo convertir Word, Excel o PowerPoint a PDF a través de la API?#
Sí. Los documentos de Office — modernos (.docx, .xlsx, .pptx) y heredados (.doc, .xls, .ppt) — se renderizan con LibreOffice, conservando estilos, tablas y diseño, con una página por diapositiva en las presentaciones. Sube el archivo y recibes el PDF de vuelta.
¿Cómo convierto una imagen como PNG, JPEG o HEIC a PDF?#
Súbela al mismo endpoint. Cada imagen se convierte en un PDF de una sola página, con la transparencia aplanada sobre un fondo blanco; también se admiten las fotos .heic/.heif del iPhone y los vectores .svg. Para una imagen de varios fotogramas (GIF animado o TIFF de varias páginas), se usa el primer fotograma.
¿Puedo definir un tamaño de página, márgenes o encabezados personalizados en el PDF?#
En este endpoint no: solo se respeta grayscale, porque el formato de entrada se detecta automáticamente y cada tipo usa un motor de renderizado distinto. Para un control total de la página (tamaño de página, márgenes, orientación, encabezados, pies de página), envía HTML o Markdown a los endpoints html-to-pdf o markdown-to-pdf, que aceptan el esquema completo de pdf_options.
¿En qué se diferencia esto de los endpoints doc-to-pdf o html-to-pdf?#
Los endpoints específicos por formato aceptan cada uno un solo tipo de entrada y exponen todas las opciones de geometría de página; anything-to-pdf los acepta todos tras una única llamada y detecta automáticamente el formato, lo que resulta ideal cuando la entrada podría ser cualquier cosa. Usa un endpoint específico cuando conoces el tipo y quieres control de página; usa este cuando quieres una única vía de subida para muchos formatos.