---
seo_title: API Pages vers PDF : convertir Apple Pages en PDF | EnConvert
meta_desc: Convertissez des documents Apple Pages (.pages) en PDF avec POST /v1/convert/pages-to-pdf. Upload multipart, rendu LibreOffice, octets PDF ou URL présignée.
keywords: api pages vers pdf, apple pages en pdf api, convertir fichier pages en pdf, .pages en pdf api, iwork pages en pdf api, pages en pdf python, pages en pdf api curl, libreoffice pages en pdf api
---

# API Apple Pages vers PDF

L'API Apple Pages vers PDF convertit les documents Apple iWork Pages (`.pages`) en PDF via l'endpoint `POST /v1/convert/pages-to-pdf`. Envoyez un fichier `.pages` en `multipart/form-data` et recevez les octets bruts du PDF en retour, ou définissez `direct_download=false` pour obtenir des métadonnées JSON avec une URL de téléchargement présignée. Le rendu est assuré côté serveur par LibreOffice : la mise en forme, les polices et la mise en page propres au document sont préservées dans le PDF de sortie.

---

## Endpoint

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

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

**Entrée acceptée :** fichiers `.pages`

**Format de sortie :** `.pdf` (`application/pdf`)

---

## Authentification

Nécessite soit une clé API privée, soit un token JWT issu d'une clé publique.

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

Ou :

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

---

## Paramètres de requête

| Paramètre | Type | Requis | Défaut | Description |
|-----------|------|----------|---------|-------------|
| `file` | file | Oui | -- | Le fichier `.pages` à convertir. |
| `output_filename` | `string` | Non | Nom du fichier d'entrée | Nom de fichier de sortie personnalisé. L'extension `.pdf` est ajoutée automatiquement. |
| `direct_download` | `boolean` | Non | `true` | Si `true`, renvoie les octets bruts du PDF. Si `false`, renvoie des métadonnées JSON avec une URL de téléchargement présignée. |
| `pdf_options` | `string` | Non | `null` | Chaîne JSON. Seule l'option `grayscale` est prise en charge sur cet endpoint (voir ci-dessous). |

### Options PDF

Pour les convertisseurs de documents basés sur LibreOffice, la mise en page (taille, marges, orientation) est déterminée par les réglages du document lui-même. Le seul champ `pdf_options` pris en compte est :

| Paramètre | Type | Défaut | Description |
|-----------|------|---------|-------------|
| `grayscale` | `boolean` | `false` | Convertit le PDF de sortie en niveaux de gris via un post-traitement Ghostscript. |

<div class="alert alert-info">
<strong>Note :</strong> La taille de page, les marges, l'orientation, l'échelle, les en-têtes et les pieds de page de <code>pdf_options</code> ne s'appliquent pas à cet endpoint. Le PDF de sortie conserve la mise en forme définie dans le document d'origine. Pour modifier la mise en page, modifiez le document source avant de l'envoyer.
</div>

---

## Détails de la conversion

- Utilise **LibreOffice** (via unoserver) pour le rendu des documents côté serveur
- La mise en forme, les polices, la mise en page et les médias intégrés du document sont préservés
- Timeout de conversion : 120 secondes
- La sortie reproduit fidèlement le document tel qu'il apparaîtrait à l'impression depuis LibreOffice

---

## Réponse

### Téléchargement direct (`direct_download=true`, par défaut)

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

Renvoie les octets bruts du PDF.

### Réponse avec métadonnées (`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
}
```

---

## Exemples de code

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

### Avec sortie en niveaux de gris

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

---

## Réponses d'erreur

| Statut | Condition |
|--------|-----------|
| `400 Bad Request` | Le fichier n'est pas un fichier `.pages` |
| `400 Bad Request` | Échec de la conversion du document (fichier corrompu ou non pris en charge) |
| `400 Bad Request` | JSON `pdf_options` invalide |
| `401 Unauthorized` | Clé API ou token JWT manquant ou invalide |
| `402 Payment Required` | Quota mensuel d'ops épuisé |
| `402 Payment Required` | Limite de stockage atteinte |
| `413 Payload Too Large` | Le fichier dépasse la taille maximale autorisée par le plan |
| `500 Internal Server Error` | La conversion a expiré (limite de 120 secondes) |

---

## Limites

| Limite | Valeur |
|-------|-------|
| Taille maximale de fichier | Selon le plan (Founding : 5 MB) |
| Timeout de conversion | 120 secondes |
| Conversions mensuelles | Selon le plan |

## Questions fréquentes

### Comment convertir un fichier Apple Pages en PDF avec une API REST ?

Envoyez une requête `POST` à `/v1/convert/pages-to-pdf` avec le fichier `.pages` dans un corps `multipart/form-data`, authentifiée avec un header `X-API-Key` ou un JWT `Authorization: Bearer`. La réponse contient par défaut les octets du PDF converti.

### Puis-je obtenir un lien de téléchargement au lieu des octets bruts du PDF ?

Oui. Définissez `direct_download=false` et l'API renvoie des métadonnées JSON comprenant `presigned_url`, le `filename` de sortie, `file_size` et `conversion_time_seconds`.

### Puis-je modifier la taille de page, les marges ou l'orientation du PDF de sortie ?

Non. La mise en page provient des réglages du document Pages lui-même ; le seul champ `pdf_options` pris en charge est `grayscale`. Pour modifier la mise en page, modifiez le document source avant de l'envoyer.

### Pourquoi l'endpoint pages-to-pdf renvoie-t-il 400 Bad Request ?

Un `400 Bad Request` est renvoyé lorsque le fichier envoyé n'est pas un `.pages`, lorsque le document est corrompu ou non pris en charge, ou lorsque la valeur de `pdf_options` n'est pas du JSON valide.

### Quelles sont les limites de taille de fichier et de timeout pour la conversion Pages vers PDF ?

La taille maximale de fichier dépend du plan (5 MB sur le plan Founding) et chaque conversion est soumise à un timeout de 120 secondes ; une conversion expirée renvoie `500 Internal Server Error`.
