Apple-Numbers-zu-PDF-API#
Die Apple-Numbers-zu-PDF-API konvertiert Apple-iWork-Numbers-Tabellen (.numbers) über den Endpunkt POST /v1/convert/numbers-to-pdf in PDF. Laden Sie eine .numbers-Datei als multipart/form-data hoch und erhalten Sie rohe PDF-Bytes zurück, oder setzen Sie direct_download=false, um JSON-Metadaten mit einer vorsignierten Download-URL zu erhalten. Das Rendering übernimmt serverseitig LibreOffice, daher bleiben Formatierung, Schriften und Layout der Tabelle in der PDF-Ausgabe erhalten.
Endpunkt#
POST /v1/convert/numbers-to-pdf
Content-Type: multipart/form-data
Akzeptierte Eingabe: .numbers-Dateien
Ausgabeformat: .pdf (application/pdf)
Authentifizierung#
Erfordert entweder einen privaten API-Schlüssel oder ein JWT-Token von einem öffentlichen Schlüssel.
X-API-Key: sk_your_private_key
Oder:
Authorization: Bearer <jwt_token>
Request-Parameter#
| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
file |
file | Ja | -- | Die zu konvertierende .numbers-Datei. |
output_filename |
string |
Nein | Name der Eingabedatei | Benutzerdefinierter Ausgabedateiname. Die Erweiterung .pdf wird automatisch angehängt. |
direct_download |
boolean |
Nein | true |
Bei true werden rohe PDF-Bytes zurückgegeben. Bei false werden JSON-Metadaten mit einer vorsignierten Download-URL zurückgegeben. |
pdf_options |
string |
Nein | null |
JSON-String. Für diesen Endpunkt wird nur die Option grayscale unterstützt (siehe unten). |
PDF-Optionen#
Bei den von LibreOffice betriebenen Dokumentkonvertern wird das Seitenlayout (Größe, Ränder, Ausrichtung) durch die Einstellungen des Dokuments selbst bestimmt. Das einzige anwendbare pdf_options-Feld ist:
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
grayscale |
boolean |
false |
Wandelt das Ausgabe-PDF per Ghostscript-Nachbearbeitung in Graustufen um. |
pdf_options gelten für diesen Endpunkt nicht. Die PDF-Ausgabe behält die im Originaldokument definierte Formatierung bei. Um das Seitenlayout zu ändern, passen Sie das Quelldokument vor dem Upload an.
Konvertierungsdetails#
- Verwendet LibreOffice (über unoserver) für serverseitiges Dokumenten-Rendering
- Formatierung, Schriften, Seitenlayout und eingebettete Medien des Dokuments bleiben erhalten
- Konvertierungs-Timeout: 120 Sekunden
- Die Ausgabe gibt das Dokument originalgetreu so wieder, wie es beim Druck aus LibreOffice erscheinen würde
Antwort#
Direktdownload (direct_download=true, Standard)#
HTTP 200 OK
Content-Type: application/pdf
Content-Disposition: inline; filename="document_20260405_123456789.pdf"
Gibt rohe PDF-Bytes zurück.
Metadaten-Antwort (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
}
Codebeispiele#
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)
Mit Graustufen-Ausgabe#
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})}
)
Fehlerantworten#
| Status | Bedingung |
|---|---|
400 Bad Request |
Datei ist keine .numbers-Datei |
400 Bad Request |
Dokumentkonvertierung fehlgeschlagen (beschädigte oder nicht unterstützte Datei) |
400 Bad Request |
Ungültiges pdf_options-JSON |
401 Unauthorized |
Fehlender oder ungültiger API-Schlüssel / JWT-Token |
402 Payment Required |
Monatliches Ops-Kontingent aufgebraucht |
402 Payment Required |
Speicherlimit erreicht |
413 Payload Too Large |
Datei überschreitet die maximale Dateigröße des Plans |
500 Internal Server Error |
Zeitüberschreitung bei der Konvertierung (120-Sekunden-Limit) |
Limits#
| Limit | Wert |
|---|---|
| Max. Dateigröße | Planabhängig (Founding: 5 MB) |
| Konvertierungs-Timeout | 120 Sekunden |
| Monatliche Konvertierungen | Planabhängig |
Häufig gestellte Fragen#
Wie konvertiere ich eine Apple-Numbers-Tabelle per REST API in ein PDF?#
Senden Sie eine POST-Anfrage an /v1/convert/numbers-to-pdf mit der .numbers-Datei in einem multipart/form-data-Body, authentifiziert über einen X-API-Key-Header oder ein Authorization: Bearer-JWT. Die Antwort enthält standardmäßig die konvertierten PDF-Bytes.
Kann ich statt der rohen PDF-Bytes eine Download-URL erhalten?#
Ja. Setzen Sie direct_download=false, dann gibt die API JSON-Metadaten zurück, darunter eine presigned_url sowie filename, file_size und conversion_time_seconds der Ausgabe.
Kann ich Seitengröße, Ränder oder Ausrichtung beim Konvertieren von Numbers zu PDF steuern?#
Nein. Das Seitenlayout stammt aus den Einstellungen des Numbers-Dokuments selbst; das einzige unterstützte pdf_options-Feld ist grayscale. Um das Layout zu ändern, passen Sie das Quelldokument vor dem Upload an.
Warum gibt der numbers-to-pdf-Endpunkt 400 Bad Request zurück?#
Ein 400 Bad Request wird zurückgegeben, wenn der Upload keine .numbers-Datei ist, wenn das Dokument beschädigt oder nicht unterstützt ist oder wenn der Wert von pdf_options kein gültiges JSON ist.
Welche Dateigrößen- und Timeout-Limits gelten für die Numbers-zu-PDF-Konvertierung?#
Die maximale Dateigröße ist planabhängig (5 MB im Founding-Plan) und jede Konvertierung hat ein 120-Sekunden-Timeout; eine abgelaufene Konvertierung gibt 500 Internal Server Error zurück.