---
seo_title: API ODP in PDF: converti presentazioni OpenDocument | EnConvert
meta_desc: Converti file OpenDocument Presentation (.odp) di LibreOffice o OpenOffice Impress in PDF con POST /v1/convert/odp-to-pdf. Byte PDF o URL prefirmato.
keywords: api odp in pdf, convertire odp in pdf api, odp in pdf api rest, libreoffice impress in pdf api, convertire odp in pdf python, openoffice odp in pdf api, presentazione odp in pdf api, odp in pdf curl
---

# API ODP in PDF

L'API ODP in PDF converte file OpenDocument Presentation (`.odp`, il formato di diapositive nativo di LibreOffice e OpenOffice Impress) in PDF tramite l'endpoint `POST /v1/convert/odp-to-pdf`. Carica un file `.odp` come `multipart/form-data` e ricevi in risposta i byte PDF grezzi, oppure imposta `direct_download=false` per ottenere metadati JSON con un URL di download prefirmato. Il rendering è gestito lato server da LibreOffice, quindi formattazione, font e layout della presentazione vengono preservati nell'output PDF.

---

## Endpoint

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

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

**Input accettato:** file `.odp`

**Formato di output:** `.pdf` (`application/pdf`)

---

## Autenticazione

Richiede una chiave API privata oppure un token JWT ottenuto da una chiave pubblica.

```
X-API-Key: sk_your_private_key
```

Oppure:

```
Authorization: Bearer <jwt_token>
```

---

## Parametri della richiesta

| Parametro | Tipo | Obbligatorio | Default | Descrizione |
|-----------|------|----------|---------|-------------|
| `file` | file | Sì | -- | Il file `.odp` da convertire. |
| `output_filename` | `string` | No | Nome del file di input | Nome file di output personalizzato. L'estensione `.pdf` viene aggiunta automaticamente. |
| `direct_download` | `boolean` | No | `true` | Se `true`, restituisce i byte PDF grezzi. Se `false`, restituisce metadati JSON con un URL di download prefirmato. |
| `pdf_options` | `string` | No | `null` | Stringa JSON. Per questo endpoint è supportata solo l'opzione `grayscale` (vedi sotto). |

### Opzioni PDF

Per i convertitori di documenti basati su LibreOffice, il layout di pagina (dimensioni, margini, orientamento) è determinato dalle impostazioni del documento stesso. L'unico campo di `pdf_options` che si applica è:

| Parametro | Tipo | Default | Descrizione |
|-----------|------|---------|-------------|
| `grayscale` | `boolean` | `false` | Converte il PDF di output in scala di grigi tramite post-elaborazione con Ghostscript. |

<div class="alert alert-info">
<strong>Nota:</strong> Dimensioni di pagina, margini, orientamento, scala, intestazioni e piè di pagina di <code>pdf_options</code> non si applicano a questo endpoint. L'output PDF preserva la formattazione definita nel documento originale. Per cambiare il layout di pagina, modifica il documento sorgente prima del caricamento.
</div>

---

## Dettagli della conversione

- Usa **LibreOffice** (tramite unoserver) per il rendering dei documenti lato server
- Formattazione, font, layout di pagina e contenuti multimediali incorporati del documento vengono preservati
- Timeout di conversione: 120 secondi
- L'output riproduce fedelmente il documento come apparirebbe stampandolo da LibreOffice

---

## Risposta

### Download diretto (`direct_download=true`, predefinito)

```
HTTP 200 OK
Content-Type: application/pdf
Content-Disposition: inline; filename="document_20260405_123456789.pdf"
```

Restituisce i byte PDF grezzi.

### Risposta con metadati (`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
}
```

---

## Esempi di codice

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

### Con output in scala di grigi

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

---

## Risposte di errore

| Stato | Condizione |
|--------|-----------|
| `400 Bad Request` | Il file non è un file `.odp` |
| `400 Bad Request` | Conversione del documento non riuscita (file corrotto o non supportato) |
| `400 Bad Request` | JSON di `pdf_options` non valido |
| `401 Unauthorized` | Chiave API o token JWT mancante o non valido |
| `402 Payment Required` | Quota mensile di ops esaurita |
| `402 Payment Required` | Limite di archiviazione raggiunto |
| `413 Payload Too Large` | Il file supera la dimensione massima prevista dal piano |
| `500 Internal Server Error` | Timeout della conversione (limite di 120 secondi) |

---

## Limiti

| Limite | Valore |
|-------|-------|
| Dimensione massima del file | Dipende dal piano (Founding: 5 MB) |
| Timeout di conversione | 120 secondi |
| Conversioni mensili | Dipende dal piano |

## Domande frequenti

### Come converto una presentazione ODP in PDF con una API REST?

Invia una richiesta `POST` a `/v1/convert/odp-to-pdf` con il file `.odp` in un body `multipart/form-data`, autenticandoti con un header `X-API-Key` o un JWT `Authorization: Bearer`. Di default la risposta contiene i byte del PDF convertito.

### Posso convertire presentazioni LibreOffice o OpenOffice Impress in PDF con questa API?

Sì. L'endpoint accetta file `.odp`, il formato OpenDocument Presentation usato da LibreOffice e OpenOffice Impress, e li renderizza lato server con LibreOffice, quindi l'output corrisponde a come la presentazione verrebbe stampata da LibreOffice.

### Posso ottenere un URL di download invece dei byte PDF grezzi?

Sì. Imposta `direct_download=false` e l'API restituisce metadati JSON che includono `presigned_url`, il `filename` di output, `file_size` e `conversion_time_seconds`.

### Posso cambiare dimensioni di pagina, margini o orientamento del PDF di output?

No. Il layout di pagina deriva dalle impostazioni del documento ODP stesso; l'unico campo `pdf_options` supportato è `grayscale`. Per cambiare il layout, modifica il documento sorgente prima del caricamento.

### Perché l'endpoint odp-to-pdf restituisce 400 Bad Request?

Un `400 Bad Request` viene restituito quando il file caricato non è un `.odp`, quando il documento è corrotto o non supportato, o quando il valore di `pdf_options` non è JSON valido.
