API Apple Numbers in PDF#

L'API Apple Numbers in PDF converte fogli di calcolo Apple iWork Numbers (.numbers) in PDF tramite l'endpoint POST /v1/convert/numbers-to-pdf. Carica un file .numbers come multipart/form-data e ricevi i byte PDF grezzi, oppure imposta direct_download=false per ottenere metadati JSON con un URL di download prefirmato. Il rendering è gestito lato server da LibreOffice, quindi formattazione, font e layout del foglio di calcolo vengono preservati nel PDF in output.


Endpoint#

POST /v1/convert/numbers-to-pdf

Content-Type: multipart/form-data

Input accettato: file .numbers

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 Default Descrizione
file file -- Il file .numbers da convertire.
output_filename string No Nome del 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. Per questo endpoint è supportata solo l'opzione grayscale (vedi sotto).

Opzioni PDF#

Per i convertitori di documenti basati su LibreOffice, il layout di pagina (formato, margini, orientamento) è determinato dalle impostazioni del documento stesso. L'unico campo pdf_options che si applica è:

Parametro Tipo Default Descrizione
grayscale boolean false Converte il PDF in output in scala di grigi tramite post-elaborazione con Ghostscript.
Nota: formato pagina, margini, orientamento, scala, header e footer di pdf_options non si applicano a questo endpoint. Il PDF in output preserva la formattazione definita nel documento originale. Per cambiare il layout di pagina, modifica il documento sorgente prima del caricamento.

Dettagli della conversione#

  • Usa LibreOffice (tramite unoserver) per il rendering dei documenti lato server
  • Formattazione, font, layout di pagina e media incorporati del documento vengono preservati
  • Timeout di conversione: 120 secondi
  • L'output riproduce fedelmente il documento come apparirebbe stampato da LibreOffice

Risposta#

Download diretto (direct_download=true, default)#

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}/numbers-to-pdf/document_20260405_123456789.pdf",
    "filename": "document_20260405_123456789.pdf",
    "file_size": 67890,
    "conversion_time_seconds": 3.5
}

Esempi di codice#

Python#

import requests

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

with open("output.pdf", "wb") as out:
    out.write(response.content)

Node.js#

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

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

fs.writeFileSync("output.pdf", Buffer.from(await response.arrayBuffer()));

PHP#

$ch = curl_init("https://api.enconvert.com/v1/convert/numbers-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("document.numbers")]
]);
$pdf = curl_exec($ch);
curl_close($ch);
file_put_contents("output.pdf", $pdf);

Go#

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

req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/numbers-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)

Con output in scala di grigi#

import requests
import json

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

Risposte di errore#

Stato Condizione
400 Bad Request Il file non è un file .numbers
400 Bad Request Conversione del documento non riuscita (file corrotto o non supportato)
400 Bad Request JSON 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 storage raggiunto
413 Payload Too Large Il file supera la dimensione massima prevista dal piano
500 Internal Server Error Timeout della conversione (limite di 120 secondi)

Limiti#

Limite Valore
Dimensione massima del file Dipende dal piano (Founding: 5 MB)
Timeout di conversione 120 secondi
Conversioni mensili Dipende dal piano

Domande frequenti#

Come converto un foglio di calcolo Apple Numbers in PDF con un'API REST?#

Invia una richiesta POST a /v1/convert/numbers-to-pdf con il file .numbers in un body multipart/form-data, autenticandoti con un header X-API-Key o un JWT Authorization: Bearer. Per default la risposta contiene i byte del PDF convertito.

Posso ricevere un URL di download invece dei byte PDF grezzi?#

Sì. Imposta direct_download=false e l'API restituisce metadati JSON che includono presigned_url, il filename di output, file_size e conversion_time_seconds.

Posso controllare formato pagina, margini o orientamento nella conversione da Numbers a PDF?#

No. Il layout di pagina è preso dalle impostazioni del documento Numbers stesso; l'unico campo pdf_options supportato è grayscale. Per cambiare il layout, modifica il documento sorgente prima del caricamento.

Perché l'endpoint numbers-to-pdf restituisce 400 Bad Request?#

Un 400 Bad Request viene restituito quando l'upload non è un file .numbers, quando il documento è corrotto o non supportato, oppure quando il valore di pdf_options non è JSON valido.

Quali sono i limiti di dimensione file e timeout per la conversione da Numbers a PDF?#

La dimensione massima del file dipende dal piano (5 MB sul piano Founding) e ogni conversione ha un timeout di 120 secondi; una conversione andata in timeout restituisce 500 Internal Server Error.