Latenode

Convertir du HTML en PDF avec Puppeteer : configuration des styles et pagination

Découvrez comment convertir efficacement du HTML en PDF avec Puppeteer, en vous concentrant sur la configuration des styles, la pagination et l’optimisation des performances.

7 min de lecture
Aperçu d’un document HTML mis en page et exporté en PDF avec Puppeteer

La conversion de HTML en PDF est essentielle pour créer des documents standardisés tels que des rapports, des factures et des supports destinés aux clients. Puppeteer, un outil d’automatisation de navigateur, vous aide à gérer les styles, les mises en page et les sauts de page afin d’obtenir des PDF professionnels. Voici un aperçu rapide de ce que vous pouvez faire avec Puppeteer :

  • Générer des PDF : utilisez Puppeteer pour convertir du HTML en PDF soignés tout en exécutant du JavaScript et en appliquant du CSS personnalisé.
  • Contrôler les styles : définissez les dimensions des pages, les marges, les polices, les en-têtes, les pieds de page et bien plus encore avec du CSS spécifique à l’impression.
  • Gérer les sauts de page : utilisez des règles CSS pour éviter de couper des tableaux, des titres ou des images entre plusieurs pages.
  • Optimiser les performances : améliorez la qualité et réduisez la taille des fichiers grâce à la mise à l’échelle, à l’optimisation des images et à une gestion efficace des ressources.

Démarrage rapide : installez Puppeteer avec npm install puppeteer, chargez votre HTML (sous forme de chaîne, de fichier local ou d’URL) et configurez les paramètres PDF tels que les dimensions, les marges et le rendu des arrière-plans. Utilisez les règles CSS @media print pour mieux contrôler les styles d’impression.

Fonctionnalités clés :

  • Personnalisation des pages avec les règles @page.
  • Modèles d’en-tête et de pied de page pour des mises en page professionnelles.
  • Gestion du contenu multipage pour éviter les coupures indésirables dans les tableaux ou le texte.

Avec Puppeteer, vous pouvez automatiser et personnaliser la génération de PDF afin d’obtenir des résultats cohérents et de haute qualité.

🌐 Convertir du HTML en PDF avec Puppeteer dans Node.js 🚀 Guide complet étape par étape ...

Premiers pas avec Puppeteer

Découvrez comment configurer et utiliser Puppeteer pour générer des PDF. Suivez ces étapes pour commencer.

Configuration

Avant de commencer, assurez-vous que Node.js version 14.0.0 ou supérieure est installé sur votre système. Voici comment tout configurer :

  • Installer Node.js : téléchargez-le depuis nodejs.org et terminez l’installation.
  • Créer un dossier de projet : créez un nouveau dossier pour votre projet.
  • Initialiser le projet : ouvrez un terminal dans votre dossier de projet et exécutez npm init -y.
  • Installer Puppeteer : utilisez la commande npm install puppeteer pour ajouter Puppeteer à votre projet.

Premier script de génération de PDF

Voici un script basique pour convertir du HTML en PDF avec Puppeteer :

const puppeteer = require('puppeteer');

async function generatePDF() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // Set page content
  await page.setContent(`
    <html>
      <body>
        <h1>Sample PDF Document</h1>
        <p>Generated with Puppeteer</p>
      </body>
    </html>
  `);

  // Generate PDF
  await page.pdf({
    path: 'output.pdf',
    format: 'Letter',
    margin: {
      top: '1in',
      right: '1in',
      bottom: '1in',
      left: '1in'
    }
  });

  await browser.close();
}

generatePDF();

Enregistrez ce script sous le nom generate-pdf.js. Exécutez-le en saisissant node generate-pdf.js dans votre terminal. Le script créera un PDF au format US Letter (8,5 × 11 pouces) avec des marges de 1 pouce.

Options de source HTML

