API Qualsiasi File in PDF#
L'endpoint POST /v1/convert/anything-to-pdf converte quasi ogni file caricato — Word, Excel, PowerPoint, OpenDocument, Apple Pages e Numbers, HTML, Markdown, testo semplice, EPUB, immagini e SVG — in un PDF. Rileva automaticamente il formato dal file inviato, lo instrada verso il motore di rendering corretto e restituisce un unico PDF. Un solo endpoint sostituisce l'intero stack PDF per singolo formato: carichi un file, ricevi un PDF, qualunque sia il tipo di origine.
È il superset a chiamata singola degli endpoint PDF specifici per formato (html-to-pdf, doc-to-pdf, excel-to-pdf e gli altri) — usa quelli quando conosci già il tipo di input e vuoi un controllo granulare della pagina, e usa questo quando l'input potrebbe essere qualsiasi cosa. Questo endpoint funziona solo su file; per convertire una pagina web dal vivo in PDF, usa url-to-pdf. Per la controparte Markdown che trasforma qualsiasi file in Markdown pulito, vedi anything-to-markdown.
Endpoint#
POST /v1/convert/anything-to-pdf
Content-Type: multipart/form-data
Formato di output: PDF (.pdf, application/pdf). Il tipo di input viene rilevato automaticamente dall'estensione del nome del file caricato e dai suoi magic byte — non devi specificare un formato di input.
Formati di input supportati#
Il tipo di input viene rilevato dall'estensione del file (validata rispetto ai magic byte del file). Questi sono tutti i formati accettati dall'endpoint:
| Categoria | Formati | Estensioni | Note |
|---|---|---|---|
| Word | DOCX, DOC | .docx, .doc |
Renderizzati tramite LibreOffice, preservando stili, tabelle e layout. |
| Excel | XLSX, XLS | .xlsx, .xls |
Fogli di calcolo renderizzati in PDF paginato tramite LibreOffice. |
| PowerPoint | PPTX, PPT | .pptx, .ppt |
Una pagina PDF per diapositiva, tramite LibreOffice. |
| OpenDocument | ODT, ODS, ODP, OTS | .odt, .ods, .odp, .ots |
Documenti di testo, foglio di calcolo, presentazione e modello di foglio di calcolo, tramite LibreOffice. |
| Apple iWork | Pages, Numbers | .pages, .numbers |
Documenti Apple Pages e Numbers, tramite LibreOffice. |
| Testo formattato / dati | RTF, CSV | .rtf, .csv |
Documenti RTF e tabelle CSV renderizzati tramite LibreOffice. |
| Web / markup | HTML, XHTML | .html, .htm, .xhtml |
Renderizzati con WeasyPrint, rispettando il CSS del documento stesso. |
| Markdown | Markdown | .md, .markdown, .mdown, .mkd |
Renderizzato in un PDF stilizzato con intestazioni, tabelle e blocchi di codice. |
| Testo semplice | Text | .txt, .text |
Renderizzato in un layout monospaziato che preserva gli spazi bianchi. |
| E-book | EPUB | .epub |
Capitoli convertiti nell'ordine di lettura (spine) in un PDF testuale. |
| Immagini | PNG, JPEG, GIF, BMP, TIFF, WebP, HEIC | .png, .jpg, .jpeg, .gif, .bmp, .tiff, .tif, .webp, .heic, .heif |
Ogni immagine diventa un PDF di una singola pagina; la trasparenza viene appiattita su sfondo bianco. |
| Vettoriale | SVG | .svg |
Renderizzato come vettoriale (non rasterizzato) con CairoSVG. |
.pdf |
Accettato e restituito così com'è — utile per la normalizzazione in scala di grigi (vedi pdf_options). |
grayscale. Per il controllo completo della pagina, invia HTML o Markdown a html-to-pdf o markdown-to-pdf. Per convertire un URL dal vivo in PDF, usa url-to-pdf.
Autenticazione#
Questo endpoint supporta sia l'autenticazione con chiave privata sia con chiave pubblica.
Chiave privata#
Includi la tua chiave segreta nell'header X-API-Key. Usala per chiamate server-to-server in cui la chiave non viene mai esposta al client.
X-API-Key: sk_live_your_private_key
Chiave pubblica con JWT#
Per l'uso lato client, genera prima un token JWT con la tua chiave pubblica, poi passalo come Bearer token.
Passo 1 -- Ottieni un token:
POST /v1/auth/token
X-API-Key: pk_live_your_public_key
Passo 2 -- Usa il token:
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Il flusso completo, incluso il domain locking e il refresh del token, è nella guida all'autenticazione. Ogni chiave API porta con sé un allowlist di endpoint consentiti — se /v1/convert/anything-to-pdf non è nell'elenco della chiave, la richiesta viene rifiutata con 403.
Parametri della richiesta#
Invia il file come multipart/form-data. Il documento va nel campo file; il resto sono campi form opzionali.
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|---|---|---|---|---|
file |
file | Sì | -- | Il documento, l'immagine o il file di markup da convertire. La sua estensione deve essere uno dei formati di input supportati sopra. |
output_filename |
string |
No | Nome input | Nome personalizzato per il file di output. L'estensione .pdf viene aggiunta automaticamente. |
direct_download |
boolean |
No | true |
Accettato per uniformità della forma della richiesta con gli altri endpoint di conversione. |
job_id |
string |
No | -- | Job ID fornito dal client per il recupero in caso di timeout. Quando una conversione sincrona supera i limiti di timeout del reverse proxy, interroga GET /v1/convert/status/{job_id} per recuperare il risultato. |
pdf_options |
string |
No | null |
Stringa JSON di opzioni PDF. Su questo endpoint viene rispettato solo grayscale — vedi sotto. |
Opzioni PDF#
Passa una stringa JSON nel campo form pdf_options. Poiché il formato di input è rilevato automaticamente e ogni formato è renderizzato da un motore diverso, qui viene applicato in modo uniforme solo grayscale.
| Parametro | Tipo | Predefinito | Descrizione |
|---|---|---|---|
grayscale |
boolean |
false |
Converte il PDF di output in scala di grigi tramite post-elaborazione con Ghostscript. Si applica a ogni tipo di input, incluso un caricamento già in PDF. |
Per una dimensione pagina personalizzata, margini, orientamento, intestazioni o piè di pagina, converti HTML o Markdown tramite gli endpoint specifici per formato html-to-pdf o markdown-to-pdf, che accettano lo schema pdf_options completo.
Risposta#
La conversione avviene in-process e il file .pdf risultante viene memorizzato, poi l'endpoint restituisce un corpo JSON con un URL di download pre-firmato:
{
"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
}
Gli stessi valori vengono riportati negli header della risposta (X-Object-Key, X-File-Size, X-Conversion-Time, X-Filename) così puoi leggerli senza analizzare il corpo. Scarica il PDF da presigned_url — il link ha vita breve.
Come viene convertito ogni formato#
Ogni formato viene normalizzato in un PDF, così ottieni un output coerente indipendentemente dal tipo di origine.
- Word / Excel / PowerPoint — Renderizzati con LibreOffice in modalità headless, preservando stili, tabelle e layout; le presentazioni producono una pagina per diapositiva. I formati binari legacy (
.doc,.xls,.ppt) sono gestiti dallo stesso motore. - OpenDocument, Apple Pages / Numbers, RTF, CSV — Anch'essi renderizzati tramite LibreOffice, così i documenti ODF, gli export iWork, il testo formattato e le tabelle CSV si paginano tutti in modo pulito.
- HTML / XHTML — Renderizzati con WeasyPrint, che rispetta il CSS del documento stesso. Le risorse esterne referenziate tramite URL potrebbero non risolversi — incorpora il tuo CSS inline e codifica le immagini in base64 per i migliori risultati.
- Markdown — Convertito in HTML (intestazioni, tabelle GitHub-Flavored, blocchi di codice) e renderizzato con WeasyPrint in un PDF pulito e stilizzato.
- Testo semplice — Renderizzato in un layout monospaziato che preserva gli spazi bianchi e manda a capo le righe lunghe, così log e codice restano leggibili.
- EPUB — I documenti di contenuto vengono letti nell'ordine spine (di lettura) e renderizzati capitolo per capitolo in un PDF testuale; il documento di navigazione viene saltato.
- Immagini (PNG, JPEG, GIF, BMP, TIFF, WebP, HEIC) — Ogni immagine diventa un PDF di una singola pagina tramite Pillow. La trasparenza viene appiattita su uno sfondo bianco e viene usato solo il primo fotogramma di un'immagine multi-fotogramma (GIF animata, TIFF multipagina).
- SVG — Renderizzato come vera grafica vettoriale con CairoSVG, così il risultato resta nitido a qualsiasi livello di zoom.
- PDF — Un PDF caricato viene validato e restituito invariato, il che rende questo endpoint un modo comodo per normalizzare in scala di grigi un PDF esistente.
Formato di output#
Il risultato è un PDF standard (application/pdf):
- I documenti mantengono impaginazione, intestazioni, tabelle e stile dal motore di rendering di origine.
- Le immagini producono una singola pagina dimensionata sull'immagine; SVG resta vettoriale.
- Scala di grigi — quando
pdf_options.grayscaleètrue, il PDF finito viene desaturato tramite una passata di post-elaborazione con Ghostscript.
Se hai bisogno di Markdown pulito invece di un PDF — ad esempio per alimentare una pipeline LLM o RAG — invia lo stesso file a anything-to-markdown o l'endpoint di ingest.
Formati supportati per endpoint#
Gli endpoint di upload file condividono lo stesso rilevamento automatico del formato ma puntano a output diversi. Questo endpoint (anything-to-pdf) accetta l'insieme più ampio — tutti i 36 formati sottostanti. anything-to-markdown e /v2/ingest accettano gli stessi 22 formati di documento tra loro (immagini, SVG e i formati Apple/OTS sono solo per PDF), e /v2/ingest accetta inoltre sorgenti web — un elenco di URL, una sitemap o un crawl — non solo file.
| Categoria | Estensioni | anything-to-pdf | anything-to-markdown | /v2/ingest |
|---|---|---|---|---|
.pdf |
✓ | ✓ | ✓ | |
| Word | .docx, .doc |
✓ | ✓ | ✓ |
| Excel | .xlsx, .xls |
✓ | ✓ | ✓ |
| PowerPoint | .pptx, .ppt |
✓ | ✓ | ✓ |
| CSV | .csv |
✓ | ✓ | ✓ |
| Testo formattato | .rtf |
✓ | ✓ | ✓ |
| OpenDocument | .odt, .ods, .odp |
✓ | ✓ | ✓ |
| Modello ODF | .ots |
✓ | — | — |
| Apple iWork | .pages, .numbers |
✓ | — | — |
| Web / markup | .html, .htm, .xhtml |
✓ | ✓ | ✓ |
| Markdown / testo | .md, .markdown, .mdown, .mkd, .txt, .text |
✓ | ✓ | ✓ |
| E-book | .epub |
✓ | ✓ | ✓ |
| Immagini | .png, .jpg, .jpeg, .gif, .bmp, .tiff, .tif, .webp, .heic, .heif |
✓ | — | — |
| Vettoriale | .svg |
✓ | — | — |
Un ✓ significa che l'endpoint accetta quel formato come upload di file; un — significa che non lo accetta. Immagini e SVG vengono convertiti in PDF qui ma sono respinti dagli endpoint con output Markdown (l'OCR delle immagini è una pipeline separata). I limiti di dimensione per file dipendono dal piano (Free: 5 MB) su tutti e tre gli endpoint.
Esempi di codice#
curl (chiave privata)#
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 (chiave privata)#
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 (chiave privata)#
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 (chiave privata)#
$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"];
Risposte di errore#
| Status | Condizione |
|---|---|
400 Bad Request |
Tipo di file non supportato, file vuoto o documento corrotto/illeggibile (es. un'immagine non valida o un EPUB malformato). |
400 Bad Request |
I byte del file non corrispondono all'estensione dichiarata (mancata corrispondenza dei magic byte). |
400 Bad Request |
JSON pdf_options non valido. |
401 Unauthorized |
Chiave API / token JWT mancante o non valido. |
402 Payment Required |
Limite mensile di conversioni o limite di archiviazione raggiunto. |
403 Forbidden |
/v1/convert/anything-to-pdf non è tra gli endpoint consentiti della chiave API. |
413 Payload Too Large |
Il caricamento supera il limite di dimensione per file del tuo piano. |
500 Internal Server Error |
Conversione fallita in modo imprevisto. |
Il riferimento completo dei codici di stato è nella guida ai codici di errore.
Limiti#
| Limite | Valore |
|---|---|
| Dimensione massima di caricamento | Dipende dal piano (Free: 5 MB) |
| Conversioni mensili | Dipende dal piano (Free: 100) |
| Conservazione dei file | Dipende dal piano (Free: 1 ora) |
| Opzioni di geometria della pagina | Non applicate su questo endpoint (solo grayscale) |
| Formati di input supportati | Vedi la tabella dei formati di input supportati |
Domande frequenti#
Come converto qualsiasi file in PDF con un'API?#
Invia una richiesta POST a /v1/convert/anything-to-pdf come multipart/form-data con il tuo file nel campo file e la tua chiave nell'header X-API-Key. L'endpoint rileva automaticamente il formato, lo renderizza in PDF e restituisce JSON con un presigned_url al .pdf finito. Non devi indicare il tipo di input — lo decidono l'estensione e i magic byte.
Quali formati di file posso convertire in PDF?#
Word (.docx, .doc), Excel (.xlsx, .xls), PowerPoint (.pptx, .ppt), OpenDocument (.odt, .ods, .odp, .ots), Apple Pages e Numbers, RTF, CSV, HTML/XHTML, Markdown, testo semplice, EPUB, immagini (.png, .jpg, .jpeg, .gif, .bmp, .tiff, .webp, .heic) e SVG. Un PDF esistente viene accettato e restituito così com'è. L'elenco completo con le note per singolo formato è nella tabella dei formati di input supportati.
Posso convertire Word, Excel o PowerPoint in PDF tramite l'API?#
Sì. I documenti Office — moderni (.docx, .xlsx, .pptx) e legacy (.doc, .xls, .ppt) — vengono renderizzati con LibreOffice, preservando stili, tabelle e layout, con una pagina per diapositiva per le presentazioni. Carichi il file e ricevi il PDF.
Come converto un'immagine come PNG, JPEG o HEIC in PDF?#
Caricala sullo stesso endpoint. Ogni immagine diventa un PDF di una singola pagina, con la trasparenza appiattita su uno sfondo bianco; sono supportate anche le foto .heic/.heif dell'iPhone e i vettori .svg. Per un'immagine multi-fotogramma (GIF animata o TIFF multipagina), viene usato il primo fotogramma.
Posso impostare una dimensione pagina personalizzata, margini o intestazioni sul PDF?#
Non su questo endpoint — viene rispettato solo grayscale, perché il formato di input è rilevato automaticamente e ogni tipo usa un motore di rendering diverso. Per il controllo completo della pagina (dimensione pagina, margini, orientamento, intestazioni, piè di pagina), invia HTML o Markdown agli endpoint html-to-pdf o markdown-to-pdf, che accettano lo schema pdf_options completo.
In cosa è diverso dagli endpoint doc-to-pdf o html-to-pdf?#
Gli endpoint specifici per formato accettano ciascuno un tipo di input ed espongono le opzioni complete di geometria della pagina; anything-to-pdf li accetta tutti dietro una singola chiamata e rileva automaticamente il formato, il che è ideale quando l'input potrebbe essere qualsiasi cosa. Usa un endpoint specifico quando conosci il tipo e vuoi il controllo della pagina; usa questo quando vuoi un unico percorso di caricamento per molti formati.