目次
コアポイント
実装
Aurelia Custom Elementを作成
プラグインを作成
最適
についての
ホームページ ウェブフロントエンド jsチュートリアル Aureliaの冒険:カスタムPDFビューアの作成

Aureliaの冒険:カスタムPDFビューアの作成

Feb 17, 2025 am 09:03 AM

Adventures in Aurelia: Creating a Custom PDF Viewer

この記事は、Vildan Softicによって査読されました。 SetePointのすべてのピアレビューアーズに感謝します。

WebアプリケーションでのPDFファイルの処理は常に非常に注意が必要です。運が良ければ、ユーザーはファイルをダウンロードするだけです。しかし、時には、ユーザーはより多くの機能を必要とします。私は過去に幸運でしたが、今回は、ユーザーが各ページに関連するメタデータを保存できるようにPDFドキュメントを表示するためにアプリを必要としています。以前は、人々はこれを実現するためにブラウザで実行するために高価なPDFプラグイン(Adobe Readerなど)を使用していたかもしれません。ただし、しばらくして実験の後、WebアプリケーションにPDFビューアーを統合するより良い方法を見つけました。今日は、AureliaとPDF.JSを使用してPDF処理を簡素化する方法を学びます。

コアポイント

  • AureliaとPDF.JSを使用して、スケーリングやスクロールなどの機能を備えたカスタムで効率的なPDFビューアを作成して、ユーザーの相互作用とパフォーマンスを強化します。
  • Aureliaの現在のページやズームレベルなどの属性に双方向データバインディングを実装し、アプリケーションでシームレスな統合と動的更新を可能にします。
  • PDFビューアを再利用可能なAureliaカスタム要素に開発し、競合することなく複数の視聴者をアプリケーションに追加できるようにします。
  • PDF.jsを使用して、PDFレンダリングを処理し、非同期操作とWebワーカーをサポートして処理をアンインストールし、UI応答速度を改善します。
  • 特に大規模なドキュメントを効果的に処理する際に、仮想スクロールやその他の最適化を考慮して、潜在的なパフォーマンスの問題に対処します。
  • カスタムPDFビューアーをAureliaプラグインに変換して、他のプロジェクトやアプリケーションに簡単に統合できるようにする可能性を探ります。

概要:目標

今日の目標は、AureliaにPDF Viewerコンポーネントを構築することです。主な要件は3つあります

    ユーザーに、ドキュメントを読み込んで、スクロールしてズームイン/アウトして、優れたパフォーマンスを拡大できるようにしたいと考えています。
  1. 視聴者のプロパティ(現在のページや現在のズームレベルなど)をアプリケーション内のプロパティに双方向にバインドできるようにしたいと考えています。
  2. この視聴者が再利用可能なコンポーネントであることを望んでいます。
このチュートリアルのコードは、GitHubリポジトリで、ここで完成したコードのデモを見つけることができます。

はじめにpdf.js

pdf.jsは、Mozilla Foundationによって書かれたJavaScriptライブラリです。 PDFドキュメントをロードし、ファイルと関連するメタデータを解析し、ページ出力をDOMノード(通常は

要素)にレンダリングします。プロジェクトに含まれるデフォルトの視聴者は、ChromeおよびFirefoxの組み込みPDF視聴者のサポートを提供し、スタンドアロンのページまたはリソース(IFRAMEに組み込まれた)として使用できます。 <canvas></canvas>

これは本当にクールです。ここでの問題は、デフォルトの視聴者が多くの機能を備えているものの、スタンドアロンのWebページとして設計されていることです。これは、Webアプリケーションに統合できるが、基本的にIframeサンドボックス内で実行する必要があることを意味します。デフォルトのビューアーは、クエリ文字列を介して構成入力を取得するように設計されていますが、最初の読み込み後に構成を簡単に変更することも、視聴者から情報やイベントを簡単に取得することもできません。イベントの取り扱いと双方向のバインディングを含むAurelia Webアプリケーションと統合するには、Aureliaカスタムコンポーネントを作成する必要があります。

