API HTML in PDF#
L'API HTML in PDF converte un file HTML caricato in un PDF di alta qualità usando il rendering di WeasyPrint. Invia un file .html o .htm a POST /v1/convert/html-to-pdf e il PDF renderizzato viene restituito in modo sincrono, come byte grezzi per impostazione predefinita, oppure come metadati JSON con un URL di download prefirmato quando direct_download=false. Formato pagina, margini, orientamento, header, footer e output in scala di grigi si controllano tutti tramite pdf_options.
Endpoint#
POST /v1/convert/html-to-pdf
Content-Type: multipart/form-data
Input accettato: file .html o .htm (codificati in UTF-8)
Formato di output: .pdf (application/pdf)
Autenticazione#
Richiede una chiave API privata oppure un token JWT ottenuto da una chiave pubblica.
X-API-Key: sk_your_private_key
Oppure:
Authorization: Bearer <jwt_token>
Parametri della richiesta#
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|---|---|---|---|---|
file |
file | Sì | -- | Il file .html o .htm da convertire. Deve essere codificato in UTF-8. |
output_filename |
string |
No | Nome file di input | Nome file di output personalizzato. L'estensione .pdf viene aggiunta automaticamente. |
direct_download |
boolean |
No | true |
Con true, restituisce i byte PDF grezzi. Con false, restituisce metadati JSON con un URL di download prefirmato. |
pdf_options |
string |
No | null |
Stringa JSON con le opzioni di configurazione del PDF. Vedi sotto. |
Opzioni PDF#
Passa una stringa JSON nel campo form pdf_options. Tutti i campi sono opzionali.
| Parametro | Tipo | Predefinito | Descrizione |
|---|---|---|---|
page_size |
string |
"A4" |
Formato pagina con nome. Ignorato quando sono impostati sia page_width sia page_height. |
page_width |
float |
null |
Larghezza pagina personalizzata in millimetri. page_width e page_height vanno impostati insieme. |
page_height |
float |
null |
Altezza pagina personalizzata in millimetri. |
orientation |
string |
"portrait" |
"portrait" oppure "landscape". |
margins |
object |
{"top": 10, "bottom": 10, "left": 10, "right": 10} |
Margini della pagina in millimetri. |
grayscale |
boolean |
false |
Converte l'output in scala di grigi tramite post-elaborazione Ghostscript. |
header |
object |
null |
Header di pagina. Formato: {"content": "<text>", "height": 15}. Supporta le variabili template. |
footer |
object |
null |
Footer di pagina. Stesso formato dell'header. |
Formati pagina supportati: A0, A1, A2, A3, A4, A5, A6, B0, B1, B2, B3, B4, B5, Letter, Legal, Tabloid, Ledger
Variabili template per header/footer: {{page}}, {{total_pages}}, {{date}}, {{title}}, {{url}}
Dettagli della conversione#
- Usa WeasyPrint per il rendering PDF basato su CSS
- Le
pdf_optionsvengono tradotte in regole CSS@pageiniettate nell'HTML prima del rendering - WeasyPrint rispetta gli stili CSS propri del documento oltre alle regole di pagina iniettate
- Tutto il rendering è sincrono e lato server
Risposta#
Download diretto (direct_download=true, predefinito)#
HTTP 200 OK
Content-Type: application/pdf
Content-Disposition: inline; filename="document_20260405_123456789.pdf"
Restituisce i byte PDF grezzi.
Risposta con metadati (direct_download=false)#
{
"presigned_url": "https://spaces.example.com/...",
"object_key": "env/files/{project_id}/html-to-pdf/document_20260405_123456789.pdf",
"filename": "document_20260405_123456789.pdf",
"file_size": 45678,
"conversion_time_seconds": 1.2
}
Esempi di codice#
Python#
import requests
import json
with open("report.html", "rb") as f:
response = requests.post(
"https://api.enconvert.com/v1/convert/html-to-pdf",
headers={"X-API-Key": "sk_your_private_key"},
files={"file": ("report.html", f, "text/html")},
data={
"pdf_options": json.dumps({
"page_size": "A4",
"orientation": "portrait",
"margins": {"top": 20, "bottom": 20, "left": 15, "right": 15}
})
}
)
with open("report.pdf", "wb") as out:
out.write(response.content)
Node.js#
const form = new FormData();
form.append("file", fs.createReadStream("report.html"));
form.append("pdf_options", JSON.stringify({
page_size: "A4",
orientation: "portrait",
margins: { top: 20, bottom: 20, left: 15, right: 15 }
}));
const response = await fetch("https://api.enconvert.com/v1/convert/html-to-pdf", {
method: "POST",
headers: { "X-API-Key": "sk_your_private_key" },
body: form
});
fs.writeFileSync("report.pdf", Buffer.from(await response.arrayBuffer()));
PHP#
$ch = curl_init("https://api.enconvert.com/v1/convert/html-to-pdf");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["X-API-Key: sk_your_private_key"],
CURLOPT_POSTFIELDS => [
"file" => new CURLFile("report.html", "text/html"),
"pdf_options" => json_encode([
"page_size" => "A4",
"margins" => ["top" => 20, "bottom" => 20, "left" => 15, "right" => 15]
])
]
]);
$pdf = curl_exec($ch);
curl_close($ch);
file_put_contents("report.pdf", $pdf);
Go#
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "report.html")
file, _ := os.Open("report.html")
io.Copy(part, file)
writer.WriteField("pdf_options", `{"page_size":"A4","margins":{"top":20,"bottom":20,"left":15,"right":15}}`)
writer.Close()
req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/html-to-pdf", body)
req.Header.Set("Content-Type", writer.FormDataContentType())
req.Header.Set("X-API-Key", "sk_your_private_key")
resp, _ := http.DefaultClient.Do(req)
Risposte di errore#
| Stato | Condizione |
|---|---|
400 Bad Request |
Il file non è un file .html o .htm |
400 Bad Request |
Codifica HTML non valida (attesa UTF-8) |
400 Bad Request |
Conversione da HTML a PDF non riuscita |
400 Bad Request |
JSON di pdf_options non valido |
401 Unauthorized |
Chiave API / token JWT mancante o non valido |
402 Payment Required |
Quota mensile di ops esaurita |
402 Payment Required |
Limite di archiviazione raggiunto |
413 Payload Too Large |
Il file supera la dimensione massima prevista dal piano |
Limiti#
| Limite | Valore |
|---|---|
| Dimensione massima del file | Dipende dal piano (Founding: 5 MB) |
| Codifica di input | Solo UTF-8 |
| Contenuto header/footer | Massimo 2000 caratteri |
| Intervallo di scala | 0.1 -- 2.0 |
| Conversioni mensili | Dipende dal piano |
Domande frequenti#
Come convertire HTML in PDF con un'API REST?#
Invia una richiesta multipart/form-data a POST /v1/convert/html-to-pdf con il file .html o .htm nel campo file, autenticandoti con X-API-Key o un JWT Bearer. Per impostazione predefinita la risposta contiene i byte PDF grezzi con Content-Type: application/pdf.
Posso impostare formato pagina, margini o orientamento personalizzati per il PDF?#
Sì. Passa una stringa JSON nel campo form pdf_options con page_size (es. A4, Letter, Legal), margins in millimetri e orientation (portrait o landscape). Per dimensioni non standard, imposta page_width e page_height insieme in millimetri.
Come aggiungo numeri di pagina, header o footer al PDF generato?#
Imposta header o footer in pdf_options come {"content": "<text>", "height": 15}. Il contenuto supporta le variabili template {{page}}, {{total_pages}}, {{date}}, {{title}} e {{url}}, ed è limitato a 2000 caratteri.
Perché immagini, font o fogli di stile mancano dal mio PDF?#
Le risorse esterne referenziate tramite URL nell'HTML potrebbero non essere risolte durante il rendering lato server. Usa CSS inline e immagini codificate in base64, oppure assicurati che tutte le risorse referenziate siano accessibili pubblicamente.
Posso ottenere un URL di download invece dei byte PDF grezzi?#
Sì. Imposta direct_download=false e l'endpoint restituisce metadati JSON che includono presigned_url, object_key, filename, file_size e conversion_time_seconds al posto del corpo PDF.