如何在 Java 中自訂 PDF 水印

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF 讓 Java 開發者能夠使用支援完整 CSS 的 HTML 字串將自訂水印應用於 PDF 文件,提供文字、圖像、透明度、旋轉和定位的完全控制,用於品牌或安全目的。

快速入門:在 Java 中應用 PDF 水印

  1. 將 IronPDF 新增到您的 Maven 或 Gradle 專案並設置您的授權金鑰
  2. 使用 PdfDocument.fromFile() 載入您的 PDF 文件
  3. 為您的水印建立一個 HTML 字串(文字、圖像或兩者)
  4. 使用 pdf.applyWatermark(watermarkHtml) 應用水印
  5. 使用 pdf.saveAs() 保存帶水印的 PDF
 :title=QuickStartWatermark.java
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/quickstart.java
PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));
pdf.applyWatermark("<h1 style='color:red;'>Confidential</h1>");
pdf.saveAs("watermarked.pdf");
 :title=QuickStartWatermark.java
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/quickstart.java
PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));
pdf.applyWatermark("<h1 style='color:red;'>Confidential</h1>");
pdf.saveAs("watermarked.pdf");
JAVA

水印保護 PDF 文件並傳達所有權或文件狀態。 常見的用例包括將草稿標記為"機密"、在每頁上嵌入公司徽標,或表示文件正在等待審批。 IronPDF 採用 HTML 和 CSS 的方法,這意味著您可以在瀏覽器中表達的任何樣式(自訂字體、透明度、旋轉、絕對定位)在水印中同樣適用。

本指南涵蓋 text 水印、image 水印、透明度和位置控制,以及使用 TextStamperImageStamper 的高級蓋章。 有關相關 PDF 操作技術,請參閱在 Java 中從 HTML 建立 PDF 的指南新增背景和前景的概述

如何將文字水印應用於 PDF?

using applyWatermark 方法將文字蓋章到 PDF 文件的每個頁面。 該方法接受 HTML 字串,因此您可以使用任何 CSS 屬性樣式化水印:字體系列、大小、顏色、字母間距或文字陰影。 下面的範例將文件標記為紅色的"機密",這涵蓋了最常見的審核追蹤和存取控制方案。

//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/text-watermark.java
import java.io.IOException;
import java.nio.file.Paths;

import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the license key for IronPDF
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load an existing PDF document from file
        PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));

        // HTML string defines the watermark appearance via CSS
        String watermarkHtml = "<h1 style='color:red;'>Confidential</h1>";

        // Apply the watermark to every page
        pdf.applyWatermark(watermarkHtml);

        // Save the watermarked PDF to a new file
        pdf.saveAs("text_watermark.pdf");
    }
}
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/text-watermark.java
import java.io.IOException;
import java.nio.file.Paths;

import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the license key for IronPDF
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load an existing PDF document from file
        PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));

        // HTML string defines the watermark appearance via CSS
        String watermarkHtml = "<h1 style='color:red;'>Confidential</h1>";

        // Apply the watermark to every page
        pdf.applyWatermark(watermarkHtml);

        // Save the watermarked PDF to a new file
        pdf.saveAs("text_watermark.pdf");
    }
}
JAVA

applyWatermark 調用一次新增水印到所有頁面。 預設情況下,水印以 50% 的不透明度渲染,並居中於每個頁面。 要激活程式庫的所有功能,請在進行任何 PDF 操作之前配置您的IronPDF 授權金鑰。 傳遞給 applyWatermark 的 HTML 接受任何有效的 HTML 元素,因此您可以包含 <span> 或樣式化的 <p> 標籤以製作多行水印。

文字水印看起來如何?

輸出文件 text_watermark.pdf 顯示紅色的 機密 字樣,水平和垂直居中於每個頁面。 50% 的預設不透明度使文件內容在水印下仍然可讀。 對於多頁文件,每一頁都接收相同的蓋章,不需要每頁迴圈。

提示對於如斜向多行蓋章之類的複雜文字格式,您可以在單個 HTML 字串中結合多個 CSS 變換:transform: rotate(-45deg) scale(1.5)

有關適用於水印的更深層 HTML 渲染技術,請參閱HTML 到 PDF 的轉換教程


如何將圖片水印新增到 PDF 上?

圖片水印通過包裝在 HTML 字串中的 applyWatermark 方法工作。 具有透明背景的 PNG 文件是徽標水印的理想選擇,因為在將圖片合成到 PDF 頁面時會保留透明性。 JPEG、GIF、SVG 和 BMP 格式也受支持。

//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/image-watermark.java
import java.io.IOException;
import java.nio.file.Paths;

