| categories |
|
|||||
|---|---|---|---|---|---|---|
| date | 2026-02-10 | |||||
| description | 學習如何在 Java 中使用 GroupDocs.Annotation 為 PDF 添加多頁水印。本分步教學示範如何在 Java 中加入 PDF 水印,並提供程式碼範例、故障排除技巧與最佳實踐。 | |||||
| keywords | java pdf watermark, add watermark to pdf java, java watermark library, pdf annotation java, groupdocs java watermark | |||||
| lastmod | 2026-02-10 | |||||
| linktitle | Java PDF Watermark Guide | |||||
| tags |
|
|||||
| title | Java PDF 水印 – 多頁 PDF 水印指南 | |||||
| type | docs | |||||
| url | /zh-hant/java/graphical-annotations/groupdocs-java-watermark-annotations-pdf-guide/ | |||||
| weight | 1 |
output with all translated content.
在需要批量保護、品牌化或標記文件時,加入 pdf watermark multiple pages 是常見需求。在本教學中,您將會看到如何使用 GroupDocs.Annotation add pdf watermark java,從專案設定到進階客製化。我們會逐步說明每個步驟,解釋每個設定背後的原因,並提供實用技巧以避免常見的陷阱。
- 什麼函式庫可以在 Java 中加入 pdf watermark multiple pages? GroupDocs.Annotation for Java。
- 我需要授權嗎? 是的,免費試用可用於開發;正式環境需要完整授權。
- 我可以一次為所有頁面加上水印嗎? 可以 — 在迴圈中為每一頁建立 watermark annotation。
- 需要哪個 Java 版本? JDK 8 以上(建議使用 JDK 11 以上)。
- 如何控制不透明度? 使用
setOpacity(double),其中 0.0 為完全透明,1.0 為完全不透明。
是否曾經發現重要文件在未經授權的情況下被分享?或是想為公司 PDF 加上品牌卻不知從何著手?您並不孤單。為 PDF 加上水印是開發者今天最常面對的文件安全與品牌需求之一。
無論是保護機密商業文件、為行銷素材加上品牌,或僅僅是防止未授權的散布,程式化加入水印都能為您節省大量手動時間。而使用 Java 搭配合適的函式庫,這個過程出奇地簡單。
在本指南中,您將學會如何使用 GroupDocs.Annotation for Java 為 PDF 加上專業外觀的水印 — 這是市面上最可靠的 Java 水印函式庫之一。我們將從基礎設定講到進階客製化,並說明常見陷阱以及避免方法。
您將在結束時掌握的內容:
- 設定 GroupDocs.Annotation for Java 的水印
- 建立具完整控制的自訂 watermark annotation
- 排除常見的 watermark 實作問題
- 優化您的 watermark 程式碼以供正式環境使用
A PDF 水印是一層覆蓋於文件內容之上的圖層,並不會改變原始文字。使用 pdf watermark multiple pages 可讓您在每一頁上持續標示品牌、機密聲明或版本標記,確保保護隨整份文件一起傳遞。
- Java 環境: JDK 8 或以上(建議 JDK 11+),Maven 3.6+,以及您選擇的 IDE。
- 知識前提: 基本的 Java、檔案 I/O、Maven 依賴。
- 專案設定: 具備輸出資料夾的寫入權限,且有足夠的記憶體處理大型 PDF。
在 Java 中為 PDF 加入水印的第一步是正確設定 GroupDocs.Annotation 函式庫。以下是可正常運作的 Maven 設定:
<repositories>
<repository>
<id>repository.groupdocs.com</id>
<name>GroupDocs Repository</name>
<url>https://releases.groupdocs.com/annotation/java/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-annotation</artifactId>
<version>25.2</version>
</dependency>
</dependencies>小技巧:請始終使用最新版本以取得錯誤修正與效能提升。上述版本為 2025 年最新版本。
許多教學會略過此步驟 — 正式環境需要正確的授權。以下是您的選項:
- 免費試用:適合測試與開發。從 GroupDocs Downloads 下載
- 臨時授權:取得完整功能以供評估。從 Temporary License Page 取得
- 正式授權:用於正式應用程式。從 GroupDocs Purchase Page 購買
當您完成相依性設定後,以下說明如何正確初始化函式庫:
import com.groupdocs.annotation.Annotator;
public class WatermarkSetup {
public static void main(String[] args) {
String inputFilePath = "YOUR_DOCUMENT_DIRECTORY/input.pdf";
Annotator annotator = new Annotator(inputFilePath);
// Your watermark code goes here...
// Always remember to dispose!
annotator.dispose();
}
}常見錯誤:忘記呼叫 dispose() 可能導致記憶體洩漏,尤其在處理多個文件時。
現在進入重點 — 真正加入水印!只要了解組件,GroupDocs.Annotation 函式庫就能讓此工作出奇地簡單。
將 watermark annotation 視為 PDF 上的覆蓋層。它們可以包含文字、具自訂位置、顏色、不透明度以及旋轉角度。不同於簡單的文字加入,watermark annotation 專為可見標記而設計,且不會干擾文件的核心內容。
首先,整理所有匯入的類別。以下是您需要的核心類別:
import com.groupdocs.annotation.Annotator;
import com.groupdocs.annotation.models.Reply;
import com.groupdocs.annotation.models.Rectangle;
import com.groupdocs.annotation.models.annotationmodels.WatermarkAnnotation;
import java.util.ArrayList;
import java.util.Calendar;每個類別都有其特定角色:
Annotator:與 PDF 互動的主要介面WatermarkAnnotation:您將自訂的水印物件Rectangle:定義水印顯示位置與大小Reply:可選的關於水印的評論或備註
String inputFilePath = "YOUR_DOCUMENT_DIRECTORY/input.pdf";
String outputPath = "YOUR_OUTPUT_DIRECTORY/AddWatermarkAnnotation.pdf";
final Annotator annotator = new Annotator(inputFilePath);重要說明:Annotator 物件會將 PDF 載入記憶體,請確保有足夠的 RAM 以處理大型檔案。對於超過 50 MB 的 PDF,建議分批處理。
雖非必須,但 Reply 可用於文件追蹤或審批流程:
Reply reply1 = new Reply();
reply1.setComment("First comment");
reply1.setRepliedOn(Calendar.getInstance().getTime());
Reply reply2 = new Reply();
reply2.setComment("Second comment");
reply2.setRepliedOn(Calendar.getInstance().getTime());這些回覆會成為 annotation 的中繼資料,支援 annotation 註解的 PDF 閱讀器可顯示它們。
這是發揮創意的地方。水印設定決定了水印的所有外觀屬性:
ArrayList<Reply> replies = new ArrayList<>();
replies.add(reply1);
replies.add(reply2);
WatermarkAnnotation watermark = new WatermarkAnnotation();
watermark.setAngle(75.0); // Set the angle of the watermark.
watermark.setBox(new Rectangle(200, 200, 100, 50)); // Define position and size with a rectangle.
watermark.setCreatedOn(Calendar.getInstance().getTime());
watermark.setText("Watermark");
watermark.setFontColor(65535); // Yellow color in ARGB format
watermark.setFontSize(12.0);
watermark.setMessage("This is a watermark annotation");
watermark.setOpacity(0.7);
watermark.setPageNumber(0);
watermark.setReplies(replies);讓我們拆解這些設定:
setAngle(75.0):將水印旋轉 75 度。適合對角的「CONFIDENTIAL」印章。setBox(new Rectangle(200, 200, 100, 50)):位置 (200, 200),寬度 100,高度 50。setFontColor(65535):ARGB 顏色格式——此例為黃色。setOpacity(0.7):70% 不透明度——可見但不會過於突兀。setPageNumber(0):套用於第一頁(索引從 0 開始)。
annotator.add(watermark);
annotator.save(outputPath);
annotator.dispose();完成!您的 PDF 現在已擁有專業的水印。save() 方法會產生一個套用水印的新 PDF 檔案,原始檔保持不變。
預設情況下,水印只套用於單一頁面。若要 add pdf watermark multiple pages,請遍歷文件的每一頁,為每頁新增一個 WatermarkAnnotation:
// Get total page count first
int pageCount = annotator.getDocument().getPages().size();
for (int i = 0; i < pageCount; i++) {
WatermarkAnnotation watermark = new WatermarkAnnotation();
// Reuse the same configuration or customize per page
watermark.setAngle(45.0);
watermark.setText("CONFIDENTIAL");
watermark.setFontColor(16711680); // Red
watermark.setOpacity(0.3);
watermark.setFontSize(24.0);
watermark.setBox(new Rectangle(100, 300, 400, 100));
watermark.setPageNumber(i);
annotator.add(watermark);
}
annotator.save(outputPath);
annotator.dispose();此程式碼片段示範了有效 add pdf watermark multiple pages 所需的完整模式。
// Better error handling approach
try {
File inputFile = new File(inputFilePath);
if (!inputFile.exists()) {
throw new FileNotFoundException("Input PDF not found: " + inputFilePath);
}
Annotator annotator = new Annotator(inputFilePath);
// ... your watermark code
} catch (Exception e) {
System.err.println("Error processing PDF: " + e.getMessage());
}- 再次確認絕對路徑。
- 確認讀寫權限。
- 確保輸出資料夾已存在。
- 必須呼叫
dispose()。 - 一次處理單一檔案,避免平行處理。
- 增加 JVM 堆積記憶體(例如對非常大的文件使用
-Xmx4g)。
- 記得 PDF 座標系統是從左下角開始。
- 測試不同頁面尺寸;A4 與 Letter 可能導致位置偏移。
- 若水印過淡,可調整不透明度。
可使用的 ARGB 值如下:
- 紅色:
16711680 - 藍色:
255 - 綠色:
65280 - 黑色:
0 - 白色:
16777215 - 黃色:
65535(如範例所示)
WatermarkAnnotation confidentialWatermark = new WatermarkAnnotation();
confidentialWatermark.setAngle(45.0);
confidentialWatermark.setText("CONFIDENTIAL");
confidentialWatermark.setFontColor(16711680); // Red
confidentialWatermark.setOpacity(0.3); // Subtle but visible
confidentialWatermark.setFontSize(24.0);
confidentialWatermark.setBox(new Rectangle(100, 300, 400, 100));WatermarkAnnotation brandWatermark = new WatermarkAnnotation();
brandWatermark.setText("© YourCompany 2025");
brandWatermark.setFontColor(0); // Black
brandWatermark.setOpacity(0.6);
brandWatermark.setFontSize(10.0);
brandWatermark.setBox(new Rectangle(400, 50, 150, 30));WatermarkAnnotation versionWatermark = new WatermarkAnnotation();
versionWatermark.setText("DRAFT - v2.1");
versionWatermark.setFontColor(255); // Blue
versionWatermark.setOpacity(0.8);
versionWatermark.setBox(new Rectangle(50, 750, 100, 30));public void processMultiplePDFs(List<String> pdfPaths) {
for (String path : pdfPaths) {
Annotator annotator = null;
try {
annotator = new Annotator(path);
// Add your watermark logic here
annotator.save(path.replace(".pdf", "_watermarked.pdf"));
} finally {
if (annotator != null) {
annotator.dispose(); // Always dispose, even if exceptions occur
}
}
}
}- 依序處理文件以降低記憶體使用量。
- 長時間執行時使用進度指示器。
- 除非確認函式庫具備執行緒安全,否則避免平行處理。
public class WatermarkTemplates {
public static WatermarkAnnotation createConfidentialWatermark() {
WatermarkAnnotation watermark = new WatermarkAnnotation();
watermark.setAngle(45.0);
watermark.setText("CONFIDENTIAL");
watermark.setFontColor(16711680);
watermark.setOpacity(0.3);
watermark.setFontSize(24.0);
return watermark;
}
public static WatermarkAnnotation createBrandWatermark(String companyName) {
WatermarkAnnotation watermark = new WatermarkAnnotation();
watermark.setText("© " + companyName + " 2025");
watermark.setFontColor(0);
watermark.setOpacity(0.6);
watermark.setFontSize(10.0);
return watermark;
}
}Q: 如何在 PDF 的多頁加入水印?
A: 透過迴圈遍歷文件的頁數,為每頁建立 WatermarkAnnotation,在迴圈內設定 setPageNumber(i)。
Q: 我可以為水印使用自訂字型嗎?
A: GroupDocs.Annotation 會使用系統已安裝的字型。請指定主機上存在的字型族;若找不到,函式庫會回退至預設字型。
Q: 哪個不透明度設定最適合專業水印?
A: 0.3 至 0.7 之間為理想範圍——足夠低以保持內容可讀,亦足夠高以顯眼。
Q: 如何處理非常大的 PDF 檔案?
A: 增加 JVM 堆積記憶體(例如 -Xmx4g 或更高),一次處理單一檔案,且每個文件處理完畢後務必呼叫 dispose()。
Q: 是否可以移除或修改已存在的水印?
A: 可以 — 透過 annotator.get() 取得現有的 annotation,篩選出 WatermarkAnnotation,然後依需求編輯或刪除:
// Get existing annotations
List<AnnotationBase> annotations = annotator.get();
// Filter and modify as needed- 文件: GroupDocs Annotation Java Docs
- 完整 API 參考: GroupDocs Annotation Java API
- 下載最新版本: GroupDocs Downloads
- 商業授權: Purchase GroupDocs
- 社群支援: GroupDocs Forums
最後更新: 2026-02-10
測試環境: GroupDocs.Annotation 25.2
作者: GroupDocs