FillNonZeroRule
FillNonZeroRuleは、Apache PDFBox Javaライブラリのクラスで、PDFレンダリング処理においてパスのどの領域を塗りつぶすべきかを決定するために、非ゼロワインディング数規則を実装しています。
FillNonZeroRuleは、Apache PDFBox Javaライブラリのクラスで、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 ) で定義されている2つの標準的な方法の1つで、自己交差や重複するサブパスを持つ複雑なパスに対する曖昧な塗りつぶし操作を解決するために使用されます。非ゼロワインディング規則は、ベクターグラフィックスのレンダリングや、異なるPDFプロセッサ間での一貫した視覚的出力を保証する上で特に重要です。
FillNonZeroRuleは、Apache PDFBox内の具象実装クラスで、パス塗りつぶし操作のための非ゼロワインディング数アルゴリズムをカプセル化しています。PDF文書では、パスが描画され塗りつぶされる際、レンダリングエンジンはパスによって囲まれたどの領域に塗りつぶし色を適用すべきかを判断する必要があります。非ゼロワインディング規則は、パスセグメントの方向を追跡することでこれを実現します。つまり、パスがその点の周りを正味何回巻くかに基づいて、各領域にカウントを割り当てます。ワインディングカウントが非ゼロ(正または負)の場合、その領域は塗りつぶされます。
これは、代替となる偶奇規則(PDFBoxのEvenOddRule)とは異なります。偶奇規則は方向を考慮せずにパスの交差を単純にカウントします。非ゼロワインディング規則はパスの方向を尊重するため、重なり合うパスが単純な交差カウントではなく、描画方向に基づいて塗りつぶし領域または未塗りつぶし領域を作成する必要がある複雑な図形により適しています。
塗りつぶし規則を理解し正しく実装することは、PDFのレンダリング、作成、操作を行う開発者にとって不可欠です。非ゼロワインディング規則と偶奇規則の選択は、特に複合パス、テキストのアウトライン、重複要素を持つベクターアートワークを扱う際に、複雑なグラフィックスの表示方法に影響を与えます。塗りつぶし規則の適用が不適切な場合、グラフィックス内の領域が予期せず塗りつぶされたり、塗りつぶされなかったりするなどの視覚的アーティファクトが発生する可能性があります。
Apache PDFBoxを使用してPDF文書を処理または生成する開発者にとって、FillNonZeroRuleクラスは、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/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 ) などの標準で指定されているように、正確な視覚的表現を必要とするアクセシブルなPDFを扱う際に特に重要です。支援技術のために視覚コンテンツが適切にレンダリングされ、視覚的プレゼンテーションがセマンティック構造と一致する必要があるためです。
非ゼロワインディング数規則は、概念的に、問題となる任意の点から無限遠に向かって光線を引き、パスがその光線を何回横切るかをカウントすることで動作します。各交差には、パスが左から右に横切るか、右から左に横切るかに応じて、+1または-1の値が割り当てられます。これらの値の合計が、その点のワインディング数となります。
Apache PDFBoxでは、FillNonZeroRuleクラスは、グラフィックス状態管理システムの一部としてこのアルゴリズムを実装しています。PDFコンテンツストリームに「f」または「F」オペレータ(非ゼロワインディング規則による塗りつぶしを指定)を含む塗りつぶし操作が含まれている場合、PDFBoxはこのクラスを使用して、どのピクセルまたは領域に塗りつぶし色を適用すべきかを決定します。このクラスは、PDFBoxのパス構築オペレータと連携して、パスセグメントとその方向性を追跡します。
技術的な実装には以下が含まれます:
- すべてのパスセグメントとその方向ベクトルの追跡
- パスの境界領域内の点に対するワインディング数の計算
- ワインディング数が非ゼロである領域への塗りつぶし色の適用
- 正しいレンダリングコンテキストを保証するためのPDFBoxのグラフィックス状態スタックとの統合
この規則はPDFにおけるデフォルトの塗りつぶし方法であり、偶奇規則オペレータによって明示的にオーバーライドされない限り使用されます。
- EvenOddRule – パスの方向を考慮せずに交差カウントを使用する代替の塗りつぶし規則
- PathIterator – 塗りつぶし規則と組み合わせて使用される、パスセグメントを反復処理するためのJavaインターフェース
- Graphics State – 塗りつぶし規則を含む、PDFレンダリング操作を制御するパラメータの集合
- Content Stream – グラフィックスとテキストを描画するための操作シーケンスを含むPDFの部分
- Vector Graphics – ピクセルではなく数学的パスによって定義される解像度非依存のグラフィックス
- (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
