Skip to content

Latest commit

 

History

History
405 lines (307 loc) · 14.8 KB

File metadata and controls

405 lines (307 loc) · 14.8 KB
categories
Java PDF Processing
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
java
pdf
watermark
groupdocs
document-security
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.

Java PDF Watermark – pdf watermark multiple pages 指南

在需要批量保護、品牌化或標記文件時,加入 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 水印(以及 Java 如何讓它變得簡單)

是否曾經發現重要文件在未經授權的情況下被分享?或是想為公司 PDF 加上品牌卻不知從何著手?您並不孤單。為 PDF 加上水印是開發者今天最常面對的文件安全與品牌需求之一。

無論是保護機密商業文件、為行銷素材加上品牌,或僅僅是防止未授權的散布,程式化加入水印都能為您節省大量手動時間。而使用 Java 搭配合適的函式庫,這個過程出奇地簡單。

在本指南中,您將學會如何使用 GroupDocs.Annotation for Java 為 PDF 加上專業外觀的水印 — 這是市面上最可靠的 Java 水印函式庫之一。我們將從基礎設定講到進階客製化,並說明常見陷阱以及避免方法。

您將在結束時掌握的內容:

  • 設定 GroupDocs.Annotation for Java 的水印
  • 建立具完整控制的自訂 watermark annotation
  • 排除常見的 watermark 實作問題
  • 優化您的 watermark 程式碼以供正式環境使用

什麼是 PDF 水印,為何要在多頁使用?

A PDF 水印是一層覆蓋於文件內容之上的圖層,並不會改變原始文字。使用 pdf watermark multiple pages 可讓您在每一頁上持續標示品牌、機密聲明或版本標記,確保保護隨整份文件一起傳遞。

前置條件

必要條件

  • Java 環境: JDK 8 或以上(建議 JDK 11+),Maven 3.6+,以及您選擇的 IDE。
  • 知識前提: 基本的 Java、檔案 I/O、Maven 依賴。
  • 專案設定: 具備輸出資料夾的寫入權限,且有足夠的記憶體處理大型 PDF。

設定您的 Java PDF 水印環境

將 GroupDocs.Annotation 加入您的專案

在 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 年最新版本。

取得授權

許多教學會略過此步驟 — 正式環境需要正確的授權。以下是您的選項:

  1. 免費試用:適合測試與開發。從 GroupDocs Downloads 下載
  2. 臨時授權:取得完整功能以供評估。從 Temporary License Page 取得
  3. 正式授權:用於正式應用程式。從 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() 可能導致記憶體洩漏,尤其在處理多個文件時。

如何使用 Java 加入 pdf watermark multiple pages

現在進入重點 — 真正加入水印!只要了解組件,GroupDocs.Annotation 函式庫就能讓此工作出奇地簡單。

了解 Watermark Annotation

將 watermark annotation 視為 PDF 上的覆蓋層。它們可以包含文字、具自訂位置、顏色、不透明度以及旋轉角度。不同於簡單的文字加入,watermark annotation 專為可見標記而設計,且不會干擾文件的核心內容。

步驟 1:匯入正確的類別

首先,整理所有匯入的類別。以下是您需要的核心類別:

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:可選的關於水印的評論或備註

步驟 2:初始化 PDF 以便加水印

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,建議分批處理。

步驟 3:建立可選的 Reply 物件

雖非必須,但 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 閱讀器可顯示它們。

步驟 4:設定您的水印(有趣的部分!)

這是發揮創意的地方。水印設定決定了水印的所有外觀屬性:

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 開始)。

步驟 5:套用並儲存加了水印的 PDF

annotator.add(watermark);
annotator.save(outputPath);
annotator.dispose();

完成!您的 PDF 現在已擁有專業的水印。save() 方法會產生一個套用水印的新 PDF 檔案,原始檔保持不變。

如何加入 pdf watermark multiple pages(全部頁面)

預設情況下,水印只套用於單一頁面。若要 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());
}
  • 再次確認絕對路徑。
  • 確認讀寫權限。
  • 確保輸出資料夾已存在。

大型 PDF 的記憶體問題

  • 必須呼叫 dispose()
  • 一次處理單一檔案,避免平行處理。
  • 增加 JVM 堆積記憶體(例如對非常大的文件使用 -Xmx4g)。

水印未出現在預期位置

  • 記得 PDF 座標系統是從左下角開始。
  • 測試不同頁面尺寸;A4 與 Letter 可能導致位置偏移。
  • 若水印過淡,可調整不透明度。

字型顏色問題

可使用的 ARGB 值如下:

  • 紅色:16711680
  • 藍色:255
  • 綠色:65280
  • 黑色:0
  • 白色:16777215
  • 黃色:65535(如範例所示)

Java PDF 水印的實務案例

商業文件保護

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.30.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

其他資源


最後更新: 2026-02-10
測試環境: GroupDocs.Annotation 25.2
作者: GroupDocs