水印範例¶
需求套件: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)方式。