最近在开发一个项目,其中就有导出的功能,而甲方提了一个需求,要对导出的pdf加文字水印,所以我就加班了整整10分钟肝出了这个功能,既然做出来了就和大家分享一下吧,拿走不谢!!!
总共就三步,非常简单
1.导入maven依赖
<!-- PDF文件依赖包 -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.1</version>
</dependency>
<!-- PDF文件字体 防止中文乱码 -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
2.PDF增加水印工具类
import com.itextpdf.text.Element;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;
import javax.swing.*;
import java.awt.*;
import java.io.FileOutputStream;
/**
* @Author: FuGui Wang
* @Description: PDF增加水印工具类
* @Date 2022/12/14
* @Version V1.1.0
*/
public class PDFAddWatermarkUtil {
/**
* 给PDF添加水印
* @param inputFile 原文件路径+名称
* @param outputFile 添加水印后输出文件保存的路径+名称
* @param waterMarkName 添加水印的内容
*/
public static void PDFAddWatermark(String inputFile,String outputFile, String waterMarkName) {
try {
// 水印的高和宽(参数可调节)
int textH = 75;
int textW = 170;
// 间隔距离(参数可调节)
int interval = 30;
// 切记这里的参数是文件的路径 ,路径必须是双斜杠的如F:\\test.pdf,不能是F:/test.pdf 或者F:\test.pdf
PdfReader reader = new PdfReader(inputFile);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));
BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
PdfGState gs = new PdfGState();
gs.setFillOpacity(0.2f);//改透明度
gs.setStrokeOpacity(0.4f);
int total = reader.getNumberOfPages() + 1;
JLabel label = new JLabel();
label.setText(waterMarkName);
PdfContentByte under;
// 可添加多个水印
Rectangle pageRect = null;
FontMetrics metrics;
label.setText(waterMarkName);
metrics = label.getFontMetrics(label.getFont());
for (int i = 1; i < total; i++) {
pageRect = reader.getPageSizeWithRotation(i);
// 在内容上方加水印
under = stamper.getOverContent(i);
// 在内容下方加水印
//under = stamper.getUnderContent(i);
under.saveState();
under.setGState(gs);
under.beginText();
under.setFontAndSize(base, 20);
// 水印文字成30度角倾斜
for (int height = interval + textH; height < pageRect.getHeight();
height = height + textH * 3) {
for (int width = interval + textW; width < pageRect.getWidth() + textW;
width = width + textW * 2) {
under.showTextAligned(Element.ALIGN_LEFT
, waterMarkName, width - textW,
height - textH, 30);
}
}
// 添加水印文字
under.endText();
}
stamper.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
PDFAddWatermark("D:\\upload\\Java八股文之基础篇.pdf", "D:\\upload\\Java八股文之基础篇-水印.pdf","这是水印");
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.运行工具类下面的main方法,执行结束后会在同级目录生成一个新的pdf文件
效果展示
没加水印的pdf
加了水印的pdf
水印的间隔和透明度都是可以通过参数控制的,快去试试吧!文章来源:https://www.toymoban.com/news/detail-529309.html
爱吃巧乐兹~的博客_CSDN博客-Linux,Java,爬虫领域博主爱吃巧乐兹~擅长Linux,Java,爬虫,等方面的知识,爱吃巧乐兹~关注spring,jvm,spring boot,java,spring cloud,mybatis领域.https://blog.csdn.net/m0_57625723?type=lately文章来源地址https://www.toymoban.com/news/detail-529309.html
到了这里,关于Java pdf添加文字水印的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!