---
seo_title: API Pages in PDF: converti Apple Pages in PDF | EnConvert
meta_desc: Converti documenti Apple Pages (.pages) in PDF con POST /v1/convert/pages-to-pdf. Upload multipart, rendering LibreOffice, byte PDF o URL prefirmato.
keywords: apple pages in pdf api, convertire file pages in pdf via api, pages in pdf api rest, conversione .pages in pdf api, iwork pages in pdf api, convertire apple pages in pdf python, pages in pdf api curl, libreoffice pages in pdf api
---

# API Apple Pages in PDF

L'API Apple Pages in PDF converte documenti Apple iWork Pages (`.pages`) in PDF tramite l'endpoint `POST /v1/convert/pages-to-pdf`. Carica un file `.pages` come `multipart/form-data` e ricevi 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 documento vengono preservati nel PDF in output.

---

## Endpoint

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

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

**Input accettato:** file `.pages`

**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 `.pages` 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` | Con `true`, restituisce i byte PDF grezzi. Con `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 (formato, margini, orientamento) è determinato dalle impostazioni del documento stesso. L'unico campo `pdf_options` che si applica è:

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

<div class="alert alert-info">
<strong>Nota:</strong> formato pagina, margini, orientamento, scala, header e footer di <code>pdf_options</code> non si applicano a questo endpoint. Il PDF in output 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 media incorporati del documento vengono preservati
- Timeout di conversione: 120 secondi
- L'output riproduce fedelmente il documento come apparirebbe stampato da LibreOffice

---

## Risposta

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

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

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

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

---

## Risposte di errore

| Stato | Condizione |
|--------|-----------|
| `400 Bad Request` | Il file non è un file `.pages` |
| `400 Bad Request` | Conversione del documento non riuscita (file corrotto o non supportato) |
| `400 Bad Request` | JSON `pdf_options` non valido |
| `401 Unauthorized` | Chiave API / token JWT mancante o non valido |
| `402 Payment Required` | Quota mensile di ops esaurita |
| `402 Payment Required` | Limite di storage 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 file Apple Pages in PDF con un'API REST?

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

### Posso ottenere un link 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 formato pagina, margini o orientamento del PDF in output?

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

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

Un `400 Bad Request` viene restituito quando l'upload non è un file `.pages`, quando il documento è corrotto o non supportato, oppure quando il valore di `pdf_options` non è JSON valido.

### Quali sono i limiti di dimensione file e timeout per la conversione da Pages a PDF?

La dimensione massima del file dipende dal piano (5 MB sul piano Founding) e ogni conversione ha un timeout di 120 secondi; una conversione andata in timeout restituisce `500 Internal Server Error`.
