Stellen Sie sich vor, Sie erhalten eine Aufgabe: Erstellen Sie in einer Woche eine neue Dokumentationswebsite. Es sollte optisch ansprechend, schnell und einfach zu navigieren sein. Sie erhalten einen Stapel *.docs-Dateien, Bilder und Screenshots mit der Anweisung, „erledigen“.
Es stehen viele hervorragende Tools zur Auswahl, wie zum Beispiel Docusaurus, Nextra, VitePress, Docus und andere. Zuvor hatte ich großartige Erfahrungen beim Erstellen einer Dokumentationswebsite mit Starlight gemacht, daher war es meine Wahl für diese Aufgabe. Allerdings habe ich eine fehlende Funktion entdeckt: die Möglichkeit, aus der Dokumentation ein PDF zu generieren. Und es war eine der Anforderungen. „Klingt nach einem netten Nebenprojekt“, dachte ich mir.
Die Aufgabe angehenStarlight-basierte Websites verfügen über eine Schaltfläche „Weiter“, um durch die Dokumentation zu navigieren. Da es sich bei PDF im Wesentlichen um eine Reihe von Seiten handelt, schien es logisch, diese mit der Schaltfläche „Weiter“ einzeln zu analysieren. Da die Website statische Seiten generiert, habe ich schnell ein Skript geschrieben, um den HTML-Code abzurufen, die erforderlichen Teile abzufragen und alles zusammenzufügen. Allerdings erwies sich die Erstellung einer PDF-Datei, die den Stil der Website beibehielt, als komplexer. Nach einigem Brainstorming wurde mir klar, dass Puppeteer die beste Lösung war.
Jetzt wurde der Prozess klar:
Nächste Schritte
Kopf- und Fußzeilen hinzufügen
Da wir den gesamten Inhalt vor dem Drucken auf einer Seite zusammenfassen, haben Titel und URL für uns keinen großen Wert: Der eingefügte Wert bleibt immer derselbe. Andere Kurse helfen jedoch sehr. Hier ist ein Beispiel für eine Fußzeilenvorlage:
<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>...</div>' // replace with the HTML string from the example above await page.pdf({ displayHeaderFooter: true, footerTemplate: footerTemplateStr })
Hier sind einige Erkenntnisse, die Sie im Hinterkopf behalten sollten: