itext向PDF添加文字图片水印
Maven坐标
<properties>
<itextpdf.version>5.5.6</itextpdf.version>
</properties>
<dependencies>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>${itextpdf.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>${itextpdf.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
</dependencies>
代码
/**
* PDF加图片水印
* @param pdfInPath 源文件(PDF)
* @param imgPath 图片文件(水印)
* @param pdfOutPath 目标输出文件(PDF)
* @throws IOException
* @throws DocumentException
*/
public static void setImgWatermark(String pdfInPath,String imgPath,String pdfOutPath)
throws IOException, DocumentException {
FileOutputStream fos = new FileOutputStream(pdfOutPath);
BufferedOutputStream bos = new BufferedOutputStream(fos);
PdfReader reader = new PdfReader(pdfInPath);
PdfStamper stamper = new PdfStamper(reader, bos);
int total = reader.getNumberOfPages() + 1;
PdfContentByte waterMar;
PdfGState gs = new PdfGState();
for (int i = 1; i < total; i++) {
waterMar = stamper.getOverContent(i);// 在内容上方加水印
//waterMar = stamper.getUnderContent(1);//在内容下方加水印
// 设置图片透明度为0.8f
gs.setFillOpacity(0.8f);
// 设置透明度
waterMar.setGState(gs);
// 创建水印图片
Image image = Image.getInstance(imgPath);
// 水印图片位置
image.setAbsolutePosition(850, 80);
// 边框固定
image.scaleToFit(200, 200);
// 设置旋转弧度
//image.setRotation(30);// 旋转 弧度
// 设置旋转角度
//image.setRotationDegrees(45);// 旋转 角度
// 设置等比缩放
image.scalePercent(150);
// 自定义大小
image.scaleAbsolute(100,100);
// 附件加上水印图片
waterMar.addImage(image);
// stroke
waterMar.stroke();
}
stamper.close();
reader.close();
}
/**
* PDF添加文字水印
* @param srcFile 源文件(PDF)
* @param outSrcPath 目标输出文件(PDF)
* @param watermarktext 水印(文本)
* @throws IOException
* @throws DocumentException
*/
public static void addWatermark(String srcFile,String outSrcPath, String watermarktext) throws IOException, DocumentException {
// 待加水印的文件
PdfReader reader = new PdfReader(new FileInputStream(srcFile));
if(outSrcPath == null || outSrcPath.trim().equals("")){
outSrcPath = "D:\\waterMark.pdf";
}
// 加完水印的文件
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outSrcPath));
// 设置字体
BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
// 设置透明度
PdfGState gs = new PdfGState();
// pdf页数
int pageCount = reader.getNumberOfPages() + 1;
PdfContentByte content;
// 循环对每页插入水印
for (int i = 1; i < pageCount; i++)
{
// 水印的起始
content = stamper.getOverContent(i);
gs.setFillOpacity(0.5f);
content.setGState(gs);
// 开始
content.beginText();
// 设置颜色 默认为黑色
content.setColorFill(BaseColor.LIGHT_GRAY);
// 设置字体及字号
content.setFontAndSize(baseFont, 50);
// 开始写入水印
content.showTextAligned(Element.ALIGN_BASELINE, watermarktext, 180,
340, 45);
content.endText();
}
stamper.close();
reader.close();
}
调用
/*添加图片水印*/
String filePath1 = realPath + "\\cer\\"+CommonTool.getCurrTimeForFile()+".pdf";
setImgWatermark(realPath + filepath,"C:\\Pictures\\qrcode.png",filePath1);
/*添加文字水印*/
String filePath2 = realPath + "\\cer\\"+CommonTool.getCurrTimeForFile()+".pdf";
addWatermark(filePath1,filePath2,"这是一个水印");
效果如下
如果这篇文章对你有用,可以关注本人微信公众号获取更多ヽ(^ω^)ノ ~

标签:
itext5
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2021-06-01 VLC media player
2021-06-01 Video.js
2021-06-01 HLS、RTSP、RTMP
2018-06-01 cordova安卓sdk
2018-06-01 Nginx 启动报错 “/var/run/nginx/nginx.pid" failed”