注:pdf.jsに関するレビューが必要な場合は、チュートリアルをご覧ください:Mozillaのpdf.js

を使用してJavaScriptでカスタムPDFレンダリング

実装

目標を達成するために、Aureliaカスタム要素を作成します。ただし、デフォルトのビューアーをコンポーネントに入れません。代わりに、PDF.JSコアライブラリとビューアーライブラリに接続する独自の視聴者を作成して、バインド可能なプロパティとレンダリングの制御を最大化できるようにします。最初の概念実証については、Aurelia Skeletonアプリケーションから始めます。

Photoscope Code

上記のリンクからわかるように、Skeletonアプリケーションには多くのファイルがあり、その多くは必要ありません。操作を簡素化するために、合理化されたバージョンのスケルトンを準備し、コンテンツを追加しました。

PDFファイルをDISTフォルダーにコピーするためのGULPタスク(Aureliaはバンドルに使用されます)。

    pdf.js依存関係がpackage.jsonに追加されました。
  • アプリケーションルートディレクトリでは、index.htmlおよびindex.cssがいくつかの初期スタイル設定を受けています。
  • 使用するファイルの空のコピーが追加されました。
  • ファイルsrc/resources/elements/pdf-document.cssには、カスタム要素のCSSスタイルがいくつか含まれています。
  • それでは、アプリケーションを稼働させて実行しましょう。
最初に、GulpとJSPMがグローバルにインストールされていることを確認してください:

次に、スケルトンをクローンして入力します:

npm install -g gulp jspm
ログイン後にコピー
ログイン後にコピー

次に、必要な依存関係をインストールします:

git clone git@github.com:sitepoint-editors/aurelia-pdfjs.git -b skeleton
cd aurelia-pdfjs
ログイン後にコピー
ログイン後にコピー

最後にガルプウォッチを実行し、http:// localhost:9000に移動します。すべてが計画に従って進む場合は、ウェルカムメッセージが表示されるはずです。

npm install
jspm install -y
ログイン後にコピー
ログイン後にコピー

その他の設定

次に行うべきことは、いくつかのPDFファイルを見つけてSRC/ドキュメントに入れることです。それらを1つの.pdfと2.pdfに名前を付けます。カスタムコンポーネントのテストを最大化するために、Gutenbergプロジェクトで見つけることができる戦争や平和など、PDFファイルの1つが非常に長いことが最善です。

PDFファイルを配置した後、src/app.htmlとsrc/app.jsを開いた後(同意して、アプリコンポーネントはAureliaアプリケーションのルートコンポーネントです)。コード:src/app.htmlおよびsrc/app.js。このチュートリアルでは、これらのファイルについては説明しませんが、コードには良いコメントがあります。

Gulpはこれらの変更を自動的に検出し、アプリケーションのUIレンダリングを確認する必要があります。それが設定です。ここで表示を開始します...

Aurelia Custom Elementを作成

Aureliaビューに直接使用できるコンポーネントを作成する必要があります。 AureliaビューはHTML5テンプレートタグに含まれるHTMLスニペットにすぎないため、例は次のようになるかもしれません。

npm install -g gulp jspm
ログイン後にコピー
ログイン後にコピー

タグは、カスタム要素の例です。 ITとそのプロパティ(スケールやページなど)はHTMLのネイティブプロパティではありませんが、Aureliaカスタム要素を使用して作成できます。カスタム要素は、Aureliaの基本的なビルディングブロック:Views and ViewModelを使用して、簡単に作成できます。したがって、以下に示すように、最初にPDF-Document.jsという名前のViewModelを構築します。 <pdf-document>

ここに注意するメインコンテンツは、
git clone git@github.com:sitepoint-editors/aurelia-pdfjs.git -b skeleton
cd aurelia-pdfjs
ログイン後にコピー
ログイン後にコピー
デコレーターです。関連属性に対して、カスタム要素に配置します。これにより、要素のプロパティを変更するだけで、PDFビューアを制御できます。

