あなたに、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>...</style>
心に留めておくべきいくつかの発見事項があります:
- テンプレートは有効な 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 サイトの他の関連記事を参照してください。

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、JavaScriptには強力なフロントエンドフレームワークがあります。

JavaScriptフレームワークのパワーは、開発を簡素化し、ユーザーエクスペリエンスとアプリケーションのパフォーマンスを向上させることにあります。フレームワークを選択するときは、次のことを検討してください。1。プロジェクトのサイズと複雑さ、2。チームエクスペリエンス、3。エコシステムとコミュニティサポート。

はじめに私はあなたがそれを奇妙に思うかもしれないことを知っています、JavaScript、C、およびブラウザは正確に何をしなければなりませんか?彼らは無関係であるように見えますが、実際、彼らは現代のウェブ開発において非常に重要な役割を果たしています。今日は、これら3つの間の密接なつながりについて説明します。この記事を通して、JavaScriptがブラウザでどのように実行されるか、ブラウザエンジンでのCの役割、およびそれらが協力してWebページのレンダリングと相互作用を駆動する方法を学びます。私たちは皆、JavaScriptとブラウザの関係を知っています。 JavaScriptは、フロントエンド開発のコア言語です。ブラウザで直接実行され、Webページが鮮明で興味深いものになります。なぜJavascrを疑問に思ったことがありますか


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

Dreamweaver Mac版
ビジュアル Web 開発ツール

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