如何在 Java 中為 PDF 檔案套用自訂浮水印
IronPDF 讓 Java 開發人員能夠使用支援完整 CSS 的 HTML 字串,在 PDF 文件中套用自訂浮水印,並能完全控制文字、圖片、透明度、旋轉角度及定位,以滿足品牌推廣或安全防護的需求。
快速入門:在 Java 中為 PDF 添加浮水印
- 將 IronPDF 加入您的 Maven 或 Gradle 專案,並設定授權金鑰
- 使用
PdfDocument.fromFile()載入您的 PDF 文件 - 建立水印的 HTML 字串(文字、圖片或兩者皆有)
- 使用
pdf.applyWatermark(watermarkHtml)套用浮水印 - 儲存帶有浮水印的 PDF 檔案
pdf.saveAs()
```java :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(""); pdf.saveAs("watermarked.pdf");
浮水印可保護 PDF 文件,並傳達所有權或文件狀態。 常見的使用情境包括將草稿標記為"機密"、在每頁嵌入公司標誌,或標示文件尚待審核。 IronPDF 採用 HTML 和 CSS 的方法,這意味著任何您能在瀏覽器中呈現的樣式(自訂字型、不透明度、旋轉、絕對定位)在浮水印中也能完全相同地運作。
本指南涵蓋 `text` 水印、`image` 水印、不透明度與位置控制,以及使用 [`TextStamper`](https://ironpdf.com/java/how-to/stamp-text-image-pdf/) 和 [`ImageStamper`](https://ironpdf.com/java/how-to/stamp-text-image-pdf/) 進行的高階加蓋功能。 有關相關的 PDF 處理技術,請參閱《[在 Java 中從 HTML 建立 PDF](https://ironpdf.com/java/how-to/java-create-pdf-tutorial/)》指南,或《[新增背景與前景](https://ironpdf.com/java/how-to/background-foreground/)》的概述。
<div class="hsg-featured-snippet">
<h3>如何在 Java 中套用浮水印</h3>
<ol>
<li><a class="js-modal-open" data-modal-id="download-modal" href="#download-modal">下載 Java 函式庫,為 PDF 檔案添加浮水印</a></li>
<li>渲染新的 PDF 或載入現有的 PDF</li>
<li>設定用作浮水印的 HTML 字串或圖片</li>
<li>請使用適當的方法套用浮水印</li>
<li>請根據需要調整不透明度、旋轉角度及位置等參數</li>
</ol>
</div>
## 如何在 PDF 中加入文字浮水印?
使用 `applyWatermark` 方法將文字蓋印至 PDF 文件的每一頁。 此方法接受 HTML 字串作為參數,因此您可以使用任何 CSS 屬性來設定浮水印樣式:字型家族、字型大小、顏色、字間距或文字陰影。 下方的範例將文件標記為紅色"機密",這涵蓋了最常見的稽核追蹤與存取控制情境。
```java
//: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");
}
}
applyWatermark 呼叫可透過單一操作,將浮水印套用至所有頁面。 預設情況下,浮水印的透明度為 50%,並位於每頁中央。 若要啟用該函式庫的所有功能,請在執行任何 PDF 操作之前,先設定您的 IronPDF 授權金鑰。 傳遞至 applyWatermark 的 HTML 可接受任何有效的 HTML 元素,因此您可以包含 <span> 或帶有樣式的 <p> 標籤,以建立多行浮水印。
文字浮水印的樣式為何?
輸出檔案 text_watermark.pdf 顯示"機密"一詞以紅色呈現,並在每頁的水平與垂直方向均居中對齊。 預設 50% 的不透明度可確保水印下的文件內容仍清晰可讀。 對於多頁文件,每頁都會獲得相同的印章,無需針對每頁進行迴圈處理。
transform: rotate(-45deg) scale(1.5)。若需了解適用於浮水印的進階 HTML 渲染技術,請參閱 HTML 轉 PDF 轉換教學。
如何在 PDF 中添加圖片浮水印?
圖片浮水印透過相同的 applyWatermark 方法運作,即在 HTML 字串中包覆 <img> 標籤。 帶有透明背景的 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");
}
}
<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);'/>";
圖片路徑必須能在執行時從 JVM 的工作目錄存取。若為伺服器部署,請使用絕對路徑,或將圖片以 Base64 資料 URI 形式嵌入 src 屬性中,以避免路徑解析問題。
圖片浮水印支援哪些檔案格式?
IronPDF 支援在浮水印中使用 PNG、JPEG、GIF、SVG 及 BMP 圖像格式。 使用透明背景的 PNG 格式能為標誌浮水印呈現最簡潔的視覺效果。 輸出檔案 image_watermark.pdf 顯示寬度為 100 像素的圖片,每頁居中顯示,預設不透明度為 50%。 若要從現有 PDF 中擷取圖片以用於其他浮水印,請參閱從 PDF 擷取圖片的指南。
如何控制浮水印的透明度與對齊方式?
applyWatermark 方法會在 HTML 字串之後接受不透明度與對齊參數。 不透明度是一個介於 0(完全透明)至 100(完全不透明)之間的整數。 對於大多數文件而言,設定值介於 20 至 40 之間效果最佳,既能保持浮水印可見,又不致遮蔽正文內容。 VerticalAlignment 和 HorizontalAlignment 枚舉用於控制浮水印應定位於頁面的哪個角落或邊緣。
//: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");
}
}
結合這三個可選參數,可產生九種不同的定位選項,分別對應垂直與水平對齊的每個交點。 對於需要在同一頁面的多個位置添加浮水印,或僅對特定頁面範圍應用浮水印的使用情境,stamper 類別可提供更精細的控制。 請參閱背景與前景指南,了解分層構圖技巧。
有哪些對齊選項可用?
applyWatermark 方法支援以下對齊常數:
垂直對齊 (VerticalAlignment):
TOP- 固定於頂端的浮水印MIDDLE- 垂直居中水印BOTTOM- 固定於底部邊緣的水印
水平對齊 (HorizontalAlignment):
LEFT- 左對齊的水印CENTER- 水印水平居中RIGHT- 水印錨定於右側邊緣
applyWatermark(html) 呼叫(未附加參數)等同於傳入不透明度 50、VerticalAlignment.MIDDLE 及 HorizontalAlignment.CENTER。將任何垂直值與任何水平值配對,以實現精確控制。 對於需要多個重疊印章的文件(例如右上角的標誌與對角線居中的草稿標記),請將每個印章作為獨立的 applyWatermark 呼叫進行套用。 關於基於註解的疊加層,請參閱註解範例。
如何使用 TextStamper 和 ImageStamper 套用進階浮水印?
applyWatermark 方法可滿足大多數浮水印需求,但當需要精確的像素座標、頁面範圍定位或動態文字生成時,TextStamper 和 ImageStamper 類別則提供程式化的控制功能。 這兩類別均屬於 com.ironsoftware.ironpdf.stamp 套件。
TextStamper 接受字串值,並提供字型、字型大小、字型顏色、水平與垂直對齊方式,以及透明度的屬性。 它亦支援以整數(度)形式指定旋轉角度。 ImageStamper 可接受圖片的檔案路徑或位元組陣列,並提供與 TextStamper 相同的對齊方式與透明度控制選項。
相較於 applyWatermark,stamper 類別的主要優勢在於能夠鎖定特定頁面。 將一組以零為起點的頁碼清單傳遞給 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");
}
}
stamp 方法接受一個 List<Integer> 數組,其中包含從零開始計數的頁碼,可精確控制哪些頁面會加上浮水印。 若未提供頁面清單,則此標記適用於所有頁面。 這使得 TextStamper 成為您的理想選擇,尤其當您的應用程式需要動態產生浮水印時,例如在每個生成的 PDF 檔案中嵌入唯一的交易 ID、使用者名稱或時間戳記。
TextStamper 與 ImageStamper 類別共用一個 Stamper 基類。 當您的應用程式需動態產生浮水印時(例如在每個生成的 PDF 中嵌入唯一的交易 ID 或使用者名稱),請採用"浮水印印章"方法。針對批次處理(例如在數百份 PDF 上加蓋專屬客戶的水印),請在迴圈中載入並加蓋每個 PdfDocument,然後在下一輪迭代前呼叫 saveAs。 IronPDF 會獨立處理每份文件,因此記憶體使用量受到限制。 Java PDF 蓋章指南詳細說明了 ImageStamper 及其他蓋章選項,而 IronPDF for Java 文件則提供了完整的 API 參考。
TextStamper 與 applyWatermark 有何不同?
applyWatermark 方法經過優化,可從 HTML 字串快速且一致地生成多頁水印。 TextStamper 和 ImageStamper 針對 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> 標籤添加圖片浮水印、透過方法參數控制不透明度與對齊方式,以及針對進階應用情境,使用 TextStamper 和 ImageStamper 進行程式化浮水印加載。
立即開始免費試用,在您的 Java 應用程式中測試浮水印功能。 此試用版提供所有蓋章與浮水印功能的完整存取權限,且無評估時間限制。 當您準備部署時,請查看授權方案,以找到符合您使用需求的方案。
準備好探索更多可能性了嗎? 請在此處查看完整的教學頁面:IronPDF for Java 操作指南
常見問題
如何在 Java 中為 PDF 添加文字浮水印?
請使用 PdfDocument.fromFile() 載入您的 PDF 檔案,然後傳入 HTML 字串呼叫 pdf.applyWatermark()。IronPDF 會渲染任何有效的 HTML 和 CSS,因此您可以直接在元素上設定顏色、字型大小和透明度。
在 Java 中可以使用圖片作為浮水印嗎?
是的。請在 HTML 字串中傳入 標籤,並呼叫 applyWatermark() 方法。使用透明背景的 PNG 檔案可獲得最清晰的結果。您亦可使用 ImageStamper 類別來指定頁碼範圍。
如何控制浮水印的透明度?
請將 0(完全透明)至 100(完全不透明)之間的整數作為第二個參數傳遞給 applyWatermark() 函式。對於大多數文件而言,20 至 40 之間的數值效果最佳,且不會遮蔽正文內容。
我可以將浮水印對角線旋轉嗎?
是的。在將 HTML 元素傳遞給 applyWatermark() 函式之前,請為該元素新增 CSS transform: rotate(-45deg) 樣式。IronPDF 會在渲染過程中套用所有標準的 CSS3 變換。
applyWatermark 與 TextStamper 之間有何差異?
applyWatermark() 是將相同的 HTML 水印套用至每頁的最快速方法。TextStamper 提供程式化控制,可調整字型、旋轉角度,並透過頁面清單僅針對特定頁面進行套用。
如何將浮水印定位在特定位置?
請將 VerticalAlignment 和 HorizontalAlignment 枚舉值作為第三和第四個參數傳遞給 applyWatermark() 方法。可用的位置包括 TOP、MIDDLE、BOTTOM,並可與 LEFT、CENTER、RIGHT 組合使用。
我可以對不同頁面套用不同的浮水印嗎?
是的。請使用 TextStamper 或 ImageStamper,並將以零為起點的頁碼清單傳遞給 stamp() 方法,以僅針對需要特定浮水印的頁面進行標記。
我可以在同一份 PDF 中同時使用文字和圖片浮水印嗎?
是的。請在儲存前多次呼叫 applyWatermark() 或多次呼叫 stamp()。每次呼叫都會獨立地在 PDF 內容流中新增一層。


