FilterFactory
FilterFactoryは、Apache PDFBoxにおけるコアコンポーネントであり、PDFコンテンツストリームのエンコードおよびデコード機能を提供します。
FilterFactoryは、Apache PDFBoxにおけるコアコンポーネントであり、PDFコンテンツストリームのエンコードおよびデコード機能を提供します。PDF文書は、 ( Citation: N.A., 2020 (N.A.). (2020). Document management — Portable document format — Part 2: PDF 2.0 . International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html ) で規定されているように、データを圧縮し画像をエンコードするために様々なフィルタを使用します。このファクトリクラスは、PDFファイルの読み込みや書き込み時に、圧縮アルゴリズム(FlateやLZWなど)や画像エンコード形式(DCTやCCITTFaxなど)を処理するための適切なフィルタ実装をインスタンス化します。
FilterFactoryは、Apache PDFBoxライブラリにおけるJavaクラスで、フィルタオブジェクトを作成するためのファクトリデザインパターンを実装しています。PDF用語におけるフィルタとは、ストリームデータをエンコードまたはデコードするアルゴリズムのことで、主に2つの目的があります。1つはファイルサイズを削減するためのデータ圧縮、もう1つは画像などの異なるデータ型に対する特殊なエンコーディングです。FilterFactoryは、中央レジストリおよびインスタンス化ポイントとして機能し、フィルタ名(PDF辞書内に現れる形式)と対応するJava実装クラスをマッピングします。PDFBoxが ( Citation: N.A., 2020 (N.A.). (2020). Document management — Portable document format — Part 2: PDF 2.0 . International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html ) で定義されている/Filterエントリを持つストリームオブジェクトに遭遇すると、FilterFactoryを使用して正しいデコーダまたはエンコーダのインスタンスを取得します。
個別のフィルタクラスを直接インスタンス化するのとは異なり、FilterFactoryはフィルタ管理のための統一されたインターフェースを提供し、ライブラリが複数のフィルタタイプを一貫して処理し、カスタムフィルタの拡張性をサポートすることを可能にします。この抽象化レイヤーは、どのフィルタを使用するかの識別と、実際のエンコード/デコードロジックの関心事を分離します。
PDF文書を扱う開発者にとって、FilterFactoryはいくつかの実用的な理由から不可欠です。
データアクセシビリティ: 適切なフィルタデコーディングがなければ、PDF内のコンテンツストリームは圧縮されたままで読み取り不可能です。FilterFactoryは、テキスト、画像、ベクターグラフィックスがプログラム的に抽出および処理できることを保証します。
ファイルサイズの最適化: PDFを作成または変更する際、FilterFactoryを通じて適切なフィルタを使用することで、品質を維持しながら適切なファイルサイズを保つことができます。これはWebアプリケーションや文書管理システムにとって重要です。
互換性: このファクトリは、標準フィルタを正しく実装することでPDF仕様への準拠を保証します。これは特に ( Citation: N.A., 2014 (N.A.). (2014). Document management applications — Electronic document file format enhancement for accessibility — Part 1: Use of ISO 32000-1 (PDF/UA-1) . International Organization for Standardization Retrieved from https://www.iso.org/standard/64599.html ) で要求されるアクセシブルな文書にとって重要です。支援技術のためにコンテンツが適切にデコードされる必要があるからです。
拡張性: 開発者は、PDFBoxのコアコードを変更することなく、独自または特殊なエンコーディングスキームを処理するためのカスタムフィルタをファクトリに登録できます。
FilterFactoryは、登録と参照の仕組みを通じて動作します。
フィルタ登録: ファクトリは、フィルタ名からフィルタ実装クラスへの内部マップを保持します。標準的なPDFフィルタ(FlateDecode、DCTDecode、ASCII85Decode、LZWDecode、CCITTFaxDecodeなど)は、 ( Citation: N.A., 2020 (N.A.). (2020). Document management — Portable document format — Part 2: PDF 2.0 . International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html ) の仕様に従ってデフォルトで登録されます。
デコーダのインスタンス化: PDFBoxがストリームオブジェクトを解析する際、ストリーム辞書から/Filterエントリを読み取ります。このエントリには1つ以上のフィルタ名が含まれます。ファクトリは各フィルタ名を検索し、対応するデコーダクラスをインスタンス化します。
ストリーム処理: インスタンス化されたフィルタオブジェクトは(複数のフィルタが適用されている場合は)連鎖され、生のストリームデータを処理します。デコーディングの場合、フィルタは指定された順序の逆順で適用されます。エンコーディングの場合は、指定された順序で適用されます。
フィルタパラメータ: 一部のフィルタは追加のパラメータ(/DecodeParmsで指定)を必要とします。FilterFactoryは、インスタンス化時にこれらのパラメータをフィルタインスタンスに渡し、Flate圧縮におけるプレディクタ関数やDCTデコーディングにおける色変換などの複雑なシナリオで正しいデコーディング動作を保証します。
ファクトリパターンにより、PDFBoxはストリーム処理コードをクリーンで保守しやすい状態に保ちながら、PDFフィルタの全範囲をサポートできます。
- COSStream – 圧縮のためにフィルタを使用するPDFストリームオブジェクトを表すPDFBoxクラス
- FlateFilter – deflate圧縮のための特定のフィルタ実装で、現代のPDFで最も一般的な圧縮アルゴリズム
- Stream Dictionary – フィルタ仕様とパラメータを含むPDF辞書オブジェクト
- Content Stream – ページコンテンツを表すPDF内のエンコードされたデータで、処理のためにフィルタデコーディングが必要
- Predictor – 特定のフィルタで圧縮率を向上させるために使用されるアルゴリズムパラメータ
- (N.A.) (2020)
- (N.A.). (2020). Document management — Portable document format — Part 2: PDF 2.0 . International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html
- (N.A.) (2014)
- (N.A.). (2014). Document management applications — Electronic document file format enhancement for accessibility — Part 1: Use of ISO 32000-1 (PDF/UA-1) . International Organization for Standardization Retrieved from https://www.iso.org/standard/64599.html
