---
seo_title: ODP zu PDF API: Impress-Präsentationen konvertieren | EnConvert
meta_desc: Konvertieren Sie OpenDocument-Präsentationen (.odp) aus LibreOffice oder OpenOffice Impress mit POST /v1/convert/odp-to-pdf zu PDF. PDF-Bytes oder Presigned-URL.
keywords: odp in pdf umwandeln api, odp zu pdf api, libreoffice impress pdf api, präsentation in pdf konvertieren api, odp in pdf rest api, odp datei in pdf python, odp zu pdf curl, opendocument präsentation pdf api
---

# ODP-zu-PDF-API

Die ODP-zu-PDF-API konvertiert OpenDocument-Präsentationsdateien (`.odp`, das native Folienformat von LibreOffice und OpenOffice Impress) über den Endpunkt `POST /v1/convert/odp-to-pdf` zu PDF. Laden Sie eine `.odp`-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 der Präsentation in der PDF-Ausgabe erhalten bleiben.

---

## Endpunkt

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

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

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

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

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

---

## Fehlerantworten

| Status | Bedingung |
|--------|-----------|
| `400 Bad Request` | Datei ist keine `.odp`-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 ODP-Präsentation mit einer REST-API zu PDF?

Senden Sie einen `POST`-Request an `/v1/convert/odp-to-pdf` mit der `.odp`-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-Impress-Präsentationen mit dieser API zu PDF konvertieren?

Ja. Der Endpunkt akzeptiert `.odp`-Dateien, das von LibreOffice und OpenOffice Impress verwendete OpenDocument-Präsentationsformat, und rendert sie serverseitig mit LibreOffice, sodass die Ausgabe dem Druckergebnis der Präsentation 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 ODP-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 odp-to-pdf-Endpunkt 400 Bad Request zurück?

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