SpringBoot實現(xiàn)PDF添加水印的三種方法
使用場景
PDF(Portable Document Format,便攜式文檔格式)是一種流行的文件格式,它可以在多個操作系統(tǒng)和應用程序中進行查看和打印。在某些情況下,我們需要對 PDF 文件添加水印,以使其更具有辨識度或者保護其版權(quán)。本文將介紹如何使用 Spring Boot 來實現(xiàn) PDF 添加水印的方式。
方式一:使用 Apache PDFBox 庫
PDFBox 是一個流行的、免費的、用 Java 編寫的庫,它可以用來創(chuàng)建、修改和提取 PDF 內(nèi)容。PDFBox 提供了許多 API,包括添加文本水印的功能。
1、添加 PDFBox 依賴
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.24</version>
</dependency>2、添加水印
在添加水印之前,需要讀取原始 PDF 文件:
PDDocument document = PDDocument.load(new File("original.pdf"));然后,遍歷 PDF 中的所有頁面,并使用 PDPageContentStream 添加水?。?/p>
// 遍歷 PDF 中的所有頁面
for (int i = 0; i < document.getNumberOfPages(); i++) {
? ? PDPage page = document.getPage(i);
? ? PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true);
? ? // 設置字體和字號
? ? contentStream.setFont(PDType1Font.HELVETICA_BOLD, 36);
? ? // 設置透明度
? ? contentStream.setNonStrokingColor(200, 200, 200);
? ? // 添加文本水印
? ? contentStream.beginText();
? ? contentStream.newLineAtOffset(100, 100); // 設置水印位置
? ? contentStream.showText("Watermark"); // 設置水印內(nèi)容
? ? contentStream.endText();
? ? contentStream.close();
}最后,需要保存修改后的 PDF 文件:
document.save(new File("output.pdf"));
document.close();方式二:使用 iText 庫
iText 是一款流行的 Java PDF 庫,它可以用來創(chuàng)建、讀取、修改和提取 PDF 內(nèi)容。iText 提供了許多 API,包括添加文本水印的功能。
1、添加 iText 依賴
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>2、添加水印
在添加水印之前,需要讀取原始 PDF 文件:
PdfReader reader = new PdfReader("original.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("output.pdf"));然后,遍歷 PDF 中的所有頁面,并使用 PdfContentByte 添加水?。?/p>
// 獲取 PDF 中的頁數(shù)
int pageCount = reader.getNumberOfPages();
// 添加水印
for (int i = 1; i <= pageCount; i++) {
? ? PdfContentByte contentByte = stamper.getUnderContent(i); // 或者 getOverContent()
? ? contentByte.beginText();
? ? contentByte.setFontAndSize(BaseFont.createFont(), 36f);
? ? contentByte.setColorFill(BaseColor.LIGHT_GRAY);
? ? contentByte.showTextAligned(Element.ALIGN_CENTER, "Watermark", 300, 400, 45);
? ? contentByte.endText();
}最后,需要保存修改后的 PDF 文件并關(guān)閉文件流:
stamper.close(); reader.close();
方式三:Free Spire.PDF for Java
Free Spire.PDF for Java 是一款免費的 Java PDF 庫,它提供了一個簡單易用的 API,用于創(chuàng)建、讀取、修改和提取 PDF 內(nèi)容。Free Spire.PDF for Java 也支持添加文本水印以及圖片水印。
1、添加 Free Spire.PDF for Java 依賴
首先,在 pom.xml 文件中添加 Free Spire.PDF for Java 的依賴:
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>free-spire-pdf-for-java</artifactId>
<version>1.9.6</version>
</dependency>2、添加文本水印
在添加水印之前,需要讀取原始 PDF 文件:
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile("original.pdf");然后,遍歷 PDF 中的所有頁面,并使用 PdfPageBase 添加水?。?/p>
// 遍歷 PDF 中的所有頁面
for (int i = 0; i < pdf.getPages().getCount(); i++) {
? ? PdfPageBase page = pdf.getPages().get(i);
? ? // 添加文本水印
? ? PdfWatermark watermark = new PdfWatermark("Watermark");
? ? watermark.setFont(new PdfFont(PdfFontFamily.Helvetica, 36));
? ? watermark.setOpacity(0.5f);
? ? page.getWatermarks().add(watermark);
}最后,需要保存修改后的 PDF 文件:
pdf.saveToFile("output.pdf");
pdf.close();3、添加圖片水印
// 添加圖片水印
PdfWatermark watermark = new PdfWatermark("watermark.png");
watermark.setOpacity(0.5f);
page.getWatermarks().add(watermark);Demo
使用 Apache PDFBox 庫 寫個demo
package com.sinosoft.springbootplus;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import java.io.File;
import java.io.IOException;
/**
?* @author lsh
?* @date 2023/6/16
?*/
public class PdfBoxWatermark {
? ? public static void main(String[] args) throws IOException {
? ? ? ? // 讀取原始 PDF 文件
? ? ? ? PDDocument document = PDDocument.load(new File("C:\\Users\\18234\\Desktop\\redis主從和哨兵(一主一從三哨兵).pdf"));
? ? ? ? // 遍歷 PDF 中的所有頁面
? ? ? ? for (int i = 0; i < document.getNumberOfPages(); i++) {
? ? ? ? ? ? PDPage page = document.getPage(i);
? ? ? ? ? ? PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true);
? ? ? ? ? ? // 設置字體和字號
? ? ? ? ? ? contentStream.setFont(PDType1Font.HELVETICA_BOLD, 36);
? ? ? ? ? ? // 設置透明度
? ? ? ? ? ? contentStream.setNonStrokingColor(200, 200, 200);
? ? ? ? ? ? // 添加文本水印
? ? ? ? ? ? contentStream.beginText();
? ? ? ? ? ? contentStream.newLineAtOffset(100, 100); // 設置水印位置
? ? ? ? ? ? contentStream.showText("Watermark"); // 設置水印內(nèi)容
? ? ? ? ? ? contentStream.endText();
? ? ? ? ? ? contentStream.close();
? ? ? ? }
? ? ? ? // 保存修改后的 PDF 文件
? ? ? ? document.save(new File("output.pdf"));
? ? ? ? document.close();
? ? }
}結(jié)果:文檔的每頁都加上了水印

到此這篇關(guān)于SpringBoot實現(xiàn)PDF添加水印的三種方法的文章就介紹到這了,更多相關(guān)SpringBoot PDF添加水印內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot整合RabbitMQ實現(xiàn)RPC遠程調(diào)用功能
在分布式系統(tǒng)中,RPC(Remote?Procedure?Call)是一種常用的通信機制,它可以讓不同的節(jié)點之間像調(diào)用本地函數(shù)一樣進行函數(shù)調(diào)用,隱藏了底層的網(wǎng)絡通信細節(jié),通過本教程,你可以了解RPC的基本原理以及如何使用Java實現(xiàn)一個簡單的RPC客戶端和服務端2023-06-06
基于JAVA中使用Axis發(fā)布/調(diào)用Webservice的方法詳解
如果初識axis發(fā)布/調(diào)用WS,建議先讀上面的參考文件,本文對于發(fā)布/調(diào)用WS的主要步驟只是簡單文字描述,沒有它寫的詳盡2013-05-05
java實現(xiàn)excel自定義樣式與字段導出詳細圖文教程
最近接到一個需求,客戶不滿意原本導出的csv文件,想要導出Excel文件,下面這篇文章主要給大家介紹了關(guān)于java實現(xiàn)excel自定義樣式與字段導出詳細圖文教程2023-09-09