import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the license key for IronPDF
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load an existing PDF document from file
        PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));

        // Reference the image file path relative to the runtime working directory
        String watermarkHtml = "<img src='logo.png' style='width:100px;'/>";

        // Apply the image watermark to all pages
        pdf.applyWatermark(watermarkHtml);

        // Save the result
        pdf.saveAs("image_watermark.pdf");
    }
}
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/image-watermark.java
import java.io.IOException;
import java.nio.file.Paths;

import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the license key for IronPDF
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load an existing PDF document from file
        PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));

        // Reference the image file path relative to the runtime working directory
        String watermarkHtml = "<img src='logo.png' style='width:100px;'/>";

        // Apply the image watermark to all pages
        pdf.applyWatermark(watermarkHtml);

        // Save the result
        pdf.saveAs("image_watermark.pdf");
    }
}
JAVA

<img> 標籤中的 CSS 屬性控制大小、位置和透明度:

//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/image-watermark-advanced.java
// Apply a 150px logo at 50% opacity, rotated 45 degrees counterclockwise
String advancedWatermarkHtml =
    "<img src='logo.png' style='width:150px; opacity:0.5; transform:rotate(-45deg);'/>";
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/image-watermark-advanced.java
// Apply a 150px logo at 50% opacity, rotated 45 degrees counterclockwise
String advancedWatermarkHtml =
    "<img src='logo.png' style='width:150px; opacity:0.5; transform:rotate(-45deg);'/>";
JAVA

圖片路徑必須在運行時從 JVM 的工作目錄可存取。對於伺服器部署,請使用絕對路徑或將圖片作為 Base64 資料 URI 嵌入在 src 屬性中,以避免路徑解析問題。

圖片水印支持什麼文件格式?

IronPDF 支持 PNG、JPEG、GIF、SVG 和 BMP 圖片格式的水印。 具有透明背景的 PNG 為徽標水印產生最乾淨的效果。 輸出文件 image_watermark.pdf 以 100 像素寬度顯示圖片,預設不透明度 50% 居中於每個頁面。 要從現有 PDF 中提取圖片以用於另一個水印,請參閱從 PDF 中提取圖片的指南


Icon Quote related to 圖片水印支持什麼文件格式?

我最喜歡的程式庫是IronPDF。它允許快速高效地操作PDF文件。它還有許多有價值的功能,例如導出到PDF/A格式和數位簽署PDF文件。

Milan Jovanovic related to 圖片水印支持什麼文件格式?

Milan Jovanovic

Microsoft MVP

查看案例研究
Icon Quote related to 圖片水印支持什麼文件格式?

IronOCR意味著我們每年可以從手動處理中節省$40,000,同時提高生產力,釋放資源以進行高影響的任務。我會強烈推薦它。

Brent Matzelle related to 圖片水印支持什麼文件格式?

Brent Matzelle

首席技術官,OPYN

查看案例研究
Icon Quote related to 圖片水印支持什麼文件格式?

IronSuite在我們的運營中扮演著至關重要的角色。這些工具增加了包括建立平面圖和改善庫存管理在內的業務效率。

David Jones related to 圖片水印支持什麼文件格式?

David Jones

首席軟體工程師,Agorus Build

查看案例研究

如何控制水印的不透明度和對齊方式?

applyWatermark 方法在 HTML 字串之後接受不透明度和對齊參數。 不透明度是從 0(完全透明)到 100(完全不透明)的整數。 通常 20 到 40 之間的值工作良好,使水印可見不遮蓋正文。 VerticalAlignmentHorizontalAlignment 枚舉控制水印針對頁面的哪個角或邊緣。

//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/watermark-opacity-alignment.java
import java.io.IOException;
import java.nio.file.Paths;

import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.stamp.HorizontalAlignment;
import com.ironsoftware.ironpdf.stamp.VerticalAlignment;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the license key for IronPDF
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load an existing PDF document from file
        PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));

        // Define the watermark HTML
        String watermarkHtml = "<h1 style='color:blue;'>Confidential</h1>";

        // Apply at 30% opacity, anchored to the top-left corner of each page
        pdf.applyWatermark(watermarkHtml, 30, VerticalAlignment.TOP, HorizontalAlignment.LEFT);

        // Save the result
        pdf.saveAs("watermark_opacity_alignment.pdf");
    }
}
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/watermark-opacity-alignment.java
import java.io.IOException;
import java.nio.file.Paths;

import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.stamp.HorizontalAlignment;
import com.ironsoftware.ironpdf.stamp.VerticalAlignment;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the license key for IronPDF
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load an existing PDF document from file
        PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));

        // Define the watermark HTML
        String watermarkHtml = "<h1 style='color:blue;'>Confidential</h1>";

        // Apply at 30% opacity, anchored to the top-left corner of each page
        pdf.applyWatermark(watermarkHtml, 30, VerticalAlignment.TOP, HorizontalAlignment.LEFT);

        // Save the result
        pdf.saveAs("watermark_opacity_alignment.pdf");
    }
}
JAVA

