TextPosition
TextPositionは、Apache PDFBoxにおいて、PDF文書内の特定の位置にある単一の文字またはテキスト断片に関する情報をカプセル化する基本的なクラスです。
TextPositionは、Apache PDFBoxにおいて、PDF文書内の特定の位置にある単一の文字またはテキスト断片に関する情報をカプセル化する基本的なクラスです。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 ) 、TextPositionオブジェクトは、生のPDFオペレータと空間座標を持つ意味のある文字データとの橋渡しを提供します。各TextPositionインスタンスは、文字そのものだけでなく、正確なx,y座標、フォント情報、サイズ、レンダリング属性も取得します。
TextPositionは、PDFのテキスト表示オペレータ(Tj、TJ、’、“など)を処理した結果を表すデータコンテナクラスです。各TextPositionオブジェクトには以下が含まれます:
- レンダリングされるUnicode文字または文字列
- ページ上でテキストが表示されるx座標とy座標
- フォント名、サイズ、スペーシングを含むフォントメトリクス
- レンダリングされたテキストの幅と高さの寸法
- テキストマトリックス変換データ
- スタイリングのためのフォント記述子情報
文字列のみを返す単純な文字列抽出とは異なり、TextPositionは、PDFコンテンツストリームに表示される各文字の空間的およびタイポグラフィ的なコンテキストを保持します。これは、文字を単語や行に連結する可能性のある高レベルのテキスト抽出結果とは異なり、TextPositionは通常、個々のPDFオペレータによって指定されるテキストレンダリングの原子単位を表します。
PDFテキスト抽出を扱う開発者にとって、TextPositionオブジェクトは以下の点で不可欠です:
空間的テキスト解析: ページ上でテキストがどこに表示されるかを理解することで、カラム検出、テーブル抽出、フォームフィールド識別、領域ベースのコンテンツ抽出などの機能が可能になります。座標情報がなければ、論理的な読み順やテキスト要素間の関係を判断することはほぼ不可能です。
アクセシビリティの向上: Tagged PDF ( Citation: PDF Association, 2023 PDF Association(2023). Retrieved from https://pdfa.org/resource/tagged-pdf-best-practice-guide-syntax/ ) を作成する際、またはPDF/UA標準 ( 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 ) への準拠を確保する際、TextPositionデータは視覚的なテキストレイアウトを論理的な文書構造にマッピングするのに役立ち、支援技術が意味のある順序でコンテンツを提示できるようにします。
カスタムテキスト抽出ロジック: デフォルトのテキスト抽出アルゴリズムは、すべてのユースケースに適しているとは限りません。TextPositionオブジェクトへのアクセスにより、開発者は座標、フォント、またはその他のメトリクスに基づいてカスタムのソート、グループ化、フィルタリングロジックを実装し、複雑なレイアウト、マルチカラム文書、または特別なフォーマット要件を持つ文書を処理できます。
PDFBoxがPDFページのコンテンツストリームを処理する際、グラフィックスオペレータを順次解釈します。テキスト表示オペレータに遭遇すると、PDFBoxは以下を実行します:
- 文字データのデコード: フォントのエンコーディングとToUnicodeマッピングを使用して、PDF内のエンコードされたバイトシーケンスをUnicode文字列に変換します
- テキスト状態パラメータの適用: 現在のフォント、フォントサイズ、文字間隔、単語間隔、水平スケーリング、テキストライズ値を使用します
- テキストマトリックスの計算: 現在の変換マトリックス(CTM)、テキストマトリックス(Tm)、テキスト行マトリックスを組み合わせて最終位置を決定します
- TextPositionオブジェクトの作成: 計算されたすべてのメトリクスを含む各文字またはテキスト断片のTextPositionをインスタンス化します
- PDFTextStripperへの受け渡し: TextPositionオブジェクトをテキスト抽出メソッドに渡し、そこで処理、ソート、出力形式への変換が行われます
開発者は通常、PDFTextStripperを拡張し、writeString()メソッドをオーバーライドすることでTextPositionオブジェクトと対話します。このメソッドは、抽出された文字列と対応するTextPositionオブジェクトのリストを受け取ります。これにより、最終出力前にテキストとその位置メタデータのカスタム処理が可能になります。
- PDFTextStripper – PDF文書からテキストを抽出するためのApache PDFBoxのメインクラスで、TextPositionオブジェクトを処理します
- Content Stream – テキストレンダリングコマンドを含む、ページの視覚的な外観を定義する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 )
- Text Matrix – テキスト要素の位置、スケーリング、回転を制御するPDFの変換マトリックス
- Tagged PDF – アクセシビリティのための論理的な文書階層と意味情報を含むPDF構造
- Glyph Positioning – 個々の文字形状がレンダリングされたページ上のどこに表示されるかを決定するプロセス
- (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 Association (2023)
- PDF Association(2023). Retrieved from https://pdfa.org/resource/tagged-pdf-best-practice-guide-syntax/
- (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
