---
seo_title: Excel-zu-PDF-API: XLSX & XLS in PDF umwandeln | EnConvert
meta_desc: Excel per REST API in PDF umwandeln. POST /v1/convert/excel-to-pdf konvertiert .xlsx und .xls mit LibreOffice zu originalgetreuen PDFs. Das Layout bleibt erhalten.
keywords: excel in pdf umwandeln api, xlsx in pdf umwandeln api, xls zu pdf api, tabelle in pdf konvertieren api, excel zu pdf rest api, xlsx to pdf api, xlsx pdf api python, excel pdf api node js
---

# Excel-zu-PDF-API

Die Excel-zu-PDF-API konvertiert Microsoft-Excel-Tabellen (`.xlsx`, `.xls`) über `POST /v1/convert/excel-to-pdf` in PDF und nutzt dafür die originalgetreue Rendering-Engine von LibreOffice. Formatierung, Schriften und Layout der Tabelle bleiben in der PDF-Ausgabe erhalten. Die Antwort besteht standardmäßig aus rohen PDF-Bytes oder, bei `direct_download=false`, aus JSON-Metadaten mit einer vorsignierten Download-URL.

---

## Endpunkt

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

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

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

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

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

---

## Fehlerantworten

| Status | Bedingung |
|--------|-----------|
| `400 Bad Request` | Datei ist keine `.xlsx or .xls`-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 XLSX-Tabelle per REST API in ein PDF?

Senden Sie eine `multipart/form-data`-Anfrage an `POST /v1/convert/excel-to-pdf` mit Ihrer `.xlsx`- oder `.xls`-Datei im Feld `file`, authentifiziert über `X-API-Key` oder ein Bearer-JWT. Standardmäßig besteht die Antwort aus den rohen PDF-Bytes mit `Content-Type: application/pdf`.

### Bleibt die Tabellenformatierung bei der Excel-zu-PDF-Konvertierung erhalten?

Ja. Der Endpunkt verwendet LibreOffice (über unoserver) für serverseitiges Rendering, daher bleiben Formatierung, Schriften, Seitenlayout und eingebettete Medien der Tabelle erhalten. Die Ausgabe gibt das Dokument so wieder, wie es beim Druck aus LibreOffice erscheinen würde.

### Kann ich Seitengröße, Ränder oder Ausrichtung beim Konvertieren von Excel zu PDF festlegen?

Nein. Das Seitenlayout wird durch die Einstellungen der Tabelle selbst bestimmt, und das einzige auf diesem Endpunkt unterstützte `pdf_options`-Feld ist `grayscale`. Um das Seitenlayout zu ändern, passen Sie die Quelldatei vor dem Upload an.

### Warum ist meine Excel-zu-PDF-Konvertierung fehlgeschlagen oder abgelaufen?

Ein `400 Bad Request` bedeutet, dass die Datei nicht `.xlsx` oder `.xls` ist, beschädigt oder nicht unterstützt wird oder das `pdf_options`-JSON ungültig ist. Ein `500 Internal Server Error` bedeutet, dass die Konvertierung das 120-Sekunden-Timeout überschritten hat.

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

Ja. Setzen Sie `direct_download=false`, dann gibt der Endpunkt JSON-Metadaten zurück, darunter `presigned_url`, `object_key`, `filename`, `file_size` und `conversion_time_seconds`.