結合這三個可選參數可提供九種不同的定位選項,對應於垂直和水平對齊的每個交點。 對於需要在同一頁面上放置多個水印或只應用於特定頁面範圍的用案例,stamper 類提供更細緻的控制。 有關分層合成技術,請參閱背景和前景指南

有哪些對齊選項可用?

applyWatermark 方法支持以下對齊常數:

垂直對齊 (VerticalAlignment):

  • TOP - 水印固定在頂邊
  • MIDDLE - 水印垂直居中
  • BOTTOM - 水印固定在底邊

水平對齊 (HorizontalAlignment):

  • LEFT - 水印固定在左邊
  • CENTER - 水印水平居中
  • RIGHT - 水印固定在右邊

請注意預設調用 applyWatermark(html) 無附加參數,等效於傳遞不透明度 50、VerticalAlignment.MIDDLE、HorizontalAlignment.CENTER。

將任何垂直值與任何水平值配對以便精確控制。 對於需要多重重疊蓋章的文件,例如右上角的徽標和斜向居中的草稿通知,將每個蓋章作為獨立的 applyWatermark 調用應用。 有關基於註解的覆蓋,請參閱註解範例


如何使用 TextStamper 和 ImageStamper 應用高級水印?

applyWatermark 方法可以解決大多數水印需求,但 TextStamperImageStamper 類提供程式化控制,當需要精確的像素座標、頁面範圍目標或動態文字生成時。 這兩個類都屬於 com.ironsoftware.ironpdf.stamp package。

TextStamper 接受字串值並公開字體、字號、字體顏色、水平和垂直對齊、不透明度的屬性。 它還支持以整數(度數)表示的旋轉。 ImageStamper 接受文件路徑或字節陣列,並公開與 TextStamper 相同的對齊和不透明度控制。

stamper 類的主要優勢在於 applyWatermark 是能夠針對特定頁面。 將零索引的頁碼列表傳遞給 stamp 方法,只將水印應用於需要的頁面,例如僅蓋章報告的封面頁或合同的最終審批頁。

//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/text-stamper.java
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Arrays;

import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.stamp.HorizontalAlignment;
import com.ironsoftware.ironpdf.stamp.TextStamper;
import com.ironsoftware.ironpdf.stamp.VerticalAlignment;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the license key for IronPDF
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load the target PDF document
        PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));

        // Configure a TextStamper with custom font, rotation, and opacity
        TextStamper stamper = new TextStamper();
        stamper.setText("DRAFT");
        stamper.setFontSize(72);
        stamper.setFontColor("gray");
        stamper.setOpacity(40);
        stamper.setRotation(45);
        stamper.setVerticalAlignment(VerticalAlignment.MIDDLE);
        stamper.setHorizontalAlignment(HorizontalAlignment.CENTER);

        // Apply the stamp only to pages 0 and 1 (zero-indexed)
        pdf.stamp(stamper, Arrays.asList(0, 1));

        // Save the stamped PDF
        pdf.saveAs("text_stamped.pdf");
    }
}
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/text-stamper.java
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Arrays;

import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.stamp.HorizontalAlignment;
import com.ironsoftware.ironpdf.stamp.TextStamper;
import com.ironsoftware.ironpdf.stamp.VerticalAlignment;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the license key for IronPDF
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load the target PDF document
        PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));

        // Configure a TextStamper with custom font, rotation, and opacity
        TextStamper stamper = new TextStamper();
        stamper.setText("DRAFT");
        stamper.setFontSize(72);
        stamper.setFontColor("gray");
        stamper.setOpacity(40);
        stamper.setRotation(45);
        stamper.setVerticalAlignment(VerticalAlignment.MIDDLE);
        stamper.setHorizontalAlignment(HorizontalAlignment.CENTER);

        // Apply the stamp only to pages 0 and 1 (zero-indexed)
        pdf.stamp(stamper, Arrays.asList(0, 1));

        // Save the stamped PDF
        pdf.saveAs("text_stamped.pdf");
    }
}
JAVA

stamp 方法接受 List<Integer> 零索引的頁碼,能夠精確控制接收水印的頁面。 未提供頁面列表時,蓋章應用於所有頁面。 這使得 TextStamper 是動態生成水印的合適選擇,例如嵌入唯一的交易 ID、使用者名或時間戳到每個生成的 PDF。

重要TextStamperImageStamper 類共享一個通用的 Stamper 基底類。 當您的應用程式動態生成水印時,請始終使用 stamper 方法,例如為每個生成的 PDF 嵌入唯一的交易 ID 或使用者名。

