Analyses Profondes

Comment convertir des pages PDF en images : guide pratique

koboshiCo-founder
·10 min de lecture
Comment convertir des pages PDF en images : guide pratique
Résumé

Les pages PDF ne conviennent pas toujours à l'usage souhaité. Ce guide explique quand convertir un PDF en images, les compromis de chaque approche, les méthodes natives par système d'exploitation et des exemples de code en cinq langages.

Un développeur frontend reçoit un PDF de charte graphique de 40 pages et doit insérer trois pages précises dans une planche Figma. Un ingénieur support veut coller un diagramme extrait d'une fiche technique dans un fil Slack. Un avocat doit joindre une page de contrat signée à un e-mail sans envoyer le document entier.

Le PDF est conçu pour les documents à mise en page fixe. Le web, les éditeurs d'images et les applications de messagerie fonctionnent en pixels. Convertir une page PDF en image comble ce fossé, mais la méthode choisie modifie la qualité de sortie, la taille du fichier et le niveau de contrôle conservé.

Pourquoi le PDF est à la fois excellent et frustrant pour cela

Le PDF stocke les pages sous forme de flux de commandes de dessin : placer ce glyphe, tracer ce vecteur, rendre cette image à cette taille. Cela le rend indépendant de la résolution et visuellement cohérent. Cela signifie aussi qu'un PDF n'est pas une image. Pour le transformer en image, quelque chose doit restituer ces commandes sur une surface raster.

Les points forts :

  • Le texte et les vecteurs restent nets à tout niveau de zoom car ils sont décrits mathématiquement, pas stockés en pixels.
  • Un seul PDF peut contenir des centaines de pages dans un même fichier.
  • Les polices, profils colorimétriques et annotations accompagnent le document.

Les points faibles :

  • Les lecteurs PDF ne restituent pas tous de la même manière. La même page peut légèrement différer dans Adobe Acrobat, Preview, Chrome ou une bibliothèque headless.
  • Les PDF scannés ne sont que des images encapsulées dans un conteneur PDF, donc les "convertir" signifie les ré-encoder, ce qui peut ajouter des artefacts ou gonfler la taille.
  • Les PDF complexes avec transparence, calques ou formulaires interactifs peuvent s'aplatir de manière imprévisible.
  • Les dimensions des pages varient. Une page US Letter à 72 DPI fait 612 par 792 pixels. À 300 DPI, elle fait 2550 par 3300. Si vous ne spécifiez pas la résolution, le résultat peut être inutilisable.

Ce en quoi les gens convertissent réellement les PDF

La plupart des conversions se répartissent en trois formats de sortie. Chacun a un usage différent.

FormatIdéal pourCompromis
JPGPhotos, aperçus, pièces jointes d'e-mail, galeries webAvec perte, mais fichiers compacts
PNGCaptures d'écran, diagrammes, tout ce qui nécessite de la transparenceSans perte, plus volumineux que le JPG pour les photos
WebPWeb moderne, applications, partout où la bande passante comptePlus léger que JPG/PNG, légèrement moins universel

Viennent ensuite les paramètres pratiques :

  • Page unique ou lot. Une page est simple. Un dossier de factures nécessite une automatisation.
  • DPI. 150 DPI suffisent pour les vignettes. 300 DPI est la norme pour l'impression et l'OCR. 600 DPI n'est justifié que si vous zoomez sur des détails fins.
  • Espace colorimétrique. Le RGB est sûr pour les écrans. Les PDF CMJN convertis en RGB peuvent subir des décalages colorimétriques si la conversion est trop simpliste.

Choisir la bonne approche

L'outil adapté dépend de ce que vous cherchez à optimiser.

Conversion rapide dans le navigateur

Si vous avez juste besoin d'une page en JPG, PNG ou WebP et que le fichier n'est pas suffisamment sensible pour imposer un traitement serveur, un convertisseur navigateur est le plus rapide. Nos outils PDF vers JPG, PDF vers PNG et PDF vers WebP restituent le PDF localement. Le fichier ne quitte jamais votre appareil, ce qui compte pour les contrats, pièces d'identité et dossiers médicaux.

Traitement par lot en ligne de commande

Pour les dossiers de PDF ou les pipelines d'intégration continue, un outil en ligne de commande est supérieur. Vous obtenez une sortie reproductible, un contrôle du DPI et la possibilité de scripter.

Conversion intégrée à une application

Quand la conversion fait partie d'un produit, appeler une bibliothèque est généralement plus propre que de lancer un outil CLI. Cela supprime une dépendance externe et permet une gestion des erreurs cohérente avec le reste de la base de code.

Conversion sous Windows

