Skip to content

レイヤー(OCG)

PDFレイヤー(正式にはOptional Content Groups(OCG)と呼ばれます)を使用すると、ビューアで表示/非表示を切り替えたり、印刷時に選択的に含めたりできるコンテンツを作成できます。レイヤーシステムは Graphics\LayerManager を通じて管理され、Document のフルーエントAPIからアクセスできます。

すべてのメソッドは static を返すため、メソッドチェーンが可能です。

クイックリファレンス

メソッド用途
startLayer()指定した名前で新しいレイヤーを開始
endLayer()現在のレイヤーを閉じる

基本的な使用例

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()
    ->setFont('Helvetica', '', 12)

    // ビューアで表示、印刷時は非表示
    ->startLayer('Screen Only', print: false, view: true)
    ->cell(0, 10, 'This text appears on screen but not when printed', newLine: true)
    ->endLayer()

    // 印刷時のみ表示
    ->startLayer('Print Only', print: true, view: false)
    ->cell(0, 10, 'This text appears only when printed', newLine: true)
    ->endLayer()

    // 常に表示
    ->cell(0, 10, 'This text is always visible', newLine: true);

startLayer()

php
$pdf->startLayer(string $name, bool $print = true, bool $view = true): static

新しいレイヤーを開始します。この呼び出し以降に描画されるすべてのコンテンツは、endLayer() が呼び出されるまでそのレイヤーに属します。

パラメータ説明
$namestringビューアのレイヤーパネルに表示される表示名
$printboolレイヤーコンテンツを印刷時に表示するかどうか
$viewboolレイヤーコンテンツを画面上に表示するかどうか

endLayer()

現在のレイヤーを閉じます。この呼び出し以降に描画されるコンテンツは、どのレイヤーにも属しません。

レイヤーの表示モード

$print$view の組み合わせにより、4つの便利な表示モードが得られます:

$print$view動作
truetrue常に表示(デフォルト)
falsetrue画面のみ — 印刷時は非表示
truefalse印刷のみ — 画面では非表示
falsefalse初期状態ですべて非表示(ユーザーが切り替え可能)

ネストされたレイヤー

レイヤーはネストできます。子レイヤーは親の表示制約を継承します。親が非表示の場合、子も非表示になります。

php
$pdf->startLayer('Parent')
    ->cell(0, 10, 'Parent content', newLine: true)
    ->startLayer('Child', print: false, view: true)
    ->cell(0, 10, 'Child content — screen only', newLine: true)
    ->endLayer()
    ->endLayer();

ユースケース

多言語PDF

各翻訳を別々のレイヤーに配置します。読者はレイヤーパネルで言語を切り替えます:

php
$pdf->startLayer('English')
    ->cell(0, 10, 'Hello, World!', newLine: true)
    ->endLayer()
    ->startLayer('Chinese')
    ->cell(0, 10, '你好,世界!', newLine: true)
    ->endLayer();

透かし(画面のみ)

php
$pdf->startLayer('Watermark', print: false, view: true)
    ->setFont('Helvetica', 'B', 48)
    ->setTextColor(200, 200, 200)
    ->text(60, 140, 'DRAFT')
    ->endLayer();

印刷専用のトンボ

php
$pdf->startLayer('Crop Marks', print: true, view: false)
    ->cropMark(20, 20, 10, 10)
    ->cropMark(190, 20, 10, 10)
    ->endLayer();

ヒント

  • レイヤー名は短く説明的にしましょう。ビューアのレイヤーパネルにそのまま表示されます。
  • Adobe AcrobatとFoxit ReaderはOCGを完全にサポートしています。ブラウザベースのビューアはレイヤーを無視する場合があります。
  • レイヤーはメタデータフラグであり、コンテンツの複製ではないため、ファイルサイズへのオーバーヘッドは最小限です。

LGPL-3.0-or-later ライセンスの下で公開されています。