Skip to content

Layer (OCG)

PDF layer — tên chính thức là Optional Content Group (OCG) — cho phép bạn tạo nội dung có thể bật tắt trong trình xem, hoặc chọn lọc khi in. Hệ thống layer được quản lý qua Graphics\LayerManager và truy cập qua fluent API của Document.

Mọi method trả về static, nên mỗi lệnh gọi có thể chain.

Tham chiếu nhanh

MethodMục đích
startLayer()Bắt đầu layer mới với tên cho trước
endLayer()Đóng layer hiện tại

Ví dụ cơ bản

php
use Yeeefang\TcpdfNext\Core\Document;

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

    // Hiển thị trên màn hình, không in
    ->startLayer('Screen Only', print: false, view: true)
    ->cell(0, 10, 'This text appears on screen but not when printed', newLine: true)
    ->endLayer()

    // Chỉ in
    ->startLayer('Print Only', print: true, view: false)
    ->cell(0, 10, 'This text appears only when printed', newLine: true)
    ->endLayer()

    // Luôn hiển thị
    ->cell(0, 10, 'This text is always visible', newLine: true);

startLayer()

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

Bắt đầu layer mới. Mọi nội dung vẽ sau lệnh gọi này thuộc về layer cho đến khi gọi endLayer().

Tham sốKiểuMô tả
$namestringTên hiển thị trong panel layer của trình xem
$printboolNội dung layer có xuất hiện khi in hay không
$viewboolNội dung layer có xuất hiện trên màn hình hay không

endLayer()

Đóng layer hiện tại. Nội dung vẽ sau lệnh gọi này không còn thuộc layer nào.

Chế độ hiển thị Layer

Tổ hợp $print$view cho bạn bốn chế độ hiển thị hữu ích:

$print$viewHành vi
truetrueLuôn hiển thị (mặc định)
falsetrueChỉ màn hình — ẩn khi in
truefalseChỉ in — ẩn trên màn hình
falsefalseẨn ban đầu mọi nơi (người dùng có thể bật tắt)

Layer lồng nhau

Layer có thể lồng nhau. Layer con kế thừa ràng buộc hiển thị của layer cha — nếu cha bị ẩn, con cũng bị ẩn.

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();

Trường hợp sử dụng

PDF đa ngôn ngữ

Đặt mỗi bản dịch trên layer riêng. Người đọc chuyển đổi ngôn ngữ trong panel layer:

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

Watermark (chỉ màn hình)

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

Crop Mark chỉ in

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

Mẹo

  • Tên layer nên ngắn gọn và mô tả rõ — chúng xuất hiện nguyên văn trong panel layer của trình xem.
  • Adobe Acrobat và Foxit Reader hỗ trợ OCG đầy đủ; trình xem dựa trên trình duyệt có thể bỏ qua layer.
  • Layer chỉ tăng rất ít overhead kích thước file vì chúng là cờ metadata, không phải nội dung trùng lặp.

Phân phối theo giấy phép LGPL-3.0-or-later.