# Extraire des données de PDF importés dans WordPress avec un modèle de vision

> Fiches produit et factures en PDF transformées en contenus WordPress structurés grâce à un modèle de vision, avec validation humaine avant publication.

- Auteur : Clément Hadrot
- Publié le : 2024-12-31
- Mis à jour le : 2024-12-31
- Catégorie : IA &amp; MCP
- URL : https://wpmoderne.dev.wordpress-developpement.fr/ia-mcp/extraire-donnees-pdf-vision-wordpress/

## L’essentiel

- Convertir chaque page PDF en image avant analyse
- Demander une sortie JSON strictement typée
- Toujours valider avant wp_insert_post

Un client du secteur du bâtiment nous a confié un problème récurrent : des centaines de fiches produit fournisseurs, reçues en PDF, devaient être transformées en pages produit WooCommerce. La saisie manuelle prenait un temps considérable. Nous avons construit un flux qui envoie chaque PDF à un modèle de vision, récupère les champs utiles et propose une fiche à valider avant publication. Ce n'est pas un article sur la génération d'images : uniquement sur la lecture de documents existants.

Voici la méthode complète, du fichier importé dans la médiathèque jusqu'au contenu WordPress créé, avec les points de vigilance qui font la différence entre un gain de temps réel et un chantier de corrections sans fin.

## Étape 1 : convertir le PDF en images exploitables

La plupart des modèles de vision actuels n'acceptent pas directement un fichier PDF multi-pages en entrée fiable : mieux vaut convertir chaque page en image avant l'envoi. Sur le serveur, nous utilisons Imagick, déjà présent sur beaucoup d'hébergements WordPress, pour générer un PNG par page au moment de l'upload dans la médiathèque, via le hook `add_attachment`.

```
add_action( 'add_attachment', function ( $attachment_id ) {
    $file = get_attached_file( $attachment_id );
    if ( 'application/pdf' !== get_post_mime_type( $attachment_id ) ) {
        return;
    }
    $imagick = new Imagick();
    $imagick->setResolution( 150, 150 );
    $imagick->readImage( $file . '[0]' );
    $imagick->setImageFormat( 'png' );
    $png_path = str_replace( '.pdf', '-page1.png', $file );
    $imagick->writeImage( $png_path );
} );
```

## Étape 2 : construire un prompt d'extraction strict

La qualité de l'extraction dépend presque entièrement de la précision du prompt. Nous demandons systématiquement une sortie JSON avec un schéma explicite, plutôt qu'un texte libre à reparser ensuite. Le prompt liste chaque champ attendu, son type, et une consigne claire : renvoyer `null` plutôt qu'inventer une valeur absente.

> L'essentiel à retenir : Convertir chaque page PDF en image avant analyse ; Demander une sortie JSON strictement typée ; Toujours valider avant wp_insert_post

## Étape 3 : parser et faire correspondre les champs WordPress

La réponse du modèle arrive en JSON. Nous la décodons avec `json_decode`, vérifions la présence des clés attendues, puis mappons chaque champ vers son emplacement WordPress : titre du produit, description, prix vers les métadonnées WooCommerce, référence fournisseur vers un champ personnalisé. Toute valeur manquante ou de type incorrect place la fiche en brouillon avec une alerte plutôt que de la publier en l'état.

```
$data = json_decode( $response_json, true );
if ( ! isset( $data['reference'], $data['prix_ht'] ) ) {
    wp_insert_post( array(
        'post_title'  => $data['nom_produit'] ?? 'À vérifier',
        'post_status' => 'draft',
        'post_type'   => 'product',
    ) );
    return;
}
```

## Étape 4 : la validation humaine, non négociable

Sur un lot de test de cinquante fiches fournisseurs, nous avons comparé les extractions automatiques à une saisie manuelle de référence. Quatre champs se sont révélés incorrects sans intervention : deux prix mal lus à cause d'une mise en page en deux colonnes, une référence tronquée et une unité de mesure confondue entre kilogrammes et litres. Aucun de ces cas n'était visible sans relecture, ce qui confirme la nécessité d'un statut brouillon systématique avant toute publication automatique.

- Toujours passer par un statut brouillon avant publication
- Afficher côte à côte la page PDF source et les champs extraits pour la relecture
- Journaliser chaque extraction avec le fichier source associé
- Revoir en priorité les documents à mise en page complexe ou multi-colonnes

## Étape 5 : industrialiser sans perdre le contrôle

Une fois le flux validé, nous avons ajouté une file de traitement pour éviter de bloquer l'upload le temps de l'appel au modèle, avec un statut « en cours d'extraction » affiché dans la liste des médias. Le gain de temps reste net : une fiche qui prenait dix minutes de saisie manuelle passe à moins de deux minutes de relecture.

> Un modèle de vision ne remplace pas la saisie, il la transforme en relecture. La différence de temps se joue là, pas dans l'automatisation totale.

## Pour aller plus loin

Ce flux s'adapte facilement aux factures fournisseurs pour l'automatisation de la comptabilité, ou aux fiches techniques pour l'import massif de contenus B2B. La règle reste la même : un schéma de sortie strict, un statut brouillon par défaut, et une relecture humaine sur les documents à structure inhabituelle. C'est ce dernier point, souvent négligé, qui fait la différence entre un outil fiable et une source d'erreurs discrètes dans le catalogue.