@bindable次に、ViewModelとペアになった初期ビューを作成します。 defaultBindingMode: bindingMode.twoWay

(以下のコンテンツは基本的に元のテキストと一致していますが、流encyさと読みやすさを維持し、重複を避けるために詳細に調整されています。)
npm install
jspm install -y
ログイン後にコピー
ログイン後にコピー

統合されたpdf.js

pdf.jsは、コアライブラリ(PDFドキュメントの解析と解釈の処理)、ディスプレイライブラリ(コアレイヤーの上にあるAPIの構築)、およびWeb Viewerプラグイン(事前に構築されたWewored(前述のWebページ)。私たちの目的のために、ディスプレイAPIを介してコアライブラリを使用します。

show apiは、pdfjsという名前のライブラリオブジェクトをエクスポートします。これにより、いくつかの構成変数を設定し、pdfjs.getdocument(url)を使用してドキュメントをロードできます。 APIは完全に非同期です - Webワーカーにメッセージを送信および受信するため、JavaScriptの約束に大きく依存しています。主に、pdfjs.getDocument()メソッドから非同期に返されたpdfdocumentproxyオブジェクトと、pdfdocumentproxy.getPage()から非同期に返されたpdfpageproxyオブジェクトを使用します。

ドキュメントは少しまばらですが、pdf.jsには、こことここで基本的な視聴者を作成する例がいくつかあります。これに基づいてカスタムコンポーネントを構築します。

Webワーカーの統合

PDF.JSは、Webワーカーを使用してレンダリングタスクをアンインストールします。 Webワーカーがブラウザ環境でどのように実行されるか(実際にはサンドボックス化されています)。通常のモジュールローダーの代わりにJavaScriptファイルへの直接フ​​ァイルパスを使用してWebワーカーをロードすることを余儀なくされています。幸いなことに、Aureliaはローダーの抽象化を提供するため、静的ファイルパスを参照する必要はありません(アプリケーションをバンドルすると変更される場合があります)。

リポジトリのバージョンをフォローしている場合は、PDFJS-Distパッケージをインストールしている可能性があります。そうしないと、これを今すぐ行う必要があります(たとえば、JSPM JSPMインストールNPM:pdfjs-dist@^1.5.391) 。次に、Aureliaの依存関係噴射モジュールを使用してAureliaのローダー抽象化を挿入し、次のようにコンストラクターにWebワーカーファイルをロードするためにローダーを使用します。

ページの読み込み

pdf.jsライブラリは、PDFドキュメントの読み込み、解析、表示を処理します。部分的なダウンロードと認証をサポートするサポートが組み込まれています。私たちがしなければならないのは、関連するドキュメントのURIを提供することです。

PDFの読み込みと表示は、この場合はURL属性によって駆動されます。基本的に、URLが変更されたとき、カスタム要素はPDF.jsにファイルへの要求を発行するように依頼する必要があります。これをUrlChanged Handlerで行い、コンストラクターにいくつかの変更を加えて、いくつかのプロパティを初期化し、切り離された方法にいくつかの変更をクリーンアップします。

ドキュメントの各ページについて、固定された高さのスクロール可能な容器にあるDOMに

要素を作成します。これを行うには、リピーターを使用して、Aureliaの基本的なテンプレート機能を使用します。各PDFページには独自のサイズと方向を持つことができるため、PDFページビューポートに従って各キャンバス要素の幅と高さを設定します。 <canvas></canvas>

レンダリングページ

ページをロードしたので、それらをDOM要素にレンダリングできる必要があります。これを行うには、pdf.jsのレンダリング機能に依存します。 PDF.JS Viewer Libraryには、レンダリングページに専念する非同期APIがあります。このコードを例から抽出し、レンダリング関数に包みます:

スクロールを実装します

馴染みのあるシームレスな体験を提供するために、コンポーネントは完全にスクロール可能なドキュメントの一部としてページを表示する必要があります。これを行うには、CSSを通じて達成できるスクロールオーバーフローで、コンテナに固定された高さを持たせることができます。

大規模なドキュメントのパフォーマンスを最大化するために、次のことを行います。まず、AureliaのTaskqueueを使用してDOMをバッチ変更します。第二に、PDF.JSがレンダリングしたページを追跡するため、行った作業をやり直す必要はありません。最後に、Aureliaのdebounceバインディング挙動を使用して、スクロールが停止した後にのみ、可視ページをレンダリングします。スクロールするときの実行方法は次のとおりです

スケーリングを達成

スケーリングするときは、現在のズームレベルを更新します。これをScaleChanged Property Handlerで行います。基本的に、特定のスケールの各ページの新しいビューポートサイズを反映するように、すべてのキャンバス要素をサイズ変更します。次に、現在のビューポートに表示されているものを再レンダリングし、ループを再起動します。

最終結果

目標を確認しましょう:

  1. ユーザーに、ドキュメントを読み込んで、スクロールしてズームイン/アウトして、優れたパフォーマンスを拡大できるようにしたいと考えています。
  2. 視聴者のプロパティ(現在のページや現在のズームレベルなど)をアプリケーション内のプロパティに双方向にバインドできるようにしたいと考えています。
  3. この視聴者が再利用可能なコンポーネントであることを望んでいます。

最終コードは、GitHubリポジトリと、ここの完成したコードのデモに記載されています。改善の余地はまだありますが、目標を達成しました!

(以下のコンテンツは基本的に元のテキストと一致していますが、流encyさと読みやすさを維持し、重複を避けるために詳細に調整されています。)

プロジェクト後の分析と改善

常に改善の余地があります。 PDF Viewerの実装でアップグレードしたいことがあります:

プラグインを作成

Aureliaはプラグインシステムを提供します。この概念実証をAureliaプラグインに変換すると、Aureliaアプリケーションの使用不在リソースになります。 Aurelia Githubリポジトリは、良い出発点となるプラグインスケルトンプロジェクトを提供します。このようにして、他の人はそれを再構築せずにこの機能を使用できます!

最適

WebアプリケーションでのPDFファイルの処理は常に非常に注意が必要です。しかし、今日利用可能なリソースを使用すると、ライブラリとその機能を組み合わせることで、これまで以上に達成できます。今日、基本的なPDFビューアの例を見てきました。これは、カスタム機能を拡張できる視聴者です。これを完全に制御できるためです。可能性は無限です!何かを作る準備はできていますか?以下のコメントで教えてください。

Aurelia Custom PDF Viewerコンポーネント

についての

FAQ(FAQS)

(以下のコンテンツは基本的に元のテキストと一致していますが、流encyさと読みやすさを維持し、重複を避けるために詳細に調整されています。)

以上がAureliaの冒険:カスタムPDFビューアの作成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Python vs. JavaScript:学習曲線と使いやすさ Python vs. JavaScript:学習曲線と使いやすさ Apr 16, 2025 am 12:12 AM

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

JavaScriptとWeb:コア機能とユースケース JavaScriptとWeb:コア機能とユースケース Apr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScript in Action:実際の例とプロジェクト JavaScript in Action:実際の例とプロジェクト Apr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptエンジンの理解:実装の詳細 JavaScriptエンジンの理解:実装の詳細 Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:開発環境とツール Python vs. JavaScript:開発環境とツール Apr 26, 2025 am 12:09 AM

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

JavaScript通訳者とコンパイラにおけるC/Cの役割 JavaScript通訳者とコンパイラにおけるC/Cの役割 Apr 20, 2025 am 12:01 AM

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

Python vs. JavaScript:ユースケースとアプリケーションと比較されます Python vs. JavaScript:ユースケースとアプリケーションと比較されます Apr 21, 2025 am 12:01 AM

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

Webサイトからアプリまで:JavaScriptの多様なアプリケーション Webサイトからアプリまで:JavaScriptの多様なアプリケーション Apr 22, 2025 am 12:02 AM

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

See all articles