---
seo_title: API PDF vers JPEG : Convertir les pages PDF en images | EnConvert
meta_desc: Convertissez un PDF en images JPEG via POST /v1/convert/pdf-to-jpeg. Rendu de chaque page à 144 DPI ; les PDF multipages renvoient un ZIP avec un JPEG par page.
keywords: convertir pdf en jpeg, api pdf vers image, pdf en jpg api, convertir pages pdf en images, api pdf vers jpg par programmation, pdf en image zip api, convertisseur pdf jpeg en ligne
---

# API PDF vers JPEG

Convertissez un PDF en images JPEG avec l'endpoint `POST /v1/convert/pdf-to-jpeg`, qui restitue chaque page du PDF sous forme d'image raster. Les PDF d'une seule page renvoient directement un fichier JPEG ; les PDF multipages renvoient une archive ZIP contenant un JPEG par page. Les réponses renvoient des octets bruts par défaut, ou des métadonnées JSON avec une URL de téléchargement présignée lorsque `direct_download=false`.

---

## Endpoint

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

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

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

**Format de sortie :** `.jpeg` (`image/jpeg`) pour les PDF d'une seule page, `.zip` (`application/zip`) pour les PDF multipages

---

## Authentification

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

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

Ou :

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

---

## Paramètres de la requête

| Paramètre | Type | Obligatoire | Valeur par défaut | Description |
|-----------|------|----------|---------|-------------|
| `file` | file | Oui | -- | Le fichier `.pdf` à convertir. |
| `output_filename` | `string` | Non | Nom du fichier d'entrée | Nom de fichier de sortie personnalisé. L'extension `.jpeg` ou `.zip` est ajoutée automatiquement. |
| `direct_download` | `boolean` | Non | `true` | Si `true`, renvoie les octets bruts du fichier. Si `false`, renvoie des métadonnées JSON avec une URL de téléchargement présignée. |

---

## Détails de la conversion

- Utilise **PyMuPDF** pour restituer les pages du PDF en images raster à une résolution 2x (144 DPI)
- Utilise **Pillow** pour l'encodage JPEG à qualité maximale
- La transparence est aplatie sur un fond blanc (le JPEG ne prend pas en charge le canal alpha)
- Les PDF d'une seule page renvoient directement un fichier `.jpeg`
- Les PDF multipages renvoient une archive `.zip` contenant `page_1.jpeg`, `page_2.jpeg`, etc.
- Le format de sortie est déterminé automatiquement selon le nombre de pages

---

## Réponse

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

**PDF d'une seule page :**

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

Renvoie les octets bruts de l'image JPEG.

**PDF multipages :**

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

Renvoie une archive ZIP contenant un JPEG par page.

### Réponse avec métadonnées (`direct_download=false`)

```json
{
    "presigned_url": "https://spaces.example.com/...",
    "object_key": "env/files/{project_id}/pdf-to-jpeg/document_20260405_123456789.jpeg",
    "filename": "document_20260405_123456789.jpeg",
    "file_size": 45678,
    "conversion_time_seconds": 1.2
}
```

---

## Exemples de code

### Python

```python
import requests

with open("document.pdf", "rb") as f:
    response = requests.post(
        "https://api.enconvert.com/v1/convert/pdf-to-jpeg",
        headers={"X-API-Key": "sk_your_private_key"},
        files={"file": ("document.pdf", f)}
    )

# Check if response is a ZIP (multi-page) or JPEG (single-page)
content_type = response.headers.get("Content-Type", "")
if "zip" in content_type:
    with open("document_pages.zip", "wb") as out:
        out.write(response.content)
else:
    with open("document_20260405_123456789.jpeg", "wb") as out:
        out.write(response.content)
```

### Node.js

```javascript
const form = new FormData();
form.append("file", fs.createReadStream("document.pdf"));

const response = await fetch("https://api.enconvert.com/v1/convert/pdf-to-jpeg", {
    method: "POST",
    headers: { "X-API-Key": "sk_your_private_key" },
    body: form
});

const contentType = response.headers.get("content-type");
const buffer = Buffer.from(await response.arrayBuffer());

if (contentType.includes("zip")) {
    fs.writeFileSync("document_pages.zip", buffer);
} else {
    fs.writeFileSync("document_20260405_123456789.jpeg", buffer);
}
```

### PHP

```php
$ch = curl_init("https://api.enconvert.com/v1/convert/pdf-to-jpeg");
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.pdf")]
]);
$output = curl_exec($ch);
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
curl_close($ch);

if (str_contains($contentType, "zip")) {
    file_put_contents("document_pages.zip", $output);
} else {
    file_put_contents("document_20260405_123456789.jpeg", $output);
}
```

### Go

```go
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "document.pdf")
file, _ := os.Open("document.pdf")
io.Copy(part, file)
writer.Close()

req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/pdf-to-jpeg", body)
req.Header.Set("Content-Type", writer.FormDataContentType())
req.Header.Set("X-API-Key", "sk_your_private_key")
resp, _ := http.DefaultClient.Do(req)
```

---

## Réponses d'erreur

| Statut | Condition |
|--------|-----------|
| `400 Bad Request` | Le fichier n'est pas un fichier `.pdf` |
| `400 Bad Request` | Le PDF ne contient aucune page |
| `400 Bad Request` | Échec de la conversion de l'image (PDF corrompu ou non pris en charge) |
| `401 Unauthorized` | Clé API / jeton 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 forfait |

---

## Limites

| Limite | Valeur |
|-------|-------|
| Taille de fichier maximale | Selon le forfait (Founding : 5 MB) |
| Résolution de rendu | 144 DPI (échelle 2x) |
| Qualité de sortie | Maximale (qualité JPEG 100) |
| Conversions mensuelles | Selon le forfait |

---

## Questions fréquentes

### Comment convertir un PDF en images JPEG avec une API REST ?

Envoyez une requête POST `multipart/form-data` à `/v1/convert/pdf-to-jpeg` avec le fichier `.pdf` dans le champ `file`, authentifiée via `X-API-Key` ou un Bearer JWT. Vous récupérez les octets bruts du fichier par défaut, ou définissez `direct_download=false` pour recevoir du JSON avec une URL de téléchargement présignée.

### Comment l'API gère-t-elle les PDF multipages ?

Les PDF d'une seule page renvoient directement un fichier `.jpeg`, tandis que les PDF multipages renvoient une archive `.zip` contenant `page_1.jpeg`, `page_2.jpeg`, et ainsi de suite. Le format de sortie est déterminé automatiquement à partir du nombre de pages, donc vérifiez l'en-tête `Content-Type` (`image/jpeg` ou `application/zip`) lors de l'enregistrement de la réponse.

### À quelle résolution les pages du PDF sont-elles restituées ?

Les pages sont restituées avec PyMuPDF à une résolution 2x (144 DPI) et encodées en JPEG à qualité maximale (100). Aucun de ces réglages n'est configurable.

### La conversion PDF vers JPEG conserve-t-elle la transparence ?

Non. Le JPEG ne prend pas en charge de canal alpha, donc la transparence est aplatie sur un fond blanc.

### Pourquoi l'endpoint PDF vers JPEG renvoie-t-il une erreur 400 ?

`400 Bad Request` est renvoyé lorsque le fichier n'est pas un `.pdf`, lorsque le PDF ne contient aucune page, ou lorsque la conversion échoue parce que le PDF est corrompu ou non pris en charge.
