API de PDF a JPEG#

Convierte un PDF a imágenes JPEG con el endpoint POST /v1/convert/pdf-to-jpeg, que renderiza cada página del PDF como una imagen ráster. Los PDF de una sola página devuelven un archivo JPEG directamente; los PDF de varias páginas devuelven un archivo ZIP que contiene un JPEG por página. Las respuestas devuelven bytes del archivo sin procesar de forma predeterminada, o metadatos JSON con una URL de descarga prefirmada cuando direct_download=false.


Endpoint#

POST /v1/convert/pdf-to-jpeg

Content-Type: multipart/form-data

Entrada aceptada: archivos .pdf

Formato de salida: .jpeg (image/jpeg) para PDF de una sola página, .zip (application/zip) para PDF de varias páginas


Autenticación#

Requiere una clave de API privada o un token JWT obtenido a partir de una clave pública.

X-API-Key: sk_your_private_key

O bien:

Authorization: Bearer <jwt_token>

Parámetros de la solicitud#

Parámetro Tipo Obligatorio Predeterminado Descripción
file file -- El archivo .pdf a convertir.
output_filename string No Nombre del archivo de entrada Nombre de archivo de salida personalizado. La extensión .jpeg o .zip se añade automáticamente.
direct_download boolean No true Cuando es true, devuelve los bytes del archivo sin procesar. Cuando es false, devuelve metadatos JSON con una URL de descarga prefirmada.

Detalles de la conversión#

  • Usa PyMuPDF para renderizar las páginas del PDF como imágenes ráster a una resolución 2x (144 DPI)
  • Usa Pillow para la codificación JPEG con calidad máxima
  • La transparencia se aplana sobre un fondo blanco (JPEG no admite canal alfa)
  • Los PDF de una sola página devuelven un archivo .jpeg directamente
  • Los PDF de varias páginas devuelven un archivo .zip que contiene page_1.jpeg, page_2.jpeg, etc.
  • El formato de salida se determina automáticamente según el número de páginas

Respuesta#

Descarga directa (direct_download=true, predeterminado)#

PDF de una sola página:

HTTP 200 OK
Content-Type: image/jpeg
Content-Disposition: inline; filename="document_20260405_123456789.jpeg"

Devuelve los bytes de la imagen JPEG sin procesar.

PDF de varias páginas:

HTTP 200 OK
Content-Type: application/zip
Content-Disposition: inline; filename="document_20260405_123456789.zip"

Devuelve un archivo ZIP que contiene un JPEG por página.

Respuesta de metadatos (direct_download=false)#

{
    "presigned_url": "https://spaces.example.com/...",
    "object_key": "env/files/{project_id}/pdf-to-jpeg/document_20260405_123456789.jpeg",
    "filename": "document_20260405_123456789.jpeg",
    "file_size": 45678,
    "conversion_time_seconds": 1.2
}

Ejemplos de código#

Python#

import requests

with open("document.pdf", "rb") as f:
    response = requests.post(
        "https://api.enconvert.com/v1/convert/pdf-to-jpeg",
        headers={"X-API-Key": "sk_your_private_key"},
        files={"file": ("document.pdf", f)}
    )

# Check if response is a ZIP (multi-page) or JPEG (single-page)
content_type = response.headers.get("Content-Type", "")
if "zip" in content_type:
    with open("document_pages.zip", "wb") as out:
        out.write(response.content)
else:
    with open("document_20260405_123456789.jpeg", "wb") as out:
        out.write(response.content)

Node.js#

const form = new FormData();
form.append("file", fs.createReadStream("document.pdf"));

const response = await fetch("https://api.enconvert.com/v1/convert/pdf-to-jpeg", {
    method: "POST",
    headers: { "X-API-Key": "sk_your_private_key" },
    body: form
});

const contentType = response.headers.get("content-type");
const buffer = Buffer.from(await response.arrayBuffer());

if (contentType.includes("zip")) {
    fs.writeFileSync("document_pages.zip", buffer);
} else {
    fs.writeFileSync("document_20260405_123456789.jpeg", buffer);
}

PHP#

$ch = curl_init("https://api.enconvert.com/v1/convert/pdf-to-jpeg");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["X-API-Key: sk_your_private_key"],
    CURLOPT_POSTFIELDS => ["file" => new CURLFile("document.pdf")]
]);
$output = curl_exec($ch);
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
curl_close($ch);

if (str_contains($contentType, "zip")) {
    file_put_contents("document_pages.zip", $output);
} else {
    file_put_contents("document_20260405_123456789.jpeg", $output);
}

Go#

body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "document.pdf")
file, _ := os.Open("document.pdf")
io.Copy(part, file)
writer.Close()

req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/pdf-to-jpeg", body)
req.Header.Set("Content-Type", writer.FormDataContentType())
req.Header.Set("X-API-Key", "sk_your_private_key")
resp, _ := http.DefaultClient.Do(req)

Respuestas de error#

Estado Condición
400 Bad Request El archivo no es un archivo .pdf
400 Bad Request El PDF no tiene páginas
400 Bad Request La conversión de la imagen falló (PDF corrupto o no compatible)
401 Unauthorized Falta la clave de API o el token JWT, o no es válido
402 Payment Required Se agotó la cuota mensual de ops
402 Payment Required Se alcanzó el límite de almacenamiento
413 Payload Too Large El archivo supera el tamaño máximo permitido por el plan

Límites#

Límite Valor
Tamaño máximo de archivo Según el plan (Founding: 5 MB)
Resolución de renderizado 144 DPI (escala 2x)
Calidad de salida Máxima (calidad JPEG 100)
Conversiones mensuales Según el plan

Preguntas frecuentes#

¿Cómo convierto un PDF a imágenes JPEG con una API REST?#

Envía una solicitud POST multipart/form-data a /v1/convert/pdf-to-jpeg con el archivo .pdf en el campo file, autenticada mediante X-API-Key o un Bearer JWT. Recibes los bytes del archivo sin procesar de forma predeterminada, o define direct_download=false para recibir JSON con una URL de descarga prefirmada.

¿Cómo maneja la API los PDF de varias páginas?#

Los PDF de una sola página devuelven un archivo .jpeg directamente, mientras que los PDF de varias páginas devuelven un archivo .zip que contiene page_1.jpeg, page_2.jpeg, y así sucesivamente. El formato de salida se determina automáticamente según el número de páginas, así que revisa el encabezado Content-Type (image/jpeg frente a application/zip) al guardar la respuesta.

¿A qué resolución se renderizan las páginas del PDF?#

Las páginas se renderizan con PyMuPDF a una resolución 2x (144 DPI) y se codifican como JPEG con calidad máxima (100). Ninguno de los dos ajustes es configurable.

¿La conversión de PDF a JPEG conserva la transparencia?#

No. JPEG no admite canal alfa, así que la transparencia se aplana sobre un fondo blanco.

¿Por qué el endpoint de PDF a JPEG devuelve un error 400?#

Se devuelve 400 Bad Request cuando el archivo no es un .pdf, cuando el PDF no tiene páginas, o cuando la conversión falla porque el PDF está corrupto o no es compatible.