Combien de temps un commercial perd-il à recopier à la main les caractéristiques d’un produit dans un fichier PowerPoint avant chaque rendez-vous client ? Chez un fabricant de composants électroniques industriels vendant en B2B, cette tâche répétitive s’effectuait manuellement pour chacune des cent-dix références du catalogue, avec le risque constant qu’une caractéristique mise à jour sur le site n’ait pas été répercutée dans le document PDF correspondant, resté figé depuis sa dernière génération.
Le bloc produit du site, déjà utilisé pour l’affichage des fiches en ligne, portait déjà l’ensemble des caractéristiques techniques sous forme d’attributs structurés : tension nominale, plage de température, certifications, dimensions. Plutôt que de dupliquer cette donnée dans un outil de mise en page séparé, la solution retenue génère le PDF directement à partir de cette même source.
La source unique de vérité : les attributs du bloc
Le bloc fabricant/fiche-produit déclare ses caractéristiques techniques comme des attributs typés, exactement comme n’importe quel autre attribut de bloc :
{
"attributes": {
"reference": { "type": "string" },
"tensionNominale": { "type": "string" },
"plageTemperature": { "type": "string" },
"certifications": { "type": "array", "items": { "type": "string" } },
"dimensionsMm": { "type": "string" }
}
}
Ces attributs alimentent déjà l’affichage en ligne de la fiche produit : les réutiliser pour la génération du PDF garantit qu’aucune donnée ne peut diverger entre les deux supports, la mise à jour d’un attribut se répercutant automatiquement sur les deux sorties.
Déclencher la génération à la demande

Générer un PDF à chaque enregistrement de fiche produit aurait été inutile — la plupart des mises à jour ne concernent qu’un détail mineur, jamais consulté en PDF avant plusieurs semaines. La génération se déclenche donc à la demande, via une route REST appelée par un bouton « Télécharger la fiche PDF » affiché sur la page produit :
register_rest_route( 'fabricant/v1', '/fiche-pdf/(?P<id>\d+)', array(
'methods' => 'GET',
'callback' => 'fabricant_generer_fiche_pdf',
) );
function fabricant_generer_fiche_pdf( $request ) {
$produit_id = (int) $request['id'];
$blocs = parse_blocks( get_post_field( 'post_content', $produit_id ) );
$attributs = fabricant_extraire_attributs_bloc( $blocs, 'fabricant/fiche-produit' );
$pdf = new \Dompdf\Dompdf();
$pdf->loadHtml( fabricant_rendre_gabarit_pdf( $attributs ) );
$pdf->render();
return new WP_REST_Response(
$pdf->output(),
200,
array( 'Content-Type' => 'application/pdf' )
);
}
La fonction fabricant_extraire_attributs_bloc() parcourt l’arbre retourné par parse_blocks() pour retrouver le bloc concerné et ses attributs, une approche qui fonctionne quelle que soit la position du bloc dans le contenu de la page produit.
Un seul gabarit pour tout le catalogue
Le gabarit HTML converti en PDF reste unique pour les cent-dix références : une fonction de rendu construit un document structuré à partir des attributs disponibles, avec des sections conditionnelles selon les données réellement renseignées :
function fabricant_rendre_gabarit_pdf( array $attributs ): string {
ob_start();
?>
<h1>Fiche technique — <?php echo esc_html( $attributs['reference'] ); ?></h1>
<table>
<tr><td>Tension nominale</td><td><?php echo esc_html( $attributs['tensionNominale'] ); ?></td></tr>
<tr><td>Plage de température</td><td><?php echo esc_html( $attributs['plageTemperature'] ); ?></td></tr>
<tr><td>Dimensions</td><td><?php echo esc_html( $attributs['dimensionsMm'] ); ?> mm</td></tr>
</table>
<?php
return ob_get_clean();
}
Ce gabarit unique évite la maintenance de cent-dix fichiers de mise en page séparés : une modification de la charte visuelle des fiches PDF se répercute instantanément sur l’ensemble du catalogue, à la prochaine génération.
Ce que cette approche a nécessité comme ajustement
- Les certifications, stockées en tableau, ont nécessité une boucle d’affichage spécifique dans le gabarit, absente du rendu HTML en ligne qui les affiche sous forme de badges visuels non transposables en PDF.
- Le poids de la bibliothèque de génération PDF a imposé de la charger uniquement sur cette route REST précise, jamais dans le chargement global du site, pour ne pas alourdir les autres pages.
- Un cache de fichier généré, valable une heure, évite de régénérer le même PDF à chaque clic répété d’un même visiteur sur une courte période.
Une seule source de vérité pour deux formats de sortie coûte plus cher à construire au départ, mais élimine définitivement le risque qu’une fiche PDF affiche une caractéristique périmée depuis longtemps.
Limites de ce dispositif
Le stockage des PDF déjà générés, leur archivage éventuel ou leur envoi automatique par e-mail à un commercial ne font pas partie de ce dispositif : chaque génération reste éphémère, recalculée à la demande à partir des attributs à jour, sans conservation d’un historique de versions du document. Une équipe souhaitant archiver ses fiches techniques générées devra ajouter une couche de stockage distincte, hors du périmètre de cette recette.
En résumé
Générer une fiche technique PDF directement depuis les attributs d’un bloc produit garantit que la donnée affichée en ligne et celle imprimée par un commercial ne divergent jamais, sans dupliquer la moindre information dans un outil de mise en page séparé. Le coût principal de cette approche tient à l’écriture d’un gabarit suffisamment générique pour couvrir l’ensemble des cas du catalogue, un effort réalisé une seule fois pour l’ensemble des références.