跳轉到

水印範例

需求套件nextpdf/core 難度:入門

文字水印

<?php

declare(strict_types=1);

use NextPDF\Core\Document;
use NextPDF\Core\ValueObjects\PageSize;
use NextPDF\Core\ValueObjects\Color;

$document = Document::createStandalone(pageSize: PageSize::A4);
$page     = $document->pages()->add();

// 先渲染正常內容
$document->text()->write(
    text:     '這是一份機密文件,包含敏感業務資訊。',
    position: Position::at(x: 25.0, y: 50.0),
    fontSize: 12.0,
    fontName: 'NotoSansCJKtc',
);

// ─── 文字水印(全頁對角線) ───────────────────────────────────
$document->watermarker()->applyText(
    text:     '機密文件',
    pages:    'all',         // 套用至所有頁面
    opacity:  0.08,          // 8% 透明度
    rotation: 45.0,          // 45° 旋轉
    fontSize: 48.0,
    fontName: 'NotoSansCJKtc-Bold',
    color:    Color::fromHex('#111827'),
    repeat:   true,          // 重複鋪滿整頁
    spacing:  60.0,          // 重複間距(mm)
);

$document->save('/output/confidential-watermarked.pdf');

單一頁面水印

// 只在特定頁面加水印
$document->watermarker()->applyText(
    text:   'DRAFT',
    pages:  [1, 3],          // 只套用至第 1 和第 3 頁
    opacity: 0.12,
    rotation: 30.0,
    fontSize: 60.0,
    fontName: 'Helvetica',
    color:    Color::fromHex('#EF4444'),
    repeat:   false,         // 只出現一次(頁面中央)
);

英文章戳水印

$document->watermarker()->applyText(
    text:      'APPROVED',
    pages:     'all',
    opacity:   0.15,
    rotation:  -20.0,
    fontSize:  72.0,
    fontName:  'Helvetica-Bold',
    color:     Color::fromHex('#16A34A'),
    position:  'bottom-right',  // 右下角定位
    repeat:    false,
    padding:   15.0,
);

圖像水印(浮水印)

// 圖像水印(如公司印章)
$stamp = $document->images()->embed('/assets/company-stamp.png');

$document->watermarker()->applyImage(
    image:    $stamp,
    pages:    'all',
    opacity:  0.20,
    rotation: -15.0,
    width:    60.0,
    position: 'center',   // 頁面正中央
);

自訂位置水印

use NextPDF\Core\Watermark\ValueObjects\WatermarkPosition;

// 精確座標定位(以 mm 為單位)
$document->watermarker()->applyText(
    text:     'PAGE PROOF',
    pages:    'all',
    opacity:  0.10,
    rotation: 0.0,
    fontSize: 14.0,
    fontName: 'Helvetica',
    color:    Color::fromHex('#9CA3AF'),
    position: WatermarkPosition::absolute(x: 25.0, y: 10.0),
);

對現有 PDF 加水印

use NextPDF\Core\PdfLoader;

// 載入現有 PDF(如來自 Artisan 或 Gotenberg 的轉換結果)
$loader   = PdfLoader::create();
$document = $loader->load('/uploads/contract.pdf');

$document->watermarker()->applyText(
    text:    '草稿版本 — 尚未正式生效',
    pages:   'all',
    opacity: 0.06,
    rotation: 45.0,
    fontSize: 32.0,
    fontName: 'NotoSansCJKtc',
    color:   Color::fromHex('#374151'),
    repeat:  true,
);

$document->save('/output/contract-draft.pdf');

程式碼說明

安全性注意事項

注意:在已簽章的 PDF 上套用水印會使數位簽章失效。若需要在簽章 PDF 上加水印,請先加水印再簽章,或使用獨立圖層(Layer)方式。

延伸閱讀