使用Java對PDF添加水印的操作代碼
引言
在當今數(shù)字化辦公環(huán)境中,PDF 文檔作為信息交流和存儲的重要載體,其安全性和版權保護變得尤為關鍵。企業(yè)常常需要對內(nèi)部敏感文檔或?qū)ν獍l(fā)布的資料添加水印,以防止未經(jīng)授權的使用、泄露或篡改。那么,如何通過 Java 編程高效、靈活地實現(xiàn) PDF 水印的添加呢?
本文將為您揭示這一問題的解決方案。我們將深入探討如何利用功能強大且易于集成的 Spire.PDF for Java 庫,為您的 PDF 文檔添加專業(yè)的文本水印和圖片水印。通過本文提供的詳細教程和可運行的代碼示例,您將能夠輕松掌握 PDF 水印技術,有效提升文檔的安全性和專業(yè)性。
認識 Spire.PDF for Java 及其在水印處理中的優(yōu)勢
Spire.PDF for Java 是一款專為 Java 應用程序設計的專業(yè) PDF 文檔處理庫。它提供了豐富的功能,包括 PDF 的創(chuàng)建、編輯、轉(zhuǎn)換、合并、分割、加密解密以及各種高級操作,如表單填充、電子簽名和我們今天要重點討論的水印添加。
該庫具有以下顯著優(yōu)勢:
- 跨平臺兼容性:支持 Windows、Linux、macOS 等多種操作系統(tǒng),確保您的應用在不同環(huán)境下穩(wěn)定運行。
- 功能豐富:不僅限于水印,還涵蓋了 PDF 處理的方方面面,滿足企業(yè)級應用需求。
- 易于集成:提供清晰的 API 接口和詳細的文檔,開發(fā)者可以快速上手并將其集成到現(xiàn)有項目中。
- 高性能:優(yōu)化了處理效率,能夠快速處理大量 PDF 文檔。
- 靈活的水印配置:允許開發(fā)者精細控制水印的文本內(nèi)容、字體、顏色、大小、透明度、旋轉(zhuǎn)角度、位置等,以及圖片水印的尺寸、位置和透明度。
如何獲取和配置 Spire.PDF for Java 依賴
要開始使用 Spire.PDF for Java,您需要將其作為依賴添加到您的 Maven 項目中。
Maven 依賴示例:
<repositories>
<repository>
<id>e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf</artifactId>
<version>5.12.7</version> <!-- 請?zhí)鎿Q為最新版本 -->
</dependency>
</dependencies>
如何使用 Java 添加文本水印到 PDF
添加文本水印是保護文檔版權和防止濫用的常見方法。Spire.PDF for Java 提供了強大的功能來定制文本水印的外觀。
以下是添加文本水印的詳細步驟和代碼示例:
- 加載 PDF 文檔:使用 PdfDocument 類加載現(xiàn)有 PDF 文件。
- 創(chuàng)建水印內(nèi)容:定義水印文本、字體、大小、顏色、旋轉(zhuǎn)角度和透明度等屬性。
- 遍歷頁面并應用水印:遍歷 PDF 文檔的每一個頁面,并在頁面上繪制水印。為了實現(xiàn)頁面的平鋪效果,通常會創(chuàng)建一個 PdfTilingBrush。
- 保存文檔:將修改后的 PDF 文檔保存到新文件或覆蓋原文件。
關鍵文本水印屬性及 API 方法
| 屬性 | 描述 | 對應 API 方法/類 |
|---|---|---|
| 內(nèi)容 | 水印顯示的文字 | PdfTilingBrush.getGraphics().drawString() |
| 字體 | 水印文本的字體 | PdfFont |
| 大小 | 水印文本的字號 | PdfFont |
| 顏色 | 水印文本的顏色 | PdfBrushes.getColor() |
| 透明度 | 水印的透明度(0-1,1為完全不透明) | PdfTilingBrush.getGraphics().setTransparency() |
| 旋轉(zhuǎn)角度 | 水印文本的旋轉(zhuǎn)角度 | PdfTilingBrush.getGraphics().rotateTransform() |
| 位置 | 水印在頁面上的起始位置 | PdfTilingBrush.getGraphics().translateTransform() |
Java 代碼示例:添加文本水印
import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.io.IOException;
public class AddTextWatermark {
public static void main(String[] args) throws IOException {
// 1. 加載PDF文檔
PdfDocument doc = new PdfDocument();
doc.loadFromFile("input.pdf"); // 確保input.pdf存在
// 水印文本
String watermarkText = "公司機密 嚴禁轉(zhuǎn)載";
// 遍歷PDF文檔的每個頁面
for (int i = 0; i < doc.getPages().getCount(); i++) {
PdfPageBase page = doc.getPages().get(i);
// 創(chuàng)建一個尺寸與頁面相同的模板,用于繪制水印
PdfTemplate template = new PdfTemplate(page.getClientSize().getWidth(), page.getClientSize().getHeight());
// 繪制水印到模板
drawTextWatermarkToTemplate(template, watermarkText);
// 創(chuàng)建一個矩形,覆蓋整個頁面,用于放置水印
Rectangle2D loRect = new Rectangle2D.Float();
loRect.setFrame(new Point2D.Float(0, 0), page.getClientSize());
// 創(chuàng)建水印注釋
PdfWatermarkAnnotation watermarkAnnotation = new PdfWatermarkAnnotation(loRect);
PdfAppearance appearance = new PdfAppearance(watermarkAnnotation);
appearance.setNormal(template); // 將繪制了水印的模板設為水印注釋的正常外觀
watermarkAnnotation.setAppearance(appearance);
// 將水印注釋添加到當前頁面的注釋集合中
page.getAnnotationsWidget().add(watermarkAnnotation);
}
// 4. 保存帶有水印的PDF文檔
doc.saveToFile("output_text_watermark.pdf");
doc.close();
System.out.println("文本水印添加成功!文件已保存為 output_text_watermark.pdf");
}
private static void drawTextWatermarkToTemplate(PdfTemplate template, String watermark) {
// 創(chuàng)建一個刷子,用于平鋪水印
// 水印的尺寸設為模板寬度的一半,高度的三分之一,以實現(xiàn)重復平鋪效果
Dimension2D dimension2D = new Dimension();
dimension2D.setSize(template.getWidth() / 2, template.getHeight() / 3);
PdfTilingBrush brush = new PdfTilingBrush(dimension2D);
// 設置水印的透明度為 0.3 (30%)
brush.getGraphics().setTransparency(0.3f);
// 保存當前圖形狀態(tài)
brush.getGraphics().save();
// 旋轉(zhuǎn)水印,通常為負45度
brush.getGraphics().rotateTransform(-45);
// 設置字體和顏色
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 24f, PdfFontStyle.Bold);
PdfStringFormat format = new PdfStringFormat();
format.setAlignment(PdfStringAlignment.Center);
format.setLineAlignment(PdfVerticalAlignment.Middle);
// 在刷子上繪制水印文本
// 調(diào)整繪制位置,使其在刷子區(qū)域內(nèi)居中
brush.getGraphics().drawString(watermark, font, PdfBrushes.getGray(),
(float) brush.getSize().getWidth() / 2, (float) brush.getSize().getHeight() / 2, format);
// 恢復圖形狀態(tài)
brush.getGraphics().restore();
// 將繪制了水印的刷子應用到模板上
template.getGraphics().drawRectangle(brush, new Rectangle2D.Float(0, 0, template.getWidth(), template.getHeight()));
}
}
如何使用 Java 添加圖片水印到 PDF
除了文本水印,圖片水?。ㄈ绻?Logo、保密圖章等)也是一種常見的文檔保護手段。Spire.PDF for Java 同樣支持添加圖片水印,并提供靈活的配置選項。
以下是添加圖片水印的詳細步驟和代碼示例:
- 加載 PDF 文檔:使用 PdfDocument 加載現(xiàn)有 PDF 文件。
- 加載圖片文件:使用 PdfImage.fromFile() 方法加載圖片文件作為水印。
- 設置圖片水印屬性:定義圖片水印的位置、大小、透明度和旋轉(zhuǎn)角度。
- 遍歷頁面并應用水印:遍歷 PDF 文檔的每個頁面,并在指定位置繪制圖片。
- 保存文檔:將修改后的 PDF 文檔保存。
關鍵圖片水印屬性及 API 方法
| 屬性 | 描述 | 對應 API 方法/類 |
|---|---|---|
| 來源 | 水印圖片文件的路徑 | PdfImage.fromFile() |
| 位置 | 水印在頁面上的 X, Y 坐標 | page.getCanvas().drawImage() |
| 大小 | 水印圖片的寬度和高度 | page.getCanvas().drawImage() |
| 透明度 | 水印的透明度(0-1,1為完全不透明) | PdfGraphics.setTransparency() |
| 旋轉(zhuǎn)角度 | 水印圖片的旋轉(zhuǎn)角度 | PdfGraphics.rotateTransform() |
Java 代碼示例:添加圖片水印
import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.io.IOException;
public class AddImageWatermark {
public static void main(String[] args) throws IOException {
// 1. 加載PDF文檔
PdfDocument doc = new PdfDocument();
doc.loadFromFile("input.pdf"); // 確保input.pdf存在
// 2. 加載圖片文件作為水印
PdfImage image = PdfImage.fromFile("watermark.png"); // 確保watermark.png存在
// 遍歷PDF文檔的每個頁面
for (int i = 0; i < doc.getPages().getCount(); i++) {
PdfPageBase page = doc.getPages().get(i);
// 創(chuàng)建一個尺寸與頁面相同的模板
PdfTemplate template = new PdfTemplate(page.getClientSize().getWidth(), page.getClientSize().getHeight());
// 設置模板的圖形透明度
template.getGraphics().setTransparency(0.2f); // 20% 透明度
// 計算圖片水印的位置和大小
float imgWidth = image.getWidth() * 0.5f; // 圖片寬度縮放為原始的50%
float imgHeight = image.getHeight() * 0.5f; // 圖片高度縮放為原始的50%
// 將水印放置在頁面中心
float x = (page.getClientSize().getWidth() - imgWidth) / 2;
float y = (page.getClientSize().getHeight() - imgHeight) / 2;
// 繪制圖片水印到模板
template.getGraphics().drawImage(image, x, y, imgWidth, imgHeight);
// 創(chuàng)建一個矩形,覆蓋整個頁面,用于放置水印
Rectangle2D loRect = new Rectangle2D.Float();
loRect.setFrame(new Point2D.Float(0, 0), page.getClientSize());
// 創(chuàng)建水印注釋
PdfWatermarkAnnotation watermarkAnnotation = new PdfWatermarkAnnotation(loRect);
PdfAppearance appearance = new PdfAppearance(watermarkAnnotation);
appearance.setNormal(template); // 將繪制了水印的模板設為水印注釋的正常外觀
watermarkAnnotation.setAppearance(appearance);
// 將水印注釋添加到當前頁面的注釋集合中
page.getAnnotationsWidget().add(watermarkAnnotation);
}
// 4. 保存帶有水印的PDF文檔
doc.saveToFile("output_image_watermark.pdf");
doc.close();
System.out.println("圖片水印添加成功!文件已保存為 output_image_watermark.pdf");
}
}
總結
通過本文的詳細教程,您已經(jīng)掌握了如何使用 Spire.PDF for Java 庫為 PDF 文檔添加文本水印和圖片水印的關鍵技術。我們深入探討了 Spire.PDF for Java 的優(yōu)勢、依賴配置,并提供了清晰、可操作的代碼示例,涵蓋了水印內(nèi)容設置、樣式調(diào)整、透明度控制以及頁面應用等核心環(huán)節(jié)。
Spire.PDF for Java 憑借其強大的功能和靈活的 API 設計,使得在 Java 應用程序中實現(xiàn)專業(yè)的 PDF 水印功能變得異常簡單和高效。無論是為了保護企業(yè)機密、確保版權所有,還是提升文檔的專業(yè)形象,掌握這一技術都將為您的項目帶來顯著價值。
現(xiàn)在,您可以將這些知識和代碼應用于您的實際項目中,提升文檔的安全性和管理水平。希望本文能為您在 Java PDF 處理領域提供有益的參考和幫助!
以上就是使用Java對PDF添加水印的操作代碼的詳細內(nèi)容,更多關于Java對PDF添加水印的資料請關注腳本之家其它相關文章!
相關文章
詳解Spring Boot實戰(zhàn)之Filter實現(xiàn)使用JWT進行接口認證
本篇文章主要介紹了詳解Spring Boot實戰(zhàn)之Filter實現(xiàn)使用JWT進行接口認證,具有一定的參考價值,有興趣的可以了解一下2017-07-07
詳解SpringMVC的url-pattern配置及原理剖析
這篇文章主要介紹了SpringMVC的url-pattern配置及原理剖析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06
Spring?循環(huán)依賴之AOP實現(xiàn)詳情
這篇文章主要介紹了Spring?循環(huán)依賴之AOP實現(xiàn)詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的盆友可以參考一下2022-07-07

