Java批量向PDF文件中添加圖像水印實現(xiàn)細(xì)節(jié)
水印一般用于標(biāo)注文檔的版權(quán)信息、作者、所屬機構(gòu)或者文檔屬性等。不同于文本批注等,文字水印是繪制到頁面中的元素,所以不會被輕易刪除。因此,水印也是一種很好的防偽手段。水印又分為文本水印和圖片水印兩種。之前已經(jīng)介紹過向PDF中添加文本水印的方法。這次,我將分享通過Java代碼給PDF文檔添加圖像水印的具體方法和示例代碼。使用到的工具是Free Spire.PDF for Java(免費版)。
程序環(huán)境
IntelliJ IDEA 2018 (jdk 1.8.0)
在進(jìn)行操作之前先導(dǎo)入JAR包,請參考以下兩種導(dǎo)入方式:
方法一:如果您使用的是 maven,先創(chuàng)建maven項目。然后通過添加以下代碼來配置pom.xml 文件,再點擊Import Changes將 JAR文件導(dǎo)入到應(yīng)用程序中。
<repositories>
<repository>
<id>com.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.free</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>方法二:如果您沒有使用 maven,則可以從此鏈接下載Free Spire.PDF for Java,找到lib文件夾下的Spire.Pdf.jar并進(jìn)行解壓;然后在IDEA中創(chuàng)建一個新項目,依次點擊“文件”(File),“項目結(jié)構(gòu)”(Project Structure),“組件”(Modules),“依賴項”(Dependencies),再點擊右方綠色“+”下的第一個選項“JAR文件或路徑”(JARs or Directories),找到解壓后的Spire.Pdf.jar 文件,點擊確認(rèn),將其導(dǎo)入到項目中。
單個圖像水印
代碼介紹:
首先,創(chuàng)建一個新的PdfDocument對象。接著,使用loadFromFile()方法從磁盤上載入PDF文檔和要嵌入的圖片。然后,循環(huán)遍歷所有頁面以插入水印。對于每個頁面,獲取頁面的寬度和高度,并設(shè)置圖片的透明度和初始坐標(biāo)。使用drawImage()方法在頁面的中間位置繪制水印圖片。最后,使用saveToFile()方法指定要保存的文件名和文件格式,并將修改后的PDF文檔保存在磁盤上。
完整代碼:
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfImage;
public class insertSingleImageWatermark {
public static void main(String[] args) {
//創(chuàng)建PdfDocument類的對象
PdfDocument pdf = new PdfDocument();
//載入PDF文檔
pdf.loadFromFile("sample.pdf");
//載入圖片
PdfImage image = PdfImage.fromFile("image.png");
//獲取圖片的寬度和高度用于計算插入水印的初始坐標(biāo)
int imageWidth = image.getWidth();
int imageHeight = image.getHeight();
//循環(huán)遍歷所有頁面以插入水印
for (int i = 0; i < pdf.getPages().getCount(); i++) {
//獲取一個頁面
PdfPageBase page = pdf.getPages().get(i);
//獲取該頁面的寬度和高度,用于計算插入水印的初始坐標(biāo)
float pageWidth = (float) (page.getActualSize().getWidth());
float pageHeight = (float) (page.getActualSize().getHeight());
//設(shè)置水印圖片的透明度
page.getCanvas().setTransparency(0.3f);
//在頁面的中間位置繪制水印圖片
page.getCanvas().drawImage(image, pageWidth/2 - imageWidth/2, pageHeight/2 - imageHeight/2, imageWidth, imageHeight);
}
//保存文檔
pdf.saveToFile("result1.pdf");
}
}效果圖:

平鋪圖像水印
代碼解釋:
首先,創(chuàng)建一個新的PdfDocument對象。接著,使用loadFromFile()方法從磁盤上載入PDF文檔和要嵌入的圖片。然后,循環(huán)遍歷所有頁面以插入水印。對于每個頁面,使用自定義的insertImageWatermark()方法插入平鋪圖片水印。在insertImageWatermark()方法中,創(chuàng)建一個平鋪筆刷,并將圖片繪制在筆刷上。使用該平鋪筆刷繪制水印圖片,并通過drawRectangle()方法在頁面上繪制矩形并應(yīng)用平鋪筆刷。最后,使用saveToFile()方法指定要保存的文件名和文件格式,最后保存文檔。
完整代碼:
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfImage;
import com.spire.pdf.graphics.PdfTilingBrush;
import java.awt.*;
public class insertTiledImageWatermark {
public static void main(String[] args) {
//創(chuàng)建PdfDocument類的對象
PdfDocument pdf = new PdfDocument();
//載入PDF文檔
pdf.loadFromFile("sample.pdf");
//載入圖片
PdfImage image = PdfImage.fromFile("image.png");
//循環(huán)遍歷文檔頁面以插入水印
for (int i = 0; i < pdf.getPages().getCount(); i++ ) {
//獲取一個頁面
PdfPageBase page = pdf.getPages().get(i);
//使用自定義方法插入平鋪圖片水印
insertImageWatermark(page, image, 3, 3);
}
//保存文檔
pdf.saveToFile("result2.pdf");
}
static void insertImageWatermark(PdfPageBase page, PdfImage image, int row, int column) {
//創(chuàng)建一個平鋪筆刷
PdfTilingBrush brush = new PdfTilingBrush(new Dimension((int) (page.getActualSize().getWidth()/column), (int) (page.getActualSize().getHeight()/row)));
brush.getGraphics().setTransparency(0.3f);
brush.getGraphics().save();
brush.getGraphics().translateTransform(brush.getSize().getWidth()/2 - image.getWidth()/2, brush.getSize().getHeight()/2 - image.getHeight()/2);
//將圖片繪制于筆刷
brush.getGraphics().drawImage(image, 0, 0);
brush.getGraphics().restore();
//使用該平鋪筆刷繪制水印圖片
page.getCanvas().drawRectangle(brush, new Rectangle(new Point(0, 0), new Dimension((int) (page.getActualSize().getWidth()), (int) (page.getActualSize().getHeight()))));
}
}效果圖:

以上就是Java 向PDF中添加圖像水印實現(xiàn)細(xì)節(jié)的詳細(xì)內(nèi)容,更多關(guān)于Java PDF添加圖像水印的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java中JSch與jsch.addIdentity()完全詳細(xì)解析
JSch是SSH2的一個純Java實現(xiàn),它允許你連接到一個sshd服務(wù)器,使用端口轉(zhuǎn)發(fā),X11轉(zhuǎn)發(fā),文件傳輸?shù)鹊?這篇文章主要介紹了Java中JSch與jsch.addIdentity()完全詳細(xì)解析,需要的朋友可以參考下2026-01-01
SpringBoot整合jasypt進(jìn)行重要數(shù)據(jù)加密的操作代碼
Jasypt(Java?Simplified?Encryption)是一個專注于簡化Java加密操作的開源工具,它提供了一種簡單而強大的方式來處理數(shù)據(jù)的加密和解密,使開發(fā)者能夠輕松地保護(hù)應(yīng)用程序中的敏感信息,本文給大家介紹了SpringBoot整合jasypt進(jìn)行重要數(shù)據(jù)加密,需要的朋友可以參考下2024-05-05
JavaWeb中Session對象的學(xué)習(xí)筆記
在WEB開發(fā)中,服務(wù)器可以為每個用戶瀏覽器創(chuàng)建一個會話對象,即session對象,這篇文章就為大家詳細(xì)介紹Session對象的定義、實現(xiàn)原理等基礎(chǔ)知識點,感興趣的小伙伴們可以參考一下2016-05-05
idea報錯:java程序包com.github.xiaoymin.knife4j.spring.annotations
這篇文章主要介紹了idea報錯:java程序包com.github.xiaoymin.knife4j.spring.annotations不存在問題解決,需要的朋友可以參考下2023-06-06

