PDFのレイヤーが「レイヤー」ではない理由

このブログ記事では、OCG、Zオーダー、そしてPDFにおける「レイヤー」の知られざる仕掛けについて詳しく解説します。

David van Driessche
David van Driessche
7月 24, 2025
pdfToolbox 内のサンプル PDF ファイルのスクリーンショット。レイヤーエクスプローラーウィンドウにドキュメントのレイヤーが表示されています。

ほとんどのクリエイティブ系アプリケーションには、「レイヤー」という概念があります。通常、ユーザーインターフェース上では、以下に示すような形で表現されています。

Screenshot of a sample PDF file in Adobe Photoshop that shows the document layers

ここではいくつかのレイヤーがあり、各レイヤーには1つのオブジェクトが配置されています。具体的には、3つのテキスト行と、合計2つのベクター要素(長方形)です。通常、これらのレイヤーはユーザーインターフェースで表示・非表示を切り替えることができ、それによって各レイヤー上のオブジェクトの表示・非表示を切り替えることができます。上のスクリーンショットでは、すべてが表示されています。

レイヤーとZ順序

ほとんどのクリエイティブアプリケーションにおいて、レイヤーという概念は「

Z順序

」または「描画順序」と呼ばれるもの、つまりオブジェクトがキャンバス上に描画される順序と密接に関連しています。つまり、下にあるレイヤーが先に描画され、上にあるレイヤーがその上に重ねて描画されます。すべての矩形レイヤーを下に移動させると、デザインが変わります。

Screenshot of a sample PDF file in Adobe Photoshop that shows the document layers with a changed z-order

これで、長方形はZ順の最下層に配置され、その上にテキストが描画されるようになりました。上記のスクリーンショットはAffinity Publisherのものですが、この仕組みはAdobe Photoshop、Adobe Illustrator、Adobe InDesign、QuarkXPressなど、あらゆるソフトウェアで同様です。

callas pdfToolboxのレイヤー

pdfToolboxにも「レイヤー」と呼ばれる機能があります:

pdfToolbox 内のサンプル PDF ファイルのスクリーンショット。レイヤーエクスプローラーウィンドウにドキュメントのレイヤーが表示されています。

「レイヤーエクスプローラー」というウィンドウがあり、クリエイティブアプリケーションから取り込まれたレイヤーや、PDF自体で作成されたレイヤーを確認することができます。残念ながら、上のスクリーンショットでもすでに示されている通り、これらは皆さんが普段知っているような「レイヤー」とは少し異なります……

OCG

(
) いいえ、これは呪いではありません。「OCG」とは「Optional Content Group(オプション・コンテンツ・グループ)」のことです。 PDFファイル形式には、厳密には「レイヤー」という概念はなく、その代わりに「オプションコンテンツグループ(OCG)」という概念があります。OCGは完全に任意のものであり、PDFファイルに必ずしも必要というわけではありません。しかし、ページ上の特定の要素をグループ化し、その表示・非表示を制御するために使用することができます。

pdfToolboxで「レイヤー」と呼ばれるものは、実際にはPDFファイル内に存在する「オプションコンテンツグループ(OCG)」のことです。なぜ「レイヤー」と呼ばれるのでしょうか? まず第一に、これは馴染みのある用語であり、「オプションコンテンツグループ」や「OCG」という表現よりも確かに分かりやすいからです。第二に、ほとんどのクリエイティブアプリケーションには、PDFをエクスポートする際にレイヤーをOCGに変換するオプションがあります。したがって、一貫性と簡潔さの観点から、pdfToolboxでこれらを「レイヤー」と呼ぶことには一定の理にかなっていると言えます。

まあ、そうとも言えるかな。ドラゴンがいるぞ!

OCGと「Zオーダー」

問題となるのは、OCGがレイヤーとは重要な点で根本的に異なるという点です。 最も重要な点は、オプションコンテンツグループ(OCG)は「Zオーダー」とは全く関係がないということです。実際、上記のpdfToolboxのスクリーンショット例では、クリエイティブアプリケーションでは不可能な処理が行われています。そこには2つの「レイヤー」が含まれており:

  • すべてのテキストオブジェクト
  • すべてのベクターオブジェクト

「すべてのテキストオブジェクト」レイヤーにはすべてのテキストオブジェクトが含まれており、これを非表示にすると、PDFファイル内のすべてのテキストオブジェクトが非表示になります。これは、クリエイティブアプリケーションでは以下の理由により不可能です。 これらのテキストオブジェクトは、Z順が揃っていません!

また、PDFドキュメント内でこれら2つのレイヤーの「順序」を変更しても(たとえば、「All vector objects」レイヤーを最上層に移動しても)、PDFページの描画にはまったく影響しません。繰り返しになりますが、PDFのオプションコンテンツグループは、そこに含まれるオブジェクトのZ順序とはまったく関連していません。

PDFにおけるZ順序

PDFには

Z順序という概念がないのでしょうか? もちろんあります。ページ上のオブジェクトは、特定の、明確に定義された順序で描画されます(実際には、ページのページ記述で定義されている順序と同じです)。 また、PDF ではオブジェクトの Z 順序を変更することも可能です。例えば、pdfToolbox には「最前面へ(Bring to front)」という修正機能があります:

Screenshot of the bring to front fixup UI

これにより、指定されたオブジェクトが描画順序の最前面(Z順の最上部)に移動します。「背面へ移動」の修正機能はこれとは逆の動作を行い、それらを背面へ移動させます。

これらの修正機能も非常に有用です。例えば、切り抜き輪郭(ダイライン)が、ファイル内の他のすべてのオブジェクトの上に描画されるように設定できるからです。

まとめ

pdfToolboxには「レイヤーエクスプローラー」という機能があり、PDF文書におけるレイヤーについてよく話題に上りますが、この点については細心の注意を払う必要があります。PDF文書には、クリエイティブアプリケーションで馴染みのあるような「レイヤー」という概念は実際には存在せず、そのように捉えるのは危険です。

その代わり、PDFには「オプションコンテンツグループ(OCG)」という概念があり、これを利用してページ要素の表示/非表示を制御することができます。これはグラフィック編集ソフトでできることと似ていますが、両者の概念は根本的に異なります!

あ、OCGを使うと、PDF仕様書には「OCCD」や「OCMD」といった、さらに複雑な機能を実現できるものも定義されています。でも、その話はまた別の機会に!

この投稿をシェアする

その他のブログ記事

その他のブログ記事