レイヤー(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() が呼び出されるまでそのレイヤーに属します。
| パラメータ | 型 | 説明 |
|---|---|---|
$name | string | ビューアのレイヤーパネルに表示される表示名 |
$print | bool | レイヤーコンテンツを印刷時に表示するかどうか |
$view | bool | レイヤーコンテンツを画面上に表示するかどうか |
endLayer()
現在のレイヤーを閉じます。この呼び出し以降に描画されるコンテンツは、どのレイヤーにも属しません。
レイヤーの表示モード
$print と $view の組み合わせにより、4つの便利な表示モードが得られます:
$print | $view | 動作 |
|---|---|---|
true | true | 常に表示(デフォルト) |
false | true | 画面のみ — 印刷時は非表示 |
true | false | 印刷のみ — 画面では非表示 |
false | false | 初期状態ですべて非表示(ユーザーが切り替え可能) |
ネストされたレイヤー
レイヤーはネストできます。子レイヤーは親の表示制約を継承します。親が非表示の場合、子も非表示になります。
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を完全にサポートしています。ブラウザベースのビューアはレイヤーを無視する場合があります。
- レイヤーはメタデータフラグであり、コンテンツの複製ではないため、ファイルサイズへのオーバーヘッドは最小限です。