---
seo_title: Numbers-zu-PDF-API: Apple Numbers umwandeln | EnConvert
meta_desc: Apple Numbers (.numbers) per POST /v1/convert/numbers-to-pdf in PDF umwandeln. Multipart-Upload, LibreOffice-Rendering, PDF-Bytes oder Presigned URL.
keywords: numbers in pdf umwandeln api, apple numbers zu pdf api, numbers datei in pdf konvertieren, .numbers in pdf umwandeln api, iwork numbers zu pdf api, numbers tabelle zu pdf rest api, apple numbers zu pdf python, numbers to pdf api curl
---

# 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. |

<div class="alert alert-info">
<strong>Hinweis:</strong> Seitengröße, Ränder, Ausrichtung, Skalierung, Kopf- und Fußzeilen aus <code>pdf_options</code> 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.
</div>

---

## 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`)

```json
{
    "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

```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

```javascript
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

```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

```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

```python
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.
