Aureliaの冒険:カスタムPDFビューアの作成
この記事は、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つあります
- ユーザーに、ドキュメントを読み込んで、スクロールしてズームイン/アウトして、優れたパフォーマンスを拡大できるようにしたいと考えています。
- 視聴者のプロパティ(現在のページや現在のズームレベルなど)をアプリケーション内のプロパティに双方向にバインドできるようにしたいと考えています。
- この視聴者が再利用可能なコンポーネントであることを望んでいます。
はじめに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スタイルがいくつか含まれています。
- それでは、アプリケーションを稼働させて実行しましょう。
次に、スケルトンをクローンして入力します:
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
@bindable
次に、ViewModelとペアになった初期ビューを作成します。 defaultBindingMode: bindingMode.twoWay
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で行います。基本的に、特定のスケールの各ページの新しいビューポートサイズを反映するように、すべてのキャンバス要素をサイズ変更します。次に、現在のビューポートに表示されているものを再レンダリングし、ループを再起動します。
最終結果
目標を確認しましょう:
- ユーザーに、ドキュメントを読み込んで、スクロールしてズームイン/アウトして、優れたパフォーマンスを拡大できるようにしたいと考えています。
- 視聴者のプロパティ(現在のページや現在のズームレベルなど)をアプリケーション内のプロパティに双方向にバインドできるようにしたいと考えています。
- この視聴者が再利用可能なコンポーネントであることを望んでいます。
最終コードは、GitHubリポジトリと、ここの完成したコードのデモに記載されています。改善の余地はまだありますが、目標を達成しました!
(以下のコンテンツは基本的に元のテキストと一致していますが、流encyさと読みやすさを維持し、重複を避けるために詳細に調整されています。)
プロジェクト後の分析と改善
常に改善の余地があります。 PDF Viewerの実装でアップグレードしたいことがあります:
プラグインを作成
Aureliaはプラグインシステムを提供します。この概念実証をAureliaプラグインに変換すると、Aureliaアプリケーションの使用不在リソースになります。 Aurelia Githubリポジトリは、良い出発点となるプラグインスケルトンプロジェクトを提供します。このようにして、他の人はそれを再構築せずにこの機能を使用できます!
最適
WebアプリケーションでのPDFファイルの処理は常に非常に注意が必要です。しかし、今日利用可能なリソースを使用すると、ライブラリとその機能を組み合わせることで、これまで以上に達成できます。今日、基本的なPDFビューアの例を見てきました。これは、カスタム機能を拡張できる視聴者です。これを完全に制御できるためです。可能性は無限です!何かを作る準備はできていますか?以下のコメントで教えてください。
Aurelia Custom PDF Viewerコンポーネントについての
FAQ(FAQS)(以下のコンテンツは基本的に元のテキストと一致していますが、流encyさと読みやすさを維持し、重複を避けるために詳細に調整されています。)
以上がAureliaの冒険:カスタムPDFビューアの作成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

この記事では、ブラウザ開発者ツールを使用した効果的なJavaScriptデバッグについて説明し、ブレークポイントの設定、コンソールの使用、パフォーマンスの分析に焦点を当てています。

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

この記事では、ソースマップを使用して、元のコードにマッピングすることにより、Minified JavaScriptをデバッグする方法について説明します。ソースマップの有効化、ブレークポイントの設定、Chrome DevtoolsやWebpackなどのツールの使用について説明します。

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...
