Conversión de documentos · local
https://tools.pictorlab.ai
/api/word-to-pdf
Word a PDF
Convierte un archivo .docx o .doc a PDF usando LibreOffice headless.
Retorna el PDF directamente como application/pdf.
application/json| Campo | Tipo | Req. | Descripción |
|---|---|---|---|
file_b64 | string | ✓ | Contenido del archivo codificado en Base64 |
filename | string | ✓ | Nombre del archivo con extensión .docx o .doc |
project_id | string | — | Identificador del proyecto (para auditoría) |
requested_by | string | — | Email o ID del solicitante (para auditoría) |
source | string | — | Origen de la llamada (default: "api") |
200 application/pdfBody: bytes del PDF generado
| Status | Condición |
|---|---|
400 | Falta file_b64, extensión inválida, o base64 malformado |
401 | API key ausente o incorrecta |
500 | LibreOffice retornó error o no generó el PDF |
504 | Timeout — conversión superó 120 segundos |
DOC_B64=$(base64 -w 0 contrato.docx)
curl -X POST https://tools.pictorlab.ai/api/word-to-pdf \
-H "X-API-Key: <key>" \
-H "Content-Type: application/json" \
-d "{
\"filename\": \"contrato.docx\",
\"file_b64\": \"${DOC_B64}\",
\"project_id\": \"mi-proyecto\",
\"requested_by\": \"usuario@empresa.com\"
}" \
--output contrato.pdf
/api/pdf-to-image
PDF a imágenes
Convierte cada página de un PDF a una imagen PNG o JPG usando ImageMagick. Retorna un JSON con todas las imágenes empaquetadas en un ZIP codificado en Base64.
application/json| Campo | Tipo | Req. | Descripción |
|---|---|---|---|
file_b64 | string | ✓ | Contenido del PDF codificado en Base64 |
filename | string | ✓ | Nombre del archivo, debe terminar en .pdf |
image_format | string | — | "png" (default) o "jpg" |
density | integer | — | DPI de salida, 72–300 (default: 200) |
project_id | string | — | Identificador del proyecto (para auditoría) |
requested_by | string | — | Email o ID del solicitante (para auditoría) |
source | string | — | Origen de la llamada (default: "api") |
200 application/json{
"ok": true,
"tool": "pdf-to-image",
"filename_in": "catalogo.pdf",
"filename_out": "catalogo_images.zip",
"image_format": "png",
"density": 200,
"pages": 12,
"duration_ms": 3420,
"project_id": "mi-proyecto",
"requested_by": "usuario@empresa.com",
"zip_b64": "<base64 del ZIP con page-001.png … page-012.png>"
}
| Status | Condición |
|---|---|
400 | Falta file_b64, extensión inválida, image_format inválido, o density fuera de rango (72–300) |
401 | API key ausente o incorrecta |
500 | ImageMagick retornó error o no generó imágenes |
504 | Timeout — conversión superó 180 segundos |
PDF_B64=$(base64 -w 0 catalogo.pdf)
RESPONSE=$(curl -s -X POST https://tools.pictorlab.ai/api/pdf-to-image \
-H "X-API-Key: <key>" \
-H "Content-Type: application/json" \
-d "{
\"filename\": \"catalogo.pdf\",
\"file_b64\": \"${PDF_B64}\",
\"image_format\": \"png\",
\"density\": 200
}")
# Extraer y guardar el ZIP
echo "$RESPONSE" | python3 -c "
import sys, json, base64
d = json.load(sys.stdin)
open(d['filename_out'], 'wb').write(base64.b64decode(d['zip_b64']))
print(f'{d[\"pages\"]} páginas · {d[\"duration_ms\"]}ms')
"
/tmp que se borra automáticamente al terminar, independientemente del resultado.word-to-pdf usa LibreOffice con perfil de usuario aislado (-env:UserInstallation) para evitar conflictos entre llamadas concurrentes.pdf-to-image genera imágenes con fondo blanco opaco (-alpha remove -alpha off). Los PDFs con transparencias quedan sobre blanco.audit.db, tabla tool_events).