Imaginez qu'on vous confie une tâche : créer un nouveau site Web de documentation en une semaine. Il doit être visuellement attrayant, rapide et facile à naviguer. Vous recevez une pile de fichiers *.docs, d'images et de captures d'écran, avec l'instruction de "faire le travail".
Il existe de nombreux excellents outils parmi lesquels choisir, tels que Docusaurus, Nextra, VitePress, Docus et d'autres. Auparavant, j'avais une grande expérience dans la création d'un site Web de documentation avec Starlight, c'était donc mon choix pour cette tâche. Cependant, j'ai découvert une fonctionnalité manquante : la possibilité de générer un PDF à partir de la documentation. Et c'était l'une des exigences. "Ça ressemble à un joli projet parallèle", ai-je pensé.
S'attaquer à la tâche
Au début, cela semblait simple : récupérer les pages, analyser le HTML, regrouper le contenu, et le tour est joué !
Les sites Web alimentés par Starlight ont un bouton Suivant pour naviguer dans la documentation. Comme le PDF est essentiellement un tableau de pages, il semblait logique de les analyser une par une, à l'aide de ce bouton Suivant. Étant donné que le site Web génère des pages statiques, j'ai rapidement écrit un script pour récupérer le code HTML, interroger les parties nécessaires et combiner le tout. Cependant, générer un PDF conservant les styles du site Web s'est avéré plus complexe. Après quelques réflexions, j'ai réalisé que Puppeteer était la meilleure solution.
Maintenant, le processus est devenu clair :
- Identifiez la page de démarrage. Il s'agit de la première page avec un bouton Suivant.
- Naviguez à travers les pages. Extrayez le titre et le contenu principal de chaque page et créez en même temps une table des matières.
- Combinez le contenu. Ajoutez des sauts de page et des styles supplémentaires.
- Préparez le HTML final. Réécrivez le de la page initiale avec le HTML résultant.
- Charger les ressources. Faites défiler la page vers le bas pour charger toutes les images.
- Générez le PDF. La méthode Page.pdf() de Puppeteer réussit.
- Fait !
Voici comment fonctionne starlight-to-pdf. En suivant ce modèle, vous pouvez créer des outils similaires pour d'autres cadres de documentation dépourvus de fonctionnalité d'exportation PDF.
Prochaines étapes
Une fois les fonctionnalités de base prêtes, il était temps d'ajouter quelques extras. Vous trouverez ci-dessous les fonctionnalités les plus intéressantes et les plus stimulantes.
Ajout d'en-têtes et de pieds de page
C'est bien d'avoir un numéro de page et quelques informations supplémentaires dans l'en-tête ou le pied de page. La méthode Page.pdf() de Puppeteer accepte les options headerTemplate et footerTemplate. Ces options acceptent les chaînes HTML. Puppeteer injecte automatiquement des valeurs dans les éléments qui ont des classes utilitaires spécifiques :
- .date : date formatée ;
-
.title :
de la page Web. valeur de la balise ; - .url : URL de la page sur laquelle la fonction d'impression a été appelée ;
- .pageNumber : numéro de la page actuelle ;
- .totalPages : nombre total de pages dans le document.
Comme nous regroupons tout le contenu sur une seule page avant l'impression, le titre et l'url n'ont pas beaucoup de valeur pour nous : la valeur insérée restera toujours la même. Cependant, d’autres cours aident beaucoup. Voici un exemple de modèle de pied de page :
<style> .footer-container { --color: #000; display: flex; align-items: center; justify-content: space-between; border-block-start: 1px solid var(--color); color: var(--color); font-size: 10px; font-family: Arial, Helvetica, sans-serif; margin-inline: 1.5cm 1cm; padding-block: 0.25cm 0.5cm; width: 100%; } </style> <div> <p>To use this, do not forget to set the displayHeaderFooter property to true:<br> </p> <pre class="brush:php;toolbar:false">import puppeteer from 'puppeteer'; const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://someUrl'); const footerTemplateStr = '<style>...<style><div>...</style>
Voici quelques constatations que vous devez garder à l’esprit :
- Le modèle doit être une structure HTML valide.
- Définissez la propriété CSS font-size car la valeur par défaut de Puppeteer est 0.
- Utilisez le
- Les images doivent être codées sous forme de chaînes base64.
- Utilisez l'option de marge de Puppeteer pour obtenir la mise en page souhaitée.
Qu’en est-il des styles CLI ?
Tout fonctionne bien, le PDF obtenu est superbe, mais les messages du terminal semblent fades. L’attention aux détails sépare le bon du grand, n’est-ce pas ? Rendons nos messages plus colorés et plus faciles à lire.
Voici la magie des séquences d'échappement ANSI. J'ai décidé que des couleurs 4 bits seraient suffisantes pour le travail. Disons que vous souhaitez avoir un texte blanc sur fond rouge (c'est ce que j'ai utilisé pour mon [ERROR] : préfixe avant les messages d'erreur). Voici comment obtenir ce look :
console.log('\x1b[37;41m', 'White on red message');
Décomposons-le :
- x1b[ est un code d'échappement hexadécimal (vous pouvez également utiliser u001b comme alternative Unicode) ;
- 37 est une couleur blanche de premier plan, où 3 représente le premier plan et 7 la couleur blanche ;
- 41 est une couleur de fond rouge, où 4 représente le fond et 1 la couleur rouge.
Tout fonctionne, mais désormais toute notre sortie console.log() sera stylée de cette manière. Pour réinitialiser le style par défaut, ajoutez simplement la séquence de réinitialisation x1b[0m à la fin :
console.log('\x1b[37;41m', 'White on red message', '\x1b[0m');
Beaucoup mieux. Et si nous voulons du texte cyan en gras sur fond gris (noir brillant dans les noms des couleurs 4 bits) ? C'est simple :
console.log('\x1b[1;36;100m', 'Cyan on gray message in bold', '\x1b[0m');
Voici ce que fait chaque partie :
- 1 après le code d'échappement applique l'effet gras ;
- 36 définit la couleur du texte sur cyan ;
- 100 change l'arrière-plan en couleur noir vif, où 10 signifie brillant et 0 est un code pour noir.
En utilisant ces connaissances, vous pouvez rendre votre outil CLI visuellement attrayant. Par exemple, j'ai stylisé toutes les URL et chemins de fichiers sous forme de texte bleu souligné dans mon projet :
console.log('\x1b[4;34m', './underlined/blue', '\x1b[0m')
Consultez cette aide-mémoire pour en savoir plus sur le sujet.
Conclusion
On ne sait jamais quand une tâche de routine pourrait inspirer un projet parallèle enrichissant. Le développement de starlight-to-pdf a fourni une expérience précieuse avec le style Puppeteer et CLI, et un nouvel outil a émergé dans la communauté open source. Voici une démonstration rapide :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Explication détaillée de la méthode de remplacement de la chaîne JavaScript et de la FAQ Cet article explorera deux façons de remplacer les caractères de chaîne dans JavaScript: le code JavaScript interne et le HTML interne pour les pages Web. Remplacer la chaîne dans le code JavaScript Le moyen le plus direct consiste à utiliser la méthode Remplace (): str = str.replace ("trouver", "remplacer"); Cette méthode remplace uniquement la première correspondance. Pour remplacer toutes les correspondances, utilisez une expression régulière et ajoutez le drapeau global G: str = str.replace (/ fi

Ce tutoriel vous montre comment intégrer une API de recherche Google personnalisée dans votre blog ou site Web, offrant une expérience de recherche plus raffinée que les fonctions de recherche de thème WordPress standard. C'est étonnamment facile! Vous pourrez restreindre les recherches à Y

Cette série d'articles a été réécrite à la mi-2017 avec des informations à jour et de nouveaux exemples. Dans cet exemple JSON, nous examinerons comment nous pouvons stocker des valeurs simples dans un fichier à l'aide du format JSON. En utilisant la notation de paire de valeurs clés, nous pouvons stocker n'importe quel type

Vous voici donc, prêt à tout savoir sur cette chose appelée Ajax. Mais qu'est-ce que c'est exactement? Le terme Ajax fait référence à un regroupement lâche de technologies utilisées pour créer un contenu Web interactif dynamique. Le terme Ajax, inventé à l'origine par Jesse J

Améliorez votre présentation de code: 10 surligneurs de syntaxe pour les développeurs Partager des extraits de code sur votre site Web ou votre blog est une pratique courante pour les développeurs. Le choix du bon surligneur de syntaxe peut améliorer considérablement la lisibilité et l'attrait visuel. T

Tirez parti de jQuery pour les dispositions de page Web sans effort: 8 plugins essentiels JQuery simplifie considérablement la mise en page de la page Web. Cet article met en évidence huit puissants plugins jQuery qui rationalisent le processus, particulièrement utile pour la création de sites Web manuels

Cet article présente une sélection organisée de plus de 10 didacticiels sur les cadres JavaScript et JQuery Model-View-Controller (MVC), parfait pour augmenter vos compétences en développement Web au cours de la nouvelle année. Ces tutoriels couvrent une gamme de sujets, de Foundatio

Points de base Ceci dans JavaScript fait généralement référence à un objet qui "possède" la méthode, mais cela dépend de la façon dont la fonction est appelée. Lorsqu'il n'y a pas d'objet actuel, cela fait référence à l'objet global. Dans un navigateur Web, il est représenté par Window. Lorsque vous appelez une fonction, cela maintient l'objet global; mais lors de l'appel d'un constructeur d'objets ou de l'une de ses méthodes, cela fait référence à une instance de l'objet. Vous pouvez modifier le contexte de ceci en utilisant des méthodes telles que Call (), Appliquer () et Bind (). Ces méthodes appellent la fonction en utilisant la valeur et les paramètres donnés. JavaScript est un excellent langage de programmation. Il y a quelques années, cette phrase était


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Navigateur d'examen sécurisé
Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

DVWA
Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

SublimeText3 version anglaise
Recommandé : version Win, prend en charge les invites de code !

Version crackée d'EditPlus en chinois
Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

SublimeText3 Linux nouvelle version
Dernière version de SublimeText3 Linux
