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.
Hinweis: Seitengröße, Ränder, Ausrichtung, Skalierung, Kopf- und Fußzeilen aus 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.