为PDF添加文字水印,百度搜了下,发现很多内容太老了,直接CV不能用,所以给出一段好用的。
- 项目中添加依赖。
itextpdf经历过几次更新,需要使用以下最新的依赖。
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.3</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
- 核心代码
因为需求中要让文字换行,尝试添加\n
换行无果,所以添加了两段文字。
package com.example.springboot.pdfUtils;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Element;
import com.itextpdf.text.pdf.*;
import java.io.FileOutputStream;
import java.util.UUID;
public class Utils {
/**
* 添加文字水印,并附加UUID
* @param srcFile 待加水印文件
* @param destFile 加水印后输出文件
* @param text 文本内容
* @throws Exception
*/
public static void addWaterMark(String srcFile, String destFile, String text) throws Exception {
// 待加水印的文件
PdfReader reader = new PdfReader(srcFile);
// 加完水印的文件
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destFile));
int total = reader.getNumberOfPages() + 1;
PdfContentByte content;
// 设置透明度
PdfGState gs = new PdfGState();
gs.setFillOpacity(0.3f);
// 设置字体
BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
// 循环对每页插入水印
for (int i = 1; i < total; i++)
{
// 水印的起始
content = stamper.getOverContent(i);
content.setGState(gs);
content.setFontAndSize(base, 32);
// 开始
content.beginText();
// 设置颜色 默认为黑色
content.setColorFill(BaseColor.BLACK);
// 开始写入水印
content.showTextAligned(Element.ALIGN_MIDDLE, text, 180,
340, 45);
content.showTextAligned(Element.ALIGN_MIDDLE, UUID.randomUUID().toString(), 140,
240, 45);
content.endText();
}
stamper.close();
}
}
- 测试
public static void main(String[] args) throws Exception{
String fileSrc = "C:\\Users\\Keeping\\Desktop\\测试.pdf";
String destFile = "C:\\Users\\Keeping\\Desktop\\测试2.pdf";
String text = "这是一段测试文字";
addWaterMark(fileSrc,destFile,text);
}
-
测试结果