Puppeteer propose plusieurs méthodes pour charger du contenu HTML en vue de générer des PDF :

  • Chargement direct du contenu : utilisez une chaîne contenant le HTML.

    await page.setContent(htmlString);
    
  • Accès à un fichier local : chargez un fichier HTML depuis votre système local.

    await page.goto(`file:${path.join(__dirname, 'template.html')}`);
    
  • Chargement depuis une URL distante : récupérez du HTML depuis un site web en ligne.

    await page.goto('https://yourwebsite.com/page-to-convert');
    

Lorsque vous travaillez avec des ressources externes telles que des images ou des styles, assurez-vous qu’elles sont intégrées, qu’elles utilisent des URL absolues ou qu’elles sont stockées localement.

Conseils pour de meilleures performances

Pour garantir une génération de PDF fluide, gardez les points suivants à l’esprit :

  • Utilisez page.waitForNetworkIdle() pour attendre la fin de toutes les requêtes réseau.
  • Définissez des délais d’expiration adaptés pour le chargement des ressources.
  • Gérez explicitement le chargement des polices afin d’éviter les problèmes de rendu.

Une fois votre HTML prêt, vous pouvez passer à la personnalisation des styles et paramètres du PDF.

Paramètres de style PDF

Règles CSS spécifiques à l’impression

Pour adapter votre contenu au format PDF, utilisez les règles @media print. Voici un exemple :

@media print {
  /* Hide navigation menus and non-essential elements */
  nav, button, .no-print {
    display: none;
  }

  /* Adjust text for better readability in PDFs */
  body {
    font-size: 12pt;
    line-height: 1.5;
  }

  /* Ensure accurate background rendering */
  * {
    -webkit-print-color-adjust: exact;
  }
}

Si vous souhaitez conserver vos styles d’écran au lieu d’appliquer des styles spécifiques à l’impression, ajoutez cette ligne avant de générer le PDF :

await page.emulateMediaType('screen');

Une fois les styles d’impression appliqués, vous pouvez ajuster la mise en page.

Paramètres de mise en page

Définissez les dimensions du PDF à l’aide des options Puppeteer ou des règles CSS @page. Pour Puppeteer, vous pouvez utiliser la configuration suivante :

await page.pdf({
  format: 'Letter',
  margin: {
    top: '0.75in',
    right: '0.5in',
    bottom: '0.75in',
    left: '0.5in'
  },
  landscape: false,
  preferCSSPageSize: true
});

Pour des formats de page plus personnalisés, utilisez les règles CSS @page :

@page {
  size: 8.5in 11in;
  margin: 0.75in 0.5in;
}

Après avoir configuré la mise en page, vous pouvez affiner les éléments de design pour un rendu soigné.

Texte et éléments de design

Pour rendre le contenu visuellement clair et professionnel, utilisez ces règles CSS :

body {
  font-family: 'Arial', sans-serif;
  color: #333333;
}

h1, h2, h3 {
  page-break-after: avoid;
  color: #000000;
}

table {
  width: 100%;
  border-collapse: collapse;
  page-break-inside: avoid;
}

img {
  max-width: 100%;
  height: auto;
  page-break-inside: avoid;
}

Pour assurer la cohérence des couleurs d’arrière-plan, en particulier dans les sections critiques, ajoutez cette règle :

.color-critical {
  -webkit-print-color-adjust: exact;
}

Ces ajustements garantissent que votre PDF est facile à lire et visuellement attrayant.

sbb-itb-23997f1

Contrôle des sauts de page

Propriétés CSS de saut de page

Une gestion efficace des sauts de page garantit que votre contenu s’enchaîne harmonieusement d’une page à l’autre. Utilisez ces propriétés CSS pour contrôler les endroits où le contenu est séparé :

/* Start new page before chapters */
.chapter {
  page-break-before: always;
}

/* Keep headings together with their content */
h2, h3 {
  page-break-after: avoid;
}

/* Avoid splitting tables or figures */
table, figure {
  page-break-inside: avoid;
}