對於批量處理,例如為數百個 PDF 蓋上特定客戶的水印,在迴圈中載入和蓋章,每次迭代之前調用 PdfDocument。 IronPDF 獨立地處理每個文件,因此記憶體使用保持有限。 Java PDF 蓋章指南詳細介紹了 ImageStamper 和額外的蓋章選項,以及 IronPDF Java 文件提供完整的 API 參考。

TextStamper 與 applyWatermark 有何不同?

applyWatermark 方法為 HTML 字串提供快速、一致的多頁蓋章進行了優化。 TextStamperImageStamper 處理 applyWatermark 的情境:目標頁面子集,應用多個不同配置的獨特蓋章,或程式化地從資料庫或使用者輸入生成水印參數。 這兩種方法直接嵌入於 PDF 文件流中生產矢量品質的輸出,因此水印在再次保存、列印以及不支持可選內容層的 PDF 閱讀器中都能保留。

使用Apache PDFBox 程式庫進行水印的開發者會發現 IronPDF 的方法更簡單。 PDFBox 需要手動構建內容流和管理資源,而 applyWatermark 接受一個簡單的 HTML 字串。 Baeldung 上的 iText 水印指南展示了一個使用 iText 的類似任務,需要建立 PdfStampAnnotation 物件並通過 PdfCanvas 管道新增它們。IronPDF 將其簡化為單次方法調用。

提示為了程式上地驗證水印輸出,使用 PdfDocument.extractAllText() 提取文字內容並檢查預期的水印字串,或者使用 Stack Overflow 社群關於 Java PDF 操作的討論了解常見的排障模式。


Java PDF 水印的下一步是什麼?

本指南介紹了四種使用 IronPDF for Java 給 PDF 加水印的方法:通過 applyWatermark 字串進行簡單的文字水印,使用 HTML <img> 標籤的圖像水印,通過方法參數控制透明度和對齊,以及使用 TextStamperImageStamper 進行程式化蓋章應對高級用例。

開始您的免費試用,測試在 Java 應用程式中的水印功能。 試用包括對所有蓋章和水印功能的完全存取,評估期間無時間限制。 當您準備部署時,查看授權選項以找到適合您使用的級別。

準備好看看您還能做什麼嗎? 查看完整的教程頁面:IronPDF for Java 使用指南

常見問題

如何在Java中將文字水印新增到PDF?

載入您的PDF與PdfDocument.fromFile(),然後使用HTML字串呼叫pdf.applyWatermark()。IronPDF可呈現任何有效的HTML和CSS,因此您可以直接在元素上設置顏色、字體大小和不透明度。

我能在Java中使用圖片作為水印嗎?

可以。將<img>標籤放入您的HTML字串中並傳遞給applyWatermark()。具有透明背景的PNG文件會產生最清晰的效果。您也可以使用ImageStamper類別進行頁範圍定位。

我如何控制水印的不透明度?

將一個從0(完全透明)到100(完全不透明)的整數作為第二個參數傳遞給applyWatermark()。值在20到40之間工作良好,對於大多數文件不會遮擋正文。

我可以斜向旋轉水印嗎?

可以。在將它傳遞給applyWatermark()之前,先將一個CSStransform: rotate(-45deg)樣式加到您的HTML元素上。IronPDF在渲染時應用所有標準的CSS3變換。

applyWatermark與TextStamper有什麼不同?

applyWatermark()是對每頁應用相同HTML基礎印章的最快方法。TextStamper則提供程式化控制字體、旋轉和頁列表以僅針對特定頁面。

我如何將水印放置在特定位置?

VerticalAlignmentHorizontalAlignment枚舉值作為第三和第四個參數傳遞給applyWatermark()。可用位置包括頂部、居中、底部與左、居中、右的組合。

我可以對不同頁面應用不同的水印嗎?

可以。使用TextStamperImageStamper並傳遞一個零索引的頁面號碼清單到stamp()方法,僅針對需要特定水印的頁面。

我可以在同一個PDF中結合文字和圖片水印嗎?

可以。在保存之前多次呼叫applyWatermark()或進行多次stamp()呼叫。每次呼叫都獨立地向PDF內容流新增一個新層。

Darrius Serrant
全端軟體工程師(WebOps)

Darrius Serrant擁有邁阿密大學的電腦科學學士學位,並在Iron Software擔任全端WebOps行銷工程師。從小就對程式設計有興趣,他認為計算既神秘又易於理解,成為創意和問題解決的完美媒介。

在Iron Software,Darrius喜歡創造新事物並簡化複雜的概念,使其更易於理解。作為我們的常駐開發人員之一,他還志願教學,將他的專業知識傳授給下一代。

對Darrius來說,他的工作是有意義的,因為它有價值且對社會有真正的影響。

準備好開始了嗎?
版本: 2026.6 剛剛發布
Still Scrolling Icon

還在滾動嗎?

想要快速證明嗎?
運行範例 觀看您的HTML變成PDF。