Operator
オペレータ(Operator)は、PDFにおける基本的な命令であり、コンテンツストリーム内でグラフィックス操作、テキストレンダリング、状態変更を定義します。
オペレータ(Operator)は、PDFにおける基本的な命令であり、コンテンツストリーム内でグラフィックス操作、テキストレンダリング、状態変更を定義します。オペレータは、スタックからオペランドを消費し、パスの描画、テキストの表示、グラフィックス状態の変更などの特定のアクションを実行する、1文字または複数文字のキーワードとして指定されます ( 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文書内のすべての視覚的コンテンツの基本的な語彙を形成します。
PDFオペレータは、コンテンツストリームに現れるコマンドキーワードであり、PDFプロセッサに特定の操作を実行するよう指示します。オペレータは後置記法の構文に従い、オペランド(パラメータ)がオペレータ自体の前に配置されます。例えば、100 200 mというシーケンスでは、数値100と200がオペランドであり、m(moveto)がこれらの値を消費してグラフィックスパス内の現在点を設定するオペレータです。
オペレータは、辞書や配列などの他の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 ) 。一般的なオペレータのカテゴリには、パス構築オペレータ(m、l、c、re)、パス描画オペレータ(S、s、f、B)、テキストオペレータ(Tf、Tj、TJ)、グラフィックス状態オペレータ(q、Q、cm、gs)があります。
高級プログラミング言語の関数とは異なり、PDFオペレータは戻り値を持たず、副作用のみを通じて動作します。つまり、現在のグラフィックス状態を変更したり、現在のパスに追加したり、ページ上にコンテンツをマークしたりします。
PDFの生成や操作を行う開発者にとって、オペレータの理解は以下の理由から不可欠です。プログラムでPDFコンテンツを作成する際には、目的の視覚的出力を生成するために、正しいオペレータとオペランドのシーケンスを出力する必要があります。レンダリングの問題をデバッグする場合、多くの場合、生のオペレータストリームを調べて、不正なパラメータや順序が正しくないコマンドを特定する必要があります。
オペレータの知識は、低レベルのPDFライブラリの実装、冗長な状態変更を最小化することによるファイルサイズの最適化、Tagged PDF文書におけるアクセシビリティ問題のトラブルシューティングを行う際に特に重要です ( Citation: PDF Association, 2023 PDF Association(2023). Retrieved from https://pdfa.org/resource/tagged-pdf-best-practice-guide-syntax/ ) 。多くのPDF生成ライブラリは、オペレータを高レベルのAPIの背後に抽象化していますが、基礎となるオペレータモデルを理解することで、開発者はパフォーマンスと出力品質について情報に基づいた判断を下すことができます。
さらに、既存のPDFを解析してコンテンツを抽出したりテキストをリフローしたりする際には、テキスト表示オペレータ(Tj、TJ、’、")とテキスト状態オペレータ(Tf、Tm、Td)の関係を認識することが、文書の論理構造を正しく再構築するために必要です。
PDFオペレータは、コンテンツストリームのコンテキスト内で機能します。コンテンツストリームは、PDFプロセッサによって順次評価される命令のシーケンスです。実行モデルは以下の原則に従います。
スタックベースの構文:オペランドは、オペレータがそれらを消費する前に概念的なスタックに配置されます。例えば、12 Tfは12をスタックにプッシュし、次にTfオペレータがそれをポップしてフォントサイズを12ポイントに設定します。
グラフィックス状態管理:多くのオペレータは、現在の変換行列、色、線幅、フォントなどのパラメータを含むグラフィックス状態を変更します。q(保存)およびQ(復元)オペレータは、スタックベースの状態保存機能を提供します
(
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
)
。
オペレータのカテゴリ:パス構築オペレータ(m、l、c、v、y、h、re)はベクターパスを構築します。パス描画オペレータ(S、s、f、F、f*、B、B*、b、b*、n)はそれらのパスをストロークまたは塗りつぶします。テキストオペレータ(BT/ET、Tf、Tj、TJ、Tm、Td、TD、T*、’、")はテキストの配置とレンダリングを制御します。インライン画像オペレータ(BI、ID、EI)は、画像データをコンテンツストリームに直接埋め込みます。
マークされたコンテンツ:BMC、BDC、EMCなどのオペレータは、アクセシビリティ機能に不可欠な論理構造の境界を作成し、オペレータを意味的に意味のあるセクションにグループ化できるようにします。
PDFプロセッサはオペレータを厳密な順序で解釈するため、意図した視覚的結果を達成するには操作の正確な順序が重要です。
- Content Stream(コンテンツストリーム) – ページの外観を定義するオペレータを含む命令とデータのシーケンス
- Graphics State(グラフィックス状態) – オペレータがグラフィックスとテキストをレンダリングする方法を制御するパラメータの集合
- Operand(オペランド) – オペレータの前に配置され、オペレータによって消費されるパラメータ値
- Path Construction(パス構築) – movetoやlinetoなどのオペレータを使用してベクター図形を定義するプロセス
- Marked Content(マークされたコンテンツ) – アクセシビリティと論理的な文書構造をサポートするためにオペレータによって作成される構造的境界
- (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/