Ces règles permettent à votre document de rester structuré et facile à lire. Une fois les sauts de page configurés, concentrez-vous sur les en-têtes et pieds de page pour les aligner sur ces paramètres.

Configuration des en-têtes et pieds de page

Configurez les en-têtes et pieds de page dans Puppeteer afin de donner un aspect professionnel à votre PDF :

await page.pdf({
  displayHeaderFooter: true,
  headerTemplate: `
    <div style="font-size: 10px; padding: 0 0.5in; width: 100%;">
      <span class="title"></span>
      <span class="date" style="float: right;"></span>
    </div>
  `,
  footerTemplate: `
    <div style="font-size: 10px; text-align: center; width: 100%;">
      Page <span class="pageNumber"></span> of <span class="totalPages"></span>
    </div>
  `,
  margin: {
    top: '1in',
    bottom: '1in'
  }
});

Veillez à ajuster les marges afin que l’en-tête et le pied de page s’intègrent correctement sans chevaucher votre contenu.

Gestion du contenu multipage

Une fois les sauts de page et les en-têtes/pieds de page en place, concentrez-vous sur la gestion du contenu sur plusieurs pages. Un contrôle adéquat de la mise en page garantit que votre document reste clair et professionnel :

/* Keep captions with their images */
figure {
  display: table;
  page-break-inside: avoid;
}

figcaption {
  display: table-caption;
  caption-side: bottom;
}

/* Avoid splitting list items or table rows */
li, .table-row {
  page-break-inside: avoid;
}

/* Allow large tables to break across pages */
.table-wrapper {
  page-break-inside: auto;
}

Pour les grands tableaux qui s’étendent sur plusieurs pages, enveloppez-les dans un conteneur qui autorise les sauts tout en conservant les lignes intactes. Ainsi, les données restent faciles à suivre, même dans des jeux de données volumineux.

Conseil : activez l’option printBackground dans Puppeteer pour afficher tous les éléments visuels, y compris les couleurs d’arrière-plan et les images :

await page.pdf({
  printBackground: true,
  preferCSSPageSize: true
});

Qualité et performances des PDF

L’amélioration de la qualité et des performances des PDF exige une attention particulière à la mise à l’échelle, à la gestion des images et aux ressources. Ces étapes garantissent que le document final est soigné et fonctionne efficacement.

Méthodes de mise à l’échelle du contenu

Une mise à l’échelle correcte du contenu garantit sa lisibilité et la cohérence du design. Puppeteer propose des contrôles détaillés de mise à l’échelle pour le rendu des PDF :

await page.pdf({
  scale: 0.8,
  preferCSSPageSize: true,
  format: 'Letter'
});

Ici, les valeurs inférieures à 1 réduisent le contenu, tandis que les valeurs supérieures à 1 l’agrandissent. Associer la mise à l’échelle à preferCSSPageSize garantit que le PDF respecte les dimensions définies dans le CSS :

@page {
  size: 8.5in 11in;
  margin: 0.5in;
}

Gestion de la qualité des images

Le choix du bon format d’image est essentiel. PNG convient bien aux visuels détaillés, tels que les graphiques et les logos, mais peut augmenter la taille du fichier. JPEG est une meilleure option pour les photos, tandis que WebP est souvent converti, ce qui peut augmenter davantage la taille du fichier.

Pour améliorer la netteté des images, augmentez le facteur d’échelle de l’appareil :

await page.setViewport({
  width: 1200,
  height: 800,
  deviceScaleFactor: 2
});

Problèmes courants et solutions

La résolution de difficultés fréquentes, telles que la gestion des ressources, la taille des fichiers et les erreurs, peut considérablement améliorer les performances.

  • Gestion des ressources
    Utilisez une seule instance de navigateur et une seule page pour traiter plusieurs demandes de PDF, afin de réduire la surcharge :

    const browser = await puppeteer.launch({
      args: ['--no-sandbox', '--disable-setuid-sandbox']
    });
    
    const page = await browser.newPage();
    for (const request of requests) {
      await generatePDF(page, request);
    }
    
  • Optimisation de la taille des fichiers
    Réduisez la taille du fichier en supprimant les éléments inutiles et en optimisant les images :

    await page.evaluate(() => {
      document.querySelectorAll('.no-print').forEach(el => el.remove());
    
      document.querySelectorAll('img').forEach(img => {
        img.loading = 'lazy';
        img.decoding = 'async';
      });
    });
    
  • Gestion des erreurs
    Mettez en place des stratégies pour gérer les erreurs telles que les délais d’expiration et les nouvelles tentatives :

    const generatePDF = async (page, options) => {
      try {
        await page.goto(options.url, {
          waitUntil: 'networkidle0',
          timeout: 30000
        });
        return await page.pdf(options);
      } catch (error) {
        console.error('PDF generation failed:', error);
        throw error;
      }
    };
    

Conclusion

L’utilisation de Puppeteer pour convertir du HTML en PDF fournit des outils efficaces pour créer des documents de qualité professionnelle.

Étapes clés à suivre

  • Appliquez les paramètres de média d’impression avec page.emulateMediaType('print').
  • Utilisez des règles CSS telles que page-break-inside: avoid pour garantir que les éléments comme les lignes de tableau restent intacts.

Ces techniques s’appuient sur les méthodes de style et de mise en page précédentes, et constituent une base solide pour une automatisation plus avancée.

Options d’automatisation avancées

Vous pouvez aller plus loin dans la génération de PDF grâce à ces fonctionnalités d’automatisation supplémentaires :

  • Configuration de l’environnement
    Configurez les répertoires de cache et les paramètres du navigateur afin d’obtenir des résultats cohérents sur les différentes plateformes.
  • Optimisations des performances
    Ajustez les paramètres de délai d’expiration et ajoutez des mécanismes de nouvelle tentative pour améliorer la fiabilité pendant le processus de génération.

Lors du déploiement de ces méthodes en production, intégrez une gestion des erreurs et une journalisation afin de maintenir des sorties PDF cohérentes et fiables.

FAQ

Frequently Asked Questions

Puppeteer est une bibliothèque d’automatisation de navigateur pour Node.js qui restitue du HTML avec CSS et JavaScript, puis exporte des PDF soignés en contrôlant le format de page, les marges, les en-têtes, les pieds de page et les styles spécifiques à l’impression.

Cela vous a aidé ? Partagez-le →

Écrit par

Vasiliy Datsenko

Responsable du support client

Vasiliy Datsenko est responsable du support client chez Latenode et un rédacteur en automatisation axé sur les produits. Son travail relie les conversations clients, la recherche sur l'automatisation des flux de travail, les cas d'utilisation de l'IA et la formation pratique sur les produits pour les équipes cherchant à automatiser des processus métier réels.

Profil de l'auteur →

Vérifié par

Oleg Zankov

PDG de Latenode, expert en no-code

Avec une philosophie ancrée dans l'innovation, la résolution de problèmes et l'expérience utilisateur, je me consacre à donner aux équipes les moyens de créer des intégrations sur mesure et d'automatiser les workflows avec facilité et efficacité. Fort d'une riche expérience en développement commercial, entrepreneurship technologique et développement logiciel, j'ai reconnu le besoin d'une solution d'intégration plus accessible, évolutive et adaptable. Ainsi est né Latenode.com. Grâce à notre plateforme, les entreprises peuvent exploiter la puissance de la technologie sans nécessiter de compétences approfondies en codage. Passionné par la création d'un avenir où la technologie nous sert, et non l'inverse, ma mission est de simplifier les processus complexes. Je crois en la démocratisation de la technologie et en dotant les équipes des outils nécessaires pour innover, croître et réussir dans un monde de plus en plus numérique.

Profil de l'auteur →

Continuer la lecture