在 Java 中使用 GroupDocs.Watermark 為 PDF 添加水印
在本指南中,您將學習如何使用 GroupDocs.Watermark Java SDK 為 PDF 添加水印。我們將逐步說明如何從磁碟、串流或受密碼保護的來源載入文件,套用文字或圖片水印,最後儲存更新後的 PDF。無論您是構建批次處理器或單檔案服務,這些步驟都能提供可靠的生產就緒解決方案。
快速回答
- 我可以為受密碼保護的 PDF 添加水印嗎? 是 – 載入文件時傳入密碼,然後照常套用水印。
- 哪些格式可以加水印? 超過 30 種格式,包括 PDF、DOCX、PPTX 以及圖片。
- 開發時需要授權嗎? 測試可使用臨時授權;正式上線需購買正式授權。
- 需要哪個 Java 版本? 支援 Java 8 或更高版本。
- 支援串流嗎? 當然可以 – 您可以從
InputStream載入,並儲存至OutputStream,無需觸及檔案系統。
什麼是為 PDF 添加水印?
為 PDF 添加水印 是指在 PDF 文件的每一頁覆蓋半透明的文字或圖片,以傳達所有權、機密性或品牌資訊。GroupDocs.Watermark for Java 提供單一呼叫的 API,能自動處理定位、不透明度與頁面範圍的選擇。
為什麼使用 GroupDocs.Watermark for Java?
GroupDocs.Watermark 支援 35+ 種檔案格式,且能在一般伺服器等級的 CPU 上於 2 秒內處理 500 頁的 PDF。此函式庫完全在記憶體中運作,無需安裝 Microsoft Office 或 Adobe Acrobat。其 API 為執行緒安全,適合高吞吐量的網路服務。
前置條件
- 已安裝 Java 8 或更新版本。
- Maven 或 Gradle 專案已配置
groupdocs-watermark相依性。 - 有效的 GroupDocs.Watermark 授權(評估用臨時授權)。
- 您想保護的 PDF 檔案,可選擇性附帶密碼。
如何為 PDF 添加水印 – 步驟說明
載入來源文件、套用水印,最後儲存結果。以下各節直接說明每個子任務。
如何從磁碟載入文件?
Watermarker 是用於載入與操作文件以加水印的主要類別。將完整檔案路徑傳入 Watermarker 建構子;SDK 會自動偵測檔案格式、驗證內容,並將文件載入記憶體,隨時準備執行任何水印操作。此方式適用於 PDF、Word 檔、圖片及其他多種支援類型。
Watermarker watermarker = new Watermarker("C:/files/input.pdf");
此行之後,PDF 已完整載入記憶體,隨時可進行任何水印操作。
如何從串流載入文件?
Watermarker 也能接受 InputStream,直接從記憶體載入文件。當您透過 HTTP 或訊息佇列取得檔案時,可將位元組陣列包裝成 ByteArrayInputStream,並傳入接受 InputStream 的 Watermarker 建構子。SDK 會讀取串流而不寫入磁碟,保證效能與安全,且透過分塊處理支援大型檔案。此方法非常適合 Web 服務與微服務架構。
InputStream pdfStream = new ByteArrayInputStream(pdfBytes);
Watermarker watermarker = new Watermarker(pdfStream);
SDK 會讀取串流而不寫入磁碟,保證效能與安全。
如何載入受密碼保護的文件?
Watermarker 支援透過第二個參數提供密碼,以載入受密碼保護的 PDF。將密碼作為建構子的第二個參數傳入。SDK 會即時解密 PDF,之後您即可像處理其他文件般使用。若密碼正確,所有頁面皆可加水印;若密碼錯誤,函式庫會拋出明確的例外,您可捕獲並記錄以進行除錯。
Watermarker watermarker = new Watermarker("C:/files/secure.pdf", "mySecretPwd");
若密碼不正確,SDK 會拋出資訊性的例外,您可捕獲並記錄。
如何套用文字水印?
TextWatermark 代表可套用於頁面的文字水印,且樣式可自訂。使用您想要的文字、字型、大小與顏色建立 TextWatermark 物件。接著在 Watermarker 實例上呼叫 add,可選擇性指定頁面範圍。水印會以指定的不透明度與旋轉角度呈現,且可透過預設位置或自訂座標定位,確保所有頁面外觀一致。
TextWatermark watermark = new TextWatermark("Confidential", new Font("Arial", 36));
watermark.setColor(Color.RED);
watermark.setTransparency(0.5);
watermarker.add(watermark);
此呼叫預設會在每一頁放置水印;如有需要,可使用 new PageRange(1, 5) 限制範圍。
如何套用圖片水印?
ImageWatermark 代表以圖片形式的水印,例如標誌或印章。使用您的標誌路徑或串流建立 ImageWatermark,然後同文字水印般加入。SDK 會自動將圖片縮放至適合頁面,同時保留長寬比,您亦可調整不透明度、旋轉與放置位置,以達到理想的視覺效果而不扭曲原始內容。
ImageWatermark imgWatermark = new ImageWatermark("C:/images/logo.png");
imgWatermark.setTransparency(0.3);
watermarker.add(imgWatermark);
SDK 會將圖片縮放至適合頁面,同時保留長寬比。
如何儲存已加水印的文件?
save 會將修改後的文件寫入指定位置與選定格式。呼叫 save 時提供輸出路徑與欲使用的格式。若省略格式參數,則使用與來源相同的格式。此方法會將已加水印的 PDF 寫入磁碟,保留所有原始內容,僅新增水印層,且支援儲存至串流以便後續處理。
watermarker.save("C:/files/output.pdf");
此方法會將已加水印的 PDF 寫入磁碟,保留所有原始內容,僅新增水印層。
可用教學
如何在 Java 中使用 GroupDocs.Watermark 載入受密碼保護的文件
了解如何使用 GroupDocs.Watermark for Java 載入與管理受密碼保護文件中的水印。本教學提供逐步說明、實作範例與除錯技巧。
如何在 Java 中使用 GroupDocs.Watermark 載入並為受密碼保護的 Word 文件加水印
了解如何使用 GroupDocs.Watermark 搭配 Java,有效載入、管理並為受密碼保護的 Word 文件加水印。
其他資源
- GroupDocs.Watermark for Java 文件說明
- GroupDocs.Watermark for Java API 參考文件
- 下載 GroupDocs.Watermark for Java
- GroupDocs.Watermark 論壇
- 免費支援
- 臨時授權
常見問題與解決方案
- 密碼錯誤 – 再次確認密碼字串;必須為 UTF‑8 編碼。
- 大型 PDF 記憶體不足 – 使用接受
InputStream與OutputStream的Watermarker建構子,啟用串流模式。 - 水印未顯示 – 確認水印不透明度設定高於 0.1,且顏色與頁面背景形成對比。
常見問答
Q: 我可以在同一個 PDF 中添加多個水印嗎?
A: 可以。重複呼叫 watermarker.add(),傳入不同的 TextWatermark 或 ImageWatermark 物件;每個水印會依加入順序堆疊。
Q: 函式庫會保留現有的註解嗎?
A: 當然會。所有原始 PDF 物件,包括註解、表單欄位與中繼資料,皆保持不變,除非您明確修改它們。
Q: 能只在選取的頁面加水印嗎?
A: 可以。將 PageRange(例如 new PageRange(2, 4))傳入 add 方法,即可限制水印僅套用於特定頁面。
Q: 支援的最大檔案大小是多少?
A: 由於採用串流架構,SDK 可處理高達 2 GB 的檔案,而不需將整個文件載入記憶體。
Q: 加入水印後如何移除?
A: 使用 watermarker.remove(watermarkId),其中 watermarkId 為您最初加入水印時返回的識別碼。
最後更新: 2026-09-16
測試環境: GroupDocs.Watermark 23.9 for Java
作者: GroupDocs