Optimisation Dolibarr : PDF orienté performance

Dolibarr, l’ERP/CRM open source plébiscité par les TPE/PME, est un outil puissant qui génère quotidiennement des documents PDF : factures, devis, bons de commande, états divers. Mais saviez-vous que la génération de ces PDF peut devenir un goulot d’étranglement significatif pour les performances globales de votre instance ? Une mauvaise configuration ou des documents lourds peuvent ralentir l’ensemble du système.

Cet article vous guide pas à pas pour optimiser la génération PDF dans Dolibarr, transformer des documents chronophages en processus fluides, et préserver la rapidité de votre interface utilisateur.


1. Pourquoi les PDF ralentissent-ils Dolibarr ? Les causes principales

Avant d’optimiser, identifions les problèmes :

  • Images non optimisées : L’insertion de logos ou de photos en haute résolution (ex: 300 DPI, format PNG non compressé) alourdit dramatiquement la taille du PDF et le temps de rendu.
  • Polices de caractères lourdes : L’incorporation (embedding) de polices complètes, surtout des polices "TrueType" volumineuses, augmente la taille du fichier.
  • Documents très longs ou complexes : Des factures avec des centaines de lignes, des tableaux imbriqués ou des graphiques vectoriels complexes sollicitent davantage le moteur de génération.
  • Moteur PDF sous-optimal : Dolibarr utilise principalement TcPDF (par défaut) ou FPDI/FPDF. Leur configuration par défaut n’est pas toujours adaptée à un fort volume.
  • Absence de cache : Sans mise en cache des modèles de documents, Dolibarr doit réinterpréter le template HTML/CSS et régénérer le PDF à chaque fois.
  • Limites serveur trop basses : Des temps d’exécution (max_execution_time) ou des limites mémoire (memory_limit) dans la configuration PHP peuvent être dépassés lors de la génération.


2. Le guide d’optimisation pratique

A. Optimisation en amont : le contenu de vos documents

  1. Logo et Images :

    • Compressez vos logos : Utilisez des outils comme TinyPNG, Squoosh, ou GIMP pour réduire leur poids. Pour un logo, un PNG de 100x100px à 72 DPI est amplement suffisant. Ciblez < 50 Ko.
    • Convertissez en JPEG pour les photos.
    • Évitez les images superflues dans les entêtes/pieds de page.

  2. Modèles de documents (templates) :

    • Simplifiez le CSS : Évitez les sélecteurs trop complexes, les ombres portées (box-shadow), les dégradés lourds. Privilégiez les propriétés simples (couleur, marge, padding).
    • Limitez les polices : Utilisez une ou deux polices standards (Helvetica, Times, Courier) qui sont natives dans TcPDF. Si vous utilisez une police personnalisée, n’incorporez que les caractères nécessaires (par exemple, seulement les chiffres et ponctuation pour un tableau financier).
    • Évitez les tableaux trop imbriqués et les div avec position: absolute qui peuvent poser problème à certains moteurs de rendu PDF.

B. Configuration Dolibarr (Fichier conf.php)

C’est ici que les gains sont souvent les plus significatifs.

// Génération PDF - PERFORMANCE
$dolibarr_main_prod = 1; // TRÈS IMPORTANT : Force le mode production (cache activé, erreurs cachées)
$dolibarr_main_cache_files = 1; // Active le cache des fichiers (modèles, etc.)
$dolibarr_main_cache_dir = DOL_DATA_ROOT.'/cache'; // Répertoire de cache (doit être accessible en écriture)
$dolibarr_main_autoreload = 0; // Désactive le rechargement automatique (utile en prod)
// Configuration spécifique PDF (pour TcPDF)
$pdf_prefer_pdfa = 0; // Désactiver le mode PDF/A si vous n'en avez pas besoin (plus rapide)
$pdf_use_tcpdf = 1; // Utiliser TcPDF (généralement plus rapide et moderne que FPDI)
$pdf_page_orientation = 'P'; // Portrait par défaut (plus rapide que 'L' parfois)
$pdf_page_format = 'a4'; // Format standard
// Limitation de la mémoire pour la génération PDF (à ajuster selon vos besoins)
// Une valeur de 64M à 128M est souvent un bon compromis.
// $dolibarr_main_setup_mem_pdf = '64M'; // Décommentez et ajustez si vous avez des erreurs de mémoire

