---
seo_title: API ODS in PDF: converti fogli di calcolo ODS | EnConvert
meta_desc: Converti file OpenDocument Spreadsheet (.ods) di LibreOffice o OpenOffice Calc in PDF con POST /v1/convert/ods-to-pdf. Restituisce byte PDF o un URL prefirmato.
keywords: api ods in pdf, convertire ods in pdf api, ods in pdf api rest, libreoffice calc in pdf api, convertire ods in pdf python, openoffice ods in pdf api, foglio di calcolo ods in pdf api, ods in pdf curl
---

# API ODS in PDF

L'API ODS in PDF converte file OpenDocument Spreadsheet (`.ods`, il formato di foglio di calcolo nativo di LibreOffice e OpenOffice Calc) in PDF tramite l'endpoint `POST /v1/convert/ods-to-pdf`. Carica un file `.ods` 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 del foglio di calcolo vengono preservati nell'output PDF.

---

## Endpoint

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

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

**Input accettato:** file `.ods`

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

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

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

---

## Risposte di errore

| Stato | Condizione |
|--------|-----------|
| `400 Bad Request` | Il file non è un file `.ods` |
| `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 un foglio di calcolo ODS in PDF con una API REST?

Invia una richiesta `POST` a `/v1/convert/ods-to-pdf` con il file `.ods` 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 fogli di calcolo LibreOffice o OpenOffice Calc in PDF con questa API?

Sì. L'endpoint accetta file `.ods`, il formato OpenDocument Spreadsheet usato da LibreOffice e OpenOffice Calc, e li renderizza lato server con LibreOffice, quindi l'output corrisponde a come il foglio di calcolo verrebbe stampato 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 ODS stesso; l'unico campo `pdf_options` supportato è `grayscale`. Per cambiare il layout, modifica il documento sorgente prima del caricamento.

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

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