Adobe Acrobat

  1. Ouvrez le PDF et allez à la page souhaitée.
  2. Choisissez Fichier > Exporter vers > Image > JPEG/PNG/TIFF.
  3. Définissez la résolution de sortie dans la boîte de dialogue d'exportation.
  4. Enregistrez.

Acrobat produit des résultats fiables, mais il n'est ni gratuit ni scriptable sans le SDK payant.

PDF-XChange Editor

Une alternative plus légère avec une version gratuite. Fichier > Exporter > Exporter les pages en images permet de choisir le format, le DPI et la plage de pages.

PowerShell avec pdftoppm

Installez Poppler pour Windows, puis utilisez pdftoppm depuis PowerShell :

pdftoppm -jpeg -r 300 input.pdf output

Cela génère output-1.jpg, output-2.jpg, et ainsi de suite, une image par page, à 300 DPI.

Pour du PNG avec arrière-plan transparent :

pdftoppm -png -r 300 input.pdf output

Pour une seule page :

pdftoppm -jpeg -r 300 -f 1 -l 1 input.pdf output

Les options -f et -l définissent respectivement la première et la dernière page.

PowerShell avec ImageMagick

ImageMagick peut restituer les PDF, mais sous Windows il délègue généralement à Ghostscript en arrière-plan :

magick -density 300 input.pdf[0] output.jpg

Le [0] signifie la première page. Sans cela, ImageMagick peut tenter de produire une image multi-cadres.

Conversion sous macOS

Preview

  1. Ouvrez le PDF dans Preview.
  2. Sélectionnez la vignette de la page souhaitée.
  3. Choisissez Fichier > Exporter, sélectionnez le format et définissez la résolution.

Preview est rapide et privé, mais il traite une page à la fois.

Terminal avec sips

macOS inclut sips, mais il ne restitue pas bien le texte des PDF. Ne l'utilisez que pour les PDF déjà constitués d'images bitmap :

sips -s format jpeg input.pdf --out output.jpg

Pour une véritable restitution PDF, installez Poppler via Homebrew :

brew install poppler
pdftoppm -jpeg -r 300 input.pdf output

Action rapide Automator

Vous pouvez créer un service accessible par clic droit dans Automator qui exécute pdftoppm sur n'importe quel PDF sélectionné. C'est utile si vous convertissez régulièrement des pages et ne voulez pas mémoriser les options.

Conversion sous Linux

Poppler est généralement le meilleur choix sous Linux.

sudo apt install poppler-utils

pdftoppm -jpeg -r 300 input.pdf output
pdftoppm -png -r 300 input.pdf output

Pour une sortie WebP, convertissez d'abord en PNG puis utilisez cwebp :

pdftoppm -png -r 300 input.pdf temp
cwebp temp-1.png -o output.webp

Conversion par lot

Si vous avez un dossier de PDF et souhaitez une image par première page :

for f in *.pdf; do
    pdftoppm -jpeg -r 300 -f 1 -l 1 "$f" "${f%.pdf}"
done

ImageMagick

ImageMagick fonctionne sous Linux mais est souvent plus lent pour les PDF car il rasterise via Ghostscript :

magick -density 300 input.pdf[0] -quality 90 output.jpg

Placez -density avant la lecture du PDF. Le mettre après n'aura aucun effet.

Conversion par code

TypeScript / Node.js

Utilisez pdfjs-dist pour restituer les pages sur un canvas, puis exportez les données d'image.

import * as pdfjsLib from "pdfjs-dist"
import { createCanvas } from "canvas"
import fs from "fs"

async function pdfPageToPng(
  pdfPath: string,
  pageNumber: number,
  outputPath: string,
  scale: number = 2
) {
  const data = new Uint8Array(fs.readFileSync(pdfPath))
  const pdf = await pdfjsLib.getDocument({ data }).promise
  const page = await pdf.getPage(pageNumber)

  const viewport = page.getViewport({ scale })
  const canvas = createCanvas(viewport.width, viewport.height)
  const context = canvas.getContext("2d")

  await page.render({ canvasContext: context, viewport }).promise

  const buffer = canvas.toBuffer("image/png")
  fs.writeFileSync(outputPath, buffer)

  await pdf.destroy()
}

await pdfPageToPng("input.pdf", 1, "output.png", 2)

La valeur scale correspond approximativement au DPI : une échelle de 2 à 72 DPI donne une sortie de 144 DPI. Pour 300 DPI, utilisez une échelle d'environ 4.17.

Dans le navigateur, notre convertisseur PDF vers PNG effectue la même étape de restitution sur canvas sans envoyer le fichier ailleurs.

PHP

PHP peut appeler pdftoppm ou utiliser des bibliothèques comme spatie/pdf-to-image, qui encapsule ImageMagick :