Actions clés :

  • Passez $dolibarr_main_prod = 1 en production. Cela active tous les caches.
  • Vérifiez que le répertoire de cache ($dolibarr_main_cache_dir) est bel et bien créé et chmodé en 755 ou 775 (écriture pour le serveur web).

C. Configuration PHP (php.ini)

Assurez-vous que votre environnement PHP peut supporter la tâche :

max_execution_time = 60     ; Temps max d'exécution (passer de 30s à 60s peut aider)
memory_limit = 256M ; Limite mémoire (au moins 128M, 256M pour documents complexes)
post_max_size = 32M ; Taille max des données POST
upload_max_filesize = 32M ; Taille max des fichiers uploadés (pour logos)

Redémarrez votre serveur web (Apache/Nginx) après modification.

D. Choix et maintenance des bibliothèques

  • Préférez TcPDF : Dans l’interface admin (Accueil > Configuration > Modules > Gestion des modèles de documents), vérifiez que le moteur TcPDF est sélectionné. Il est généralement plus performant et mieux maintenu que FPDI/FPDF pour les documents complexes.
  • Maintenez à jour : Assurez-vous d’utiliser une version récente de Dolibarr (≥ 18.x). Les équipes améliorent constamment le moteur PDF. Mettez aussi à jour la bibliothèque TcPDF incluse.

E. Bonnes pratiques opérationnelles

  1. Génération à la demande vs batch :

    • Évitez de générer des centaines de PDF en une seule requête via un script personnalisé sans cache. Privilégiez la génération à la demande par l’utilisateur.
    • Pour les envois massifs (mailing avec PDF), utilisez une file d’attente (dolqueue) et générez les PDF en arrière-plan.

  2. Nettoyage du cache :

    • Le cache peut s’accumuler. Planifiez un nettoyage périodique (via une tâche cron) du répertoire documents/cache/ ou data/cache/ (selon votre config). Supprimez les fichiers .tcpdf.php et .pdf.php anciens. Dolibarr les régénérera si nécessaire.

  3. Surveillance :

    • Surveillez les logs d’erreur PHP et Dolibarr. Des messages "Allowed memory size exhausted" ou "Maximum execution time exceeded" sont des indicateurs directs.
    • Utilisez des outils de profiling (comme Xdebug en mode trace, ou des barres de debug) pour chronométrer la génération des PDF les plus lourds.


3. Checklist de dépannage rapide

  1. Mode prod activé ? ($dolibarr_main_prod = 1)
  2. Répertoire de cache accessible en écriture ?
  3. Logo optimisé (<50Ko) ? (Testez en le supprimant temporairement)
  4. Moteur PDF : TcPDF sélectionné ?
  5. Limites PHP memory_limit et max_execution_time suffisantes ?
  6. Modèle de document simplifié ? (Testez avec le modèle standard "Standard")
  7. Cache vidé après changement ? (Supprimez manuellement le contenu du dossier cache)
  8. Version Dolibarr et TcPDF à jour ?


Conclusion

L’optimisation des PDF dans Dolibarr n’est pas un ajustement magique, mais une combinaison de bonnes pratiques : un contenu léger, une configuration serveur adaptée, et une utilisation intelligente du cache. En appliquant ces conseils, vous réduirez drastiquement les temps d’attente lors de la génération de documents, soulagerez la charge de votre serveur, et améliorerez l’expérience utilisateur de tous les collaborateurs qui utilisent Dolibarr au quotidien.

Investissez une heure dans ces optimisations pour gagner des dizaines d’heures par an en productivité perdue. Commencez par le cache et l’optimisation des images, les résultats sont souvent immédiats et spectaculaires.

Publications similaires