Starlight の PDF への変換: 経験と洞察
あなたに、1 週間以内に新しいドキュメント Web サイトを作成するというタスクが与えられたと想像してください。視覚的に魅力的で、高速で、操作が簡単である必要があります。 「やってください」 という指示とともに、大量の *.docs ファイル、画像、スクリーンショットが渡されます。
Docusaurus、Nextra、VitePress、Docus など、選択できる優れたツールが多数あります。以前、Starlight を使用してドキュメント Web サイトを構築した素晴らしい経験があったため、このタスクには Starlight を選択しました。しかし、ドキュメントから PDF を生成する機能という欠けている機能を発見しました。そしてそれは要件の1つでした。 「素敵なサイドプロジェクトですね」 私は自分で考えました。
課題に取り組む
最初は簡単そうに思えました。ページを取得し、HTML を解析し、コンテンツをグループ化すれば、出来上がりです!
Starlight を利用した Web サイトには、ドキュメント内を移動するための「次へ」ボタンがあります。 PDF は本質的にページの配列であるため、この「次へ」ボタンを使用してページを 1 つずつ解析するのが合理的であると思われます。 Web サイトは静的ページを生成するため、HTML をフェッチし、必要な部分をクエリして、すべてを組み合わせるスクリプトをすぐに作成しました。ただし、Web サイトのスタイルを保持した PDF を生成することは、より複雑であることが判明しました。ブレーンストーミングを行った結果、Puppeteer が最適なソリューションであることがわかりました。
これでプロセスが明らかになりました:
- 開始ページを特定します。 これは、「次へ」ボタンがある最初のページです。
- ページ内を移動します。 各ページから見出しとメインコンテンツを抽出し、同時に目次を作成します。
- コンテンツを結合します。 改ページと追加のスタイルを追加します。
- 最終的な HTML を準備します。 を書き換えます。結果の HTML を含む最初のページ。
- リソースを読み込みます。 ページを一番下までスクロールして、すべての画像を読み込みます。
- PDF を生成します。 Puppeteer の Page.pdf() メソッドはそれを成功させます。
- 完了!
これが starlight-to-pdf の仕組みです。このパターンに従って、PDF エクスポート機能が欠けている他のドキュメント フレームワーク用に同様のツールを構築できます。
次のステップ
基本的な機能の準備ができたら、いくつかの追加機能を追加します。以下は、最も興味深く、やりがいのある機能です。
ヘッダーとフッターの追加
ヘッダーまたはフッターにページ番号と追加情報があると便利です。 Puppeteer の Page.pdf() メソッドは、headerTemplate オプションと footerTemplate オプションを受け入れます。これらのオプションは HTML 文字列を受け入れます。 Puppeteer は、特定のユーティリティ クラスを持つ要素に値を自動的に挿入します。
- .date: フォーマットされた日付;
-
.title: Web ページの
タグ値; - .url: 印刷機能が呼び出されたページの URL;
- .pageNumber: 現在のページ番号;
- .totalPages: ドキュメント内の総ページ数。
印刷前にすべてのコンテンツを 1 ページに結合するため、タイトルと URL にはあまり意味がありません。挿入された値は常に同じままです。ただし、他のクラスは非常に役立ちます。フッター テンプレートの例を次に示します:
<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 })
心に留めておくべきいくつかの発見事項があります:
- テンプレートは有効な HTML 構造である必要があります。
- Puppeteer のデフォルト値が 0 であるように、CSS のフォント サイズ プロパティを定義します。
- インライン を使用します。タグを使用してスタイルを定義します。ウェブサイトのスタイルはテンプレート内では使用できません。
- 画像はbase64文字列としてエンコードする必要があります。
- 希望のレイアウトを実現するには、Puppeteer のマージン オプションを使用します。
CLI スタイルについてはどうですか?
すべてが正常に動作し、結果として得られる PDF は見栄えがしますが、端末のメッセージは味気ないように感じられます。細部へのこだわりが良いものと素晴らしいものを分けますね。メッセージをもっとカラフルにして読みやすくしましょう。
ANSI エスケープ シーケンスの魔法がここにあります。この仕事には 4 ビット カラーで十分であると判断しました。赤い背景に白いテキストを表示したいとします (これは、エラー メッセージの前の [ERROR]: プレフィックスに使用したものです)。この外観を実現する方法は次のとおりです:
console.log('\x1b[37;41m', 'White on red message');
詳しく見てみましょう:
- x1b[ は 16 進数のエスケープ コードです (Unicode の代替として u001b を使用することもできます);
- 37 は前景の白色で、3 は前景、7 は白色を表します。
- 41 は背景の赤色で、4 は背景、1 は赤色を表します。
すべてが機能していますが、console.log() 出力はすべてこの方法でスタイル設定されます。スタイルをデフォルトにリセットするには、最後にリセット シーケンス x1b[0m:
を追加するだけです。
console.log('\x1b[37;41m', 'White on red message', '\x1b[0m');
ずっと良くなりました。灰色の背景 (4 ビット色の名前では明るい黒) に太字のシアンのテキストが必要な場合はどうすればよいでしょうか?簡単です:
console.log('\x1b[1;36;100m', 'Cyan on gray message in bold', '\x1b[0m');
各部分の機能は次のとおりです:
- 1 エスケープ コードが太字効果を適用した後;
- 36 テキストの色をシアンに設定します。
- 100 は背景を明るい黒色に変更します。10 は 明るい を意味し、0 は 黒 を表すコードです。
この知識を使用すると、CLI ツールを視覚的に魅力的なものにすることができます。たとえば、プロジェクトではすべての URL とファイル パスを下線付きの青いテキストとしてスタイル設定しました。
console.log('\x1b[4;34m', './underlined/blue', '\x1b[0m')
このトピックの詳細については、このチートシートを確認してください。
まとめ
日常的なタスクが、いつやりがいのあるサイド プロジェクトのきっかけとなるかはわかりません。 starlight-to-pdf の開発により、Puppeteer と CLI スタイリングに関する貴重な経験が得られ、オープンソース コミュニティに新しいツールが登場しました。以下に簡単なデモンストレーションを示します:
以上がStarlight の PDF への変換: 経験と洞察の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。