<?php

use Spatie\PdfToImage\Pdf;

$pdf = new Pdf('input.pdf');
$pdf->setPage(1)
    ->setOutputFormat('png')
    ->saveImage('output.png');

Si vous préférez ne pas ajouter de dépendance, appelez directement Poppler :

<?php

function pdfPageToPng(string $input, int $page, string $output, int $dpi = 300): void {
    $cmd = sprintf(
        'pdftoppm -png -r %d -f %d -l %d %s %s',
        $dpi,
        $page,
        $page,
        escapeshellarg($input),
        escapeshellarg($output)
    );
    exec($cmd);
}

pdfPageToPng('input.pdf', 1, 'output', 300);

Cela écrit output-1.png. Ajoutez votre propre gestion des erreurs avant de l'utiliser en production.

Go

Go n'a pas de moteur de rendu PDF intégré, mais github.com/gen2brain/go-fitz encapsule MuPDF :

package main

import (
	"image/jpeg"
	"os"

	"github.com/gen2brain/go-fitz"
)

func main() {
	doc, err := fitz.New("input.pdf")
	if err != nil {
		panic(err)
	}
	defer doc.Close()

	img, err := doc.Image(0)
	if err != nil {
		panic(err)
	}

	out, err := os.Create("output.jpg")
	if err != nil {
		panic(err)
	}
	defer out.Close()

	if err := jpeg.Encode(out, img, &jpeg.Options{Quality: 90}); err != nil {
		panic(err)
	}
}

go-fitz retourne les images à la résolution de rendu par défaut du PDF. Consultez la documentation de la bibliothèque si vous avez besoin de contrôler le DPI.

Java

Apache PDFBox est le choix standard pour le travail avec des PDF en Java.

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class PdfToImage {
    public static void main(String[] args) throws IOException {
        try (PDDocument document = PDDocument.load(new File("input.pdf"))) {
            PDFRenderer renderer = new PDFRenderer(document);
            BufferedImage image = renderer.renderImageWithDPI(0, 300);
            ImageIO.write(image, "png", new File("output.png"));
        }
    }
}

Dépendance Maven :

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>3.0.2</version>
</dependency>

renderImageWithDPI prend un index de page basé sur zéro et une valeur DPI.

Python

Python simplifie cela avec pymupdf ou pdf2image.

Avec pymupdf :

import fitz

doc = fitz.open("input.pdf")
page = doc[0]

mat = fitz.Matrix(2, 2)
pix = page.get_pixmap(matrix=mat)
pix.save("output.png")

La Matrix contrôle l'échelle. Pour obtenir environ 300 DPI à partir d'un PDF de 72 DPI, utilisez fitz.Matrix(300/72, 300/72).

Avec pdf2image, qui encapsule Poppler :

from pdf2image import convert_from_path

images = convert_from_path("input.pdf", dpi=300, first_page=1, last_page=1)
images[0].save("output.jpg", "JPEG", quality=90)

pdf2image est pratique mais nécessite que Poppler soit installé sur le système.

Pièges courants

  • Oublier le DPI. Le rendu PDF par défaut est souvent à 72 ou 96 DPI. À cette résolution, le texte apparaît flou. Spécifiez toujours le DPI de sortie si la qualité importe.
  • Ignorer l'espace colorimétrique. Un PDF CMJN converti en RGB sans profil peut apparaître délavé ou trop saturé.
  • Ré-encoder des PDF scannés. Si le PDF est déjà un scan JPEG, le convertir en PNG ne restaurera pas les détails perdus. Cela ne fera qu'augmenter la taille du fichier.
  • Substitution de polices. Les serveurs headless manquent parfois des polices intégrées au PDF. Le moteur de rendu substitue, et la mise en page se casse. L'incorporation des polices lors de la création du PDF évite cela.
  • Erreur de numérotation de page. Les API de code utilisent généralement des index de page basés sur zéro. Les outils en ligne de commande utilisent généralement des numéros basés sur un.

Quoi utiliser où

  • Usage personnel ponctuel : Preview sur macOS, un lecteur PDF sous Windows, ou un convertisseur navigateur.
  • Traitement par lot sur un serveur : pdftoppm ou pdf2image.
  • Intégration dans un produit : Apache PDFBox pour Java, pymupdf pour Python, pdfjs-dist pour TypeScript.
  • Fichiers sensibles : Utilisez un outil navigateur pour que le PDF ne quitte jamais l'appareil.

Si vous voulez le chemin le plus rapide sans rien installer, nos convertisseurs PDF vers JPG, PDF vers PNG et PDF vers WebP fonctionnent entièrement dans le navigateur.

Plus d'articles à lire