---
seo_title: ODT zu PDF API: OpenDocument Text konvertieren | EnConvert
meta_desc: Konvertieren Sie OpenDocument-Text (.odt) aus LibreOffice oder OpenOffice Writer mit POST /v1/convert/odt-to-pdf zu PDF. Liefert PDF-Bytes oder Presigned-URL.
keywords: odt in pdf umwandeln api, odt zu pdf api, libreoffice writer pdf api, opendocument text in pdf konvertieren, odt in pdf rest api, odt datei in pdf umwandeln python, odt zu pdf curl, pdf konvertierung api
---

# ODT-zu-PDF-API

Die ODT-zu-PDF-API konvertiert OpenDocument-Text-Dateien (`.odt`, das native Textverarbeitungsformat von LibreOffice und OpenOffice Writer) über den Endpunkt `POST /v1/convert/odt-to-pdf` zu PDF. Laden Sie eine `.odt`-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, sodass Formatierung, Schriftarten und Layout des Dokuments in der PDF-Ausgabe erhalten bleiben.

---

## Endpunkt

```
POST /v1/convert/odt-to-pdf
```

**Content-Type:** `multipart/form-data`

**Akzeptierte Eingabe:** `.odt`-Dateien

**Ausgabeformat:** `.pdf` (`application/pdf`)

---

## Authentifizierung

Erfordert entweder einen privaten API-Schlüssel oder ein JWT-Token aus 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 `.odt`-Datei. |
| `output_filename` | `string` | Nein | Eingabedateiname | Benutzerdefinierter Ausgabedateiname. Die Endung `.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 Dokumentkonvertern auf LibreOffice-Basis bestimmen die Einstellungen des Dokuments selbst das Seitenlayout (Größe, Ränder, Ausrichtung). Das einzige wirksame `pdf_options`-Feld ist:

| Parameter | Typ | Standard | Beschreibung |
|-----------|------|---------|-------------|
| `grayscale` | `boolean` | `false` | Konvertiert das Ausgabe-PDF per Ghostscript-Nachbearbeitung in Graustufen. |

<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 Hochladen an.
</div>

---

## Konvertierungsdetails

- Verwendet **LibreOffice** (über unoserver) für serverseitiges Dokument-Rendering
- Formatierung, Schriftarten, 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

### Direkter Download (`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}/odt-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.odt", "rb") as f:
    response = requests.post(
        "https://api.enconvert.com/v1/convert/odt-to-pdf",
        headers={"X-API-Key": "sk_your_private_key"},
        files={"file": ("document.odt", 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.odt"));

const response = await fetch("https://api.enconvert.com/v1/convert/odt-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/odt-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.odt")]
]);
$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.odt")
file, _ := os.Open("document.odt")
io.Copy(part, file)
writer.Close()

req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/odt-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.odt", "rb") as f:
    response = requests.post(
        "https://api.enconvert.com/v1/convert/odt-to-pdf",
        headers={"X-API-Key": "sk_your_private_key"},
        files={"file": ("document.odt", f)},
        data={"pdf_options": json.dumps({"grayscale": True})}
    )
```

---

## Fehlerantworten

| Status | Bedingung |
|--------|-----------|
| `400 Bad Request` | Datei ist keine `.odt`-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` | Konvertierung hat das Zeitlimit überschritten (120-Sekunden-Limit) |

---

## Limits

| Limit | Wert |
|-------|-------|
| Maximale Dateigröße | Planabhängig (Founding: 5 MB) |
| Konvertierungs-Timeout | 120 Sekunden |
| Monatliche Konvertierungen | Planabhängig |

## Häufig gestellte Fragen

### Wie konvertiere ich eine ODT-Datei mit einer REST-API zu PDF?

Senden Sie einen `POST`-Request an `/v1/convert/odt-to-pdf` mit der `.odt`-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 LibreOffice- oder OpenOffice-Writer-Dokumente mit dieser API zu PDF konvertieren?

Ja. Der Endpunkt akzeptiert `.odt`-Dateien, das von LibreOffice und OpenOffice Writer verwendete OpenDocument-Text-Format, und rendert sie serverseitig mit LibreOffice, sodass die Ausgabe dem Druckergebnis des Dokuments aus LibreOffice entspricht.

### Kann ich eine Download-URL statt der rohen PDF-Bytes erhalten?

Ja. Setzen Sie `direct_download=false`, und die API gibt JSON-Metadaten zurück, darunter eine `presigned_url`, den Ausgabe-`filename`, `file_size` und `conversion_time_seconds`.

### Kann ich Seitengröße, Ränder oder Ausrichtung der PDF-Ausgabe ändern?

Nein. Das Seitenlayout stammt aus den Einstellungen des ODT-Dokuments selbst; das einzige unterstützte `pdf_options`-Feld ist `grayscale`. Um das Layout zu ändern, passen Sie das Quelldokument vor dem Hochladen an.

### Warum gibt der odt-to-pdf-Endpunkt 400 Bad Request zurück?

Ein `400 Bad Request` wird zurückgegeben, wenn der Upload keine `.odt`-Datei ist, wenn das Dokument beschädigt oder nicht unterstützt ist oder wenn der `pdf_options`-Wert kein gültiges JSON ist.
