LegacyFillNonZeroRule
LegacyFillNonZeroRuleは、Apache PDFBox Javaライブラリにおいて、PDFレンダリング操作中にパスのどの領域を塗りつぶすべきかを判定するための非ゼロワインディング数ルールを実装するクラスです。
LegacyFillNonZeroRuleは、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つであり、複雑なパスや自己交差するパスの内部でどの領域を塗りつぶしの対象として「内側」とみなすべきかを解決します。このクラスは、PDFBoxアプリケーション内でこの基本的なPDFグラフィックス操作へのプログラマティックなアクセスを提供します。
LegacyFillNonZeroRuleは、Apache PDFBoxにおいてパス塗りつぶしのための非ゼロワインディング数アルゴリズムをカプセル化する具象実装クラスです。PDFグラフィックスでは、パスが描画される際、システムはどの囲まれた領域を色で塗りつぶすべきかを判定する必要があります。非ゼロワインディングルールは、各点に対してワインディング数を計算することでこれを実現します。つまり、パスがその点の周りを何回巻いているかをカウントし、時計回りと反時計回りの方向が逆符号で寄与します。ワインディング数が非ゼロの場合、その点はパスの内側とみなされ、塗りつぶされます。
これは、単にパスの交差回数をカウントし、カウント数が奇数の領域を塗りつぶす偶奇塗りつぶしルール(PDFにおける代替方法)とは異なります。非ゼロワインディングルールは、特定の方向性を持つパスに特に有用であり、多くのグラフィックスシステムでデフォルトの塗りつぶしルールとなっています。クラス名の「Legacy」接頭辞は、古いPDFBoxコードベースや以前のPDF実装との後方互換性のために維持されていることを示唆しています。
Apache PDFBoxを使用してPDFの生成、操作、またはレンダリングを行う開発者にとって、LegacyFillNonZeroRuleの理解は、複雑なベクターグラフィックス、カスタムパス操作、またはPDFドキュメントで塗りつぶされた図形の表示方法を正確に制御する際に不可欠です。塗りつぶしルールの選択は、重なり合うパスや自己交差するパスの視覚的な出力に大きく影響します。これらはロゴ、複雑なイラスト、技術図面で頻繁に発生します。
これは、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を作成する際に特に重要になります。これらの標準では、視覚的なレンダリングが異なるビューアーや支援技術間で予測可能かつ一貫している必要があります。塗りつぶしルールが誤って適用されると、意図したものとは異なるレンダリング結果になり、Tagged PDF文書 ( Citation: PDF Association, 2023 PDF Association(2023). Retrieved from https://pdfa.org/resource/tagged-pdf-best-practice-guide-syntax/ ) においてアクセシビリティの障壁や混乱を招く視覚表現を生み出す可能性があります。
非ゼロワインディングルールアルゴリズムは、問題となる任意の点から無限遠まで概念的に光線を引き、パスとの各交差をカウントすることで機能します。パスが左から右へ横切る(光線に対して相対的に)各交差点はワインディング数に1を加算し、右から左への横切りは1を減算します。最終的なワインディング数が非ゼロの場合、その点は塗りつぶし領域の内側にあり、ゼロの場合は外側にあります。
PDFBoxでは、LegacyFillNonZeroRuleクラスは、PDFコンテンツストリームが塗りつぶし演算子(fまたはF)を指定している場合に、パスレンダリング操作中に呼び出されるのが一般的です。このクラスは、PDFBoxのレンダリングエンジンがこのルールに従ってベクターパスをラスタライズまたは処理する際に使用するロジックを実装しています。開発者がこのクラスを直接インスタンス化することはほとんどありません。代わりに、非ゼロワインディング塗りつぶし操作を指定するPDF描画コマンドを解析する際に、PDFBoxによって内部的に使用されます。
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 ) で定義されているPDF仕様の塗りつぶしセマンティクスを尊重する必要があるカスタムレンダラーを実装する場合に顕著です。
- Even-Odd Fill Rule(偶奇塗りつぶしルール)– ワインディング方向ではなく交差回数をカウントする代替的なパス塗りつぶし方法
- Path Object(パスオブジェクト)– PDFグラフィックスで図形を定義する、接続または非接続の線と曲線の系列
- Graphics State(グラフィックス状態)– 塗りつぶしルールを含む、PDFレンダリング操作を制御するパラメータの集合
- Content Stream(コンテンツストリーム)– ページコンテンツを記述するPDF演算子とオペランドの系列
- PDPageContentStream – コンテンツストリームと描画操作を記述するために使用されるApache PDFBoxクラス
- (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
