Security thumbnailsとは、セキュリティ制限とアクセス制御の対象となる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セキュリティ機能を実装する際、開発者はサムネイルの生成と表示が保護されたコンテンツを不注意に露出しないよう確保する必要があります。
Security thumbnailsとは、PDF文書のセキュリティコンテキスト内に存在するPDFページのミニチュア表現です。単にナビゲーションの利便性を提供する標準的なサムネイルとは異なり、security thumbnailsは文書のセキュリティハンドラと権限辞書によって特に管理されます。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
)
では、サムネイルがImage XObjectとして保存される方法と、文書の暗号化辞書との相互作用が定義されており、コンテンツのすべての視覚的表現が一貫したセキュリティポリシーを維持することが保証されています。
Selectable text(選択可能なテキスト)とは、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内のテキストは特定のオペレーターと文字エンコーディングを使用して表現されており、アプリケーションがコンテンツを純粋な視覚要素としてではなく、言語データとして解釈および操作できるようになっています。
Selectable textとは、文字レベルのエンコーディングを維持しているPDF内のテキストコンテンツであり、PDFビューアやその他のアプリケーションが個々の文字、単語、文を離散的なテキスト単位として識別できるようにするものです。テキストの画像表現のみを含むスキャン文書とは異なり、selectable textを持つPDFは、テキストをプログラム的にレンダリングおよび操作するために必要な実際の文字コードとフォント情報を保存します。
これは、(紙文書をスキャンして生成されるような)テキストの画像とは異なります。画像の場合、文字の視覚的外観はピクセルとしてのみ存在し、基礎となる文字データは含まれません。また、アウトライン化またはベクター化されたテキストとも異なります。この場合、文字は表示可能な図形パスに変換されていますが、ソフトウェアによってテキストとして認識されることはありません。Selectable textは、視覚的外観だけでなく、コンテンツの意味論的な意味も保持します。
PDF生成、処理、またはアクセシビリティに取り組む開発者にとって、テキストがselectable(選択可能)な状態を保つことは、いくつかの実用的な理由から極めて重要です。
Stream dictionaryとは、PDFのstreamオブジェクトを構成する辞書部分であり、streamデータの解釈方法を記述するメタデータとパラメータを含みます
(
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ファイル内のすべてのstreamオブジェクトは2つの部分で構成されています。辞書の後にstreamとendstreamキーワードで囲まれた実際のバイナリデータが続きます。Stream dictionaryには、streamデータの長さ、適用される圧縮やエンコーディングフィルタ、データのデコードに必要なパラメータなどの重要な情報が指定されます。
Stream dictionaryは、streamオブジェクト内の生のバイト列の前に配置される標準的なPDF辞書オブジェクトです。PDFの独立した辞書とは異なり、stream dictionaryは直後に続くバイナリデータを記述するという特定の目的を持ちます。この辞書には、少なくともstreamとendstreamキーワード間のバイト数を指定する/Lengthエントリが含まれている必要があります。さらに、/Filter(FlateDecodeやDCTDecodeなどの圧縮またはエンコーディング方式を指定)、/DecodeParms(フィルタのパラメータを提供)、およびstreamの用途に応じたその他のstream固有のキー(画像streamの場合は/Widthや/Heightなど)を含むことができます。
Stream dictionaryはstreamデータそのものとは区別されます。辞書はキーと値のペアを持つPDFのテキストベース構文で記述されますが、その後に続くstreamデータはバイナリバイトで構成されます。この分離により、PDFプロセッサは実際のデータを処理する前にstreamに関するメタデータを読み取ることができます。
Stream dictionaryの理解は、PDFの操作、作成、または解析を行う開発者にとって不可欠です。Stream dictionaryは、PDF内に埋め込まれたバイナリデータをどのようにデコードして解釈するかをコードに正確に伝えます。/Filterと/DecodeParmsエントリを正しく読み取らなければ、streamコンテンツを解凍またはデコードすることはできません。プログラムでPDFを作成する際には、正確な/Length値と適切なフィルタ指定を持つ有効なstream dictionaryを構築する必要があります。そうでなければ、生成されるPDFは不正な形式となり、PDFビューアで読み取れなくなります。
Stream objectは、辞書と生のバイナリデータを組み合わせた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
)
で定義されているように、stream objectは辞書と、streamとendstreamというキーワードで囲まれたバイトシーケンスで構成されます。この構造により、PDFファイルは単一の統合されたオブジェクト内にデータに関するメタデータと実際のデータペイロードの両方を含めることができます。
Stream objectはPDFの基本的なオブジェクトタイプの1つであり、辞書、配列、単純な値などの他のオブジェクトとは異なります。2つの部分で構成されています。メタデータを含む辞書オブジェクト(stream dictionaryと呼ばれる)と、streamキーワードの直後に続くバイトシーケンス(stream data)です。Stream dictionaryには、stream data内のバイト数を指定する/Lengthエントリが必須であり、データに適用された圧縮またはエンコーディングを示す/Filterなどの追加エントリを含めることができます。
キーと値のペアのみを含む単純な辞書オブジェクトとは異なり、stream objectは任意のバイナリデータを保持できるため、大規模または複雑なコンテンツの格納に適しています。Stream dataは辞書とは別ですが、本質的に辞書とリンクしています。辞書は後に続くバイトをどのように解釈するかを記述します。Stream objectはPDFファイル内で常に間接オブジェクトであり、オブジェクト番号と世代番号を持つ必要があります。
PDFの生成、解析、操作を行う開発者にとって、stream objectの理解は不可欠です。なぜなら、stream objectにはPDFドキュメントの実際に表示される機能的なコンテンツが含まれているからです。Page content streamは、PDFオペレーターとオペランドを通じて各ページに表示される内容を定義します。画像データ、フォントプログラム、埋め込みファイルはすべてstreamとして格納されます。プログラムでPDFを作成または変更する際、開発者は適切なフィルターとパラメーターを使用してstream dictionaryを正しく構築し、stream dataを適切にエンコードする必要があります。
String objectは、バイト列または文字列を表す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はString objectに対して2つの表記法をサポートしています。括弧で囲まれたliteral string (text)と、山括弧で囲まれた16進数文字列 <48656C6C6F>です。String objectはPDF構造の基礎となるもので、テキストコンテンツ、メタデータ、名前、その他のさまざまなデータに使用されます。
PDFにおけるString objectは、文脈に応じてテキスト、バイナリデータ、またはその他の情報を表すことができる一連のバイト列です。多くのプログラミング言語の文字列とは異なり、PDFの文字列は本質的にUnicodeではありません。文脈や明示的なエンコーディングマーカーに基づいて、ASCII、PDFDocEncoding、UTF-16BE、またはその他のエンコーディングとして解釈されます。
Literal stringは括弧を区切り文字として使用し、改行を表す\nやリテラルな括弧を表す\(などのエスケープシーケンスをサポートします。例:(Hello World)または(Line 1\nLine 2)。16進数文字列は、山括弧内で各バイトを2桁の16進数として表現します。例えば<48656C6C6F>はASCIIで"Hello"を表します。16進数表記は、バイナリデータや正確なバイト値を曖昧さなく指定する必要がある場合に特に便利です。
String objectは、Name object(/Typeのようなスラッシュ表記を使用)とは異なります。文字列はデータ値を表すのに対し、名前はPDF辞書内の識別子やキーを表します。また、String objectはText stringとも異なります。Text stringは、定義されたエンコーディング要件を持つ人間が読めるテキストを表すString objectの特定のサブセットです。
Structure treeは、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
)
これはTagged PDF文書の基幹となり、支援技術が障害を持つユーザーに対してコンテンツを意味のある形で提示することを可能にします。Structure treeは、コンテンツの視覚的な表現を論理的な構成にマッピングすることで、開発者がアクセシブルで適切に構造化されたドキュメントを作成できるようにします。
Structure treeは、ドキュメントカタログのStructTreeRootエントリに格納されているstructure tree root(構造ツリールート)をルートとし、親子階層で構成された構造要素を含むツリー構造のデータ構造です。
(
Citation: PDF Association, 2023
PDF Association(2023). Retrieved from
https://pdfa.org/resource/tagged-pdf-best-practice-guide-syntax/
)
ツリー内の各構造要素は、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ファイルから読み取り可能なテキストコンテンツを読み取り、再構築するプロセスです。単に表示されているテキストをコピーするのとは異なり、抽出にはページ上にグリフを配置する複雑な命令をデコードし、それらをUnicode文字にマッピングする作業が必要です。このプロセスは、PDFコンテンツをアクセシブルで検索可能、かつ様々なアプリケーション間で再利用可能にするための基礎となります。
テキスト抽出は、PDFコンテンツストリームを解析してテキスト表示演算子(Tj、TJ、'、"など)とそれに関連する文字コードを識別し、次にドキュメントのフォントディクショナリを使用してそれらのコードを実際のテキスト文字にマッピングする作業を含みます。PDF形式では、テキストはプレーンテキスト文字列としてではなく、一連の低レベル描画コマンドとして保存されるため、抽出ツールは論理的な読み取り順序を再構築し、様々なエンコーディングスキーム(事前定義エンコーディング、CMAPリソース、ToUnicodeマッピングなど)を処理し、Type 1、TrueType、OpenTypeフォントを含む様々なフォントタイプを考慮する必要があります。
テキスト抽出は、テキストの視覚的表現を分析する光学文字認識(OCR)や、タグ付きコンテンツ構造への単純なアクセスとは大きく異なります。
(
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
)
では、アクセシブルな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
)
。テキストラインマトリックスはテキスト配置演算子によって変更され、新しいテキスト行を開始する際の基準点として機能します。
テキストラインマトリックスは、PDFのテキストオブジェクトモデルにおいてページ上のテキスト配置に使用される2つのマトリックスのうちの1つです。テキストマトリックス(Tm)が次のグリフが配置される行内の現在位置を追跡するのに対し、テキストラインマトリックス(Tlm)は現在のテキスト行の開始座標を記録します。この区別は重要です。なぜなら、PDFはテキストが現在レンダリングされている位置と行が開始された位置の両方を維持する必要があり、これによりキャリッジリターンや改行などの操作が可能になるからです。テキストラインマトリックスは、T*、Td、TD演算子が新しい行の開始位置に移動する際など、特定の時点でテキストマトリックスと自動的に同期されます。すべてのグラフィックス操作に影響を与えるカレント変換マトリックス(CTM)とは異なり、テキストラインマトリックスはテキストオブジェクト内でのみ動作し、テキストの配置にのみ影響を与えます。
PDF生成や操作を行う開発者にとって、テキストラインマトリックスの理解は正確なテキストレイアウト動作を実装するために不可欠です。PDFコンテンツストリームをプログラムで作成する際、特に複数行のテキストブロックを扱う場合やテキストのリフローを実装する場合、予測可能なテキスト配置を実現するにはテキストマトリックスとテキストラインマトリックスの両方を適切に管理する必要があります。テキストラインマトリックスは、既存のPDFを解析してテキストコンテンツを抽出する際に特に重要になります。行の開始位置を知ることで、改行や段落構造を判断することができます。テキストラインマトリックスの不適切な処理は、テキストが予期しない位置に表示されたり、コンテンツが重なったり、テキスト抽出アルゴリズムが適切な行境界を認識できなくなったりする原因となります。
Text rendering modeは、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 rendering modeは、PDFのグラフィックスステートパラメータの一つで、テキストのグリフをどのように描画するかを定義します。PDF仕様では、テキストオブジェクトに適用できる8つの異なる描画モード(0〜7の番号)が定義されています。これらのモードは、文字の形状を塗りつぶすか、ストローク(アウトライン)するか、またはその両方を行うか、さらに現在のクリッピングパスに追加するか、非表示にするかを決定します。
8つの標準的なtext rendering modeは以下の通りです:
- Mode 0: テキストを塗りつぶす(デフォルト)
- Mode 1: テキストをストロークする
- Mode 2: テキストを塗りつぶしてからストロークする
- Mode 3: 塗りつぶしもストロークもしない(非表示)
- Mode 4: テキストを塗りつぶしてクリッピングパスに追加する
- Mode 5: テキストをストロークしてクリッピングパスに追加する
- Mode 6: テキストを塗りつぶし、ストロークして、クリッピングパスに追加する
- Mode 7: テキストをクリッピングパスにのみ追加する
単純な色やフォントのプロパティとは異なり、text rendering modeはテキストがPDFグラフィックスモデルとどのように相互作用するかを根本的に変更し、見た目だけでなく、テキストがクリッピング操作にどのように関与するかにも影響を与えます。
Text riseは、PDFにおけるテキストフォーマットパラメータの1つで、ベースラインからのテキスト文字の垂直オフセットを制御します。PDFコンテンツストリーム内でTsオペレータを使用して指定し、ベースラインを基準として文字を上方(正の値)または下方(負の値)に移動させます
(
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 riseは、テキストスペース単位で表される数値で、テキストベースライン自体を変更することなく、個々の文字またはテキスト実行を垂直方向にシフトします。PDFコンテンツストリーム内でTsオペレータが適用されると、新しいtext rise値が設定されるまで、後続のテキストは指定された垂直オフセットでレンダリングされます。正の値はテキストをベースラインより上に移動させ(上付き文字に有用)、負の値はテキストをベースラインより下に移動させます(下付き文字に有用)。
複数のテキストプロパティに同時に影響を与えるフォントサイズの変更や行列変換とは異なり、text riseは垂直位置のみを変更する専用パラメータです。テキスト行のベースラインは変更されないため、text riseはグリフのレンダリング位置に影響を与えながら、テキスト行の論理的な流れと間隔計算を維持します。これにより、text riseは単一のテキスト行内でのインラインフォーマット変化に特に効率的です。
PDFの生成や操作を行う開発者にとって、text riseは、科学・数学文書、法的引用、脚注マーカー、および印刷的に正しいコンテンツを適切にフォーマットするために不可欠です。Text riseを理解することで、開発者は以下のことが可能になります: