recherche
Maisoninterface Webjs tutorielTransformer Starlight en PDF : expérience et perspectives

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 :

  1. Identifiez la page de démarrage. Il s'agit de la première page avec un bouton Suivant.
  2. 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.
  3. Combinez le contenu. Ajoutez des sauts de page et des styles supplémentaires.
  4. Préparez le HTML final. Réécrivez le de la page initiale avec le HTML résultant.
  5. Charger les ressources. Faites défiler la page vers le bas pour charger toutes les images.
  6. Générez le PDF. La méthode Page.pdf() de Puppeteer réussit.
  7. 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>
' // replace with the HTML string from the example above await page.pdf({ displayHeaderFooter: true, footerTemplate: footerTemplateStr })

Voici quelques constatations que vous devez garder à l’esprit :

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 :

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 :

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 :

Transforming Starlight into PDF: experience and insights

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!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Remplacer les caractères de chaîne en javascriptRemplacer les caractères de chaîne en javascriptMar 11, 2025 am 12:07 AM

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

Tutoriel de configuration de l'API de recherche Google personnaliséTutoriel de configuration de l'API de recherche Google personnaliséMar 04, 2025 am 01:06 AM

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

Exemple Couleurs Fichier JSONExemple Couleurs Fichier JSONMar 03, 2025 am 12:35 AM

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

Créez vos propres applications Web AjaxCréez vos propres applications Web AjaxMar 09, 2025 am 12:11 AM

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

10 Highlighters de syntaxe jQuery10 Highlighters de syntaxe jQueryMar 02, 2025 am 12:32 AM

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

8 Superbes plugins de mise en page JQuery Page8 Superbes plugins de mise en page JQuery PageMar 06, 2025 am 12:48 AM

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

10 tutoriels JavaScript & jQuery MVC10 tutoriels JavaScript & jQuery MVCMar 02, 2025 am 01:16 AM

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

Qu'est-ce que & # x27; ceci & # x27; en javascript?Qu'est-ce que & # x27; ceci & # x27; en javascript?Mar 04, 2025 am 01:15 AM

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

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Navigateur d'examen sécurisé

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

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

SublimeText3 version anglaise

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

Version crackée d'EditPlus en chinois

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

SublimeText3 Linux nouvelle version

Dernière version de SublimeText3 Linux