java pdf加水印的方法
作者:诚实可靠的悟空 时间:2022-09-03 06:06:50
本文实例为大家分享了java pdf加水印的具体代码,供大家参考,具体内容如下
引入依赖
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.10</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.10</version>
</dependency>
‘/static/fonts/SIMYOU.TTF' 字体 本机没有的话, 可以百度下载
/**
* pdf 加水印
*
* @return
*/
public byte[] pdfAddWaterMark(byte[] byes) {
String fileName = UUID.randomUUID().toString() + ".pdf";
String courseFile = "";
try {
// 第二种:获取项目路径 D:\git\daotie\daotie
//生成临时文件 , 读取完删除
File directory = new File("");// 参数为空
courseFile = directory.getCanonicalPath() + "/";
} catch (IOException e) {
e.printStackTrace();
}
byte[] returnBytes = null;
// 待加水印的文件
PdfReader reader = null;
PdfStamper stamper = null;
// ByteArrayOutputStream baos = null;
FileOutputStream os = null;
try {
reader = new PdfReader(byes);
// 加完水印的文件
// baos = new ByteArrayOutputStream();
// stamper = new PdfStamper(reader, baos);
// 加完水印的文件
os = new FileOutputStream(courseFile + fileName);
stamper = new PdfStamper(reader, os);
int total = reader.getNumberOfPages() + 1;
PdfContentByte content;
// BaseFont font = BaseFont.createFont();
BaseFont basefont = BaseFont.createFont("/static/fonts/SIMYOU.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//这里的字体设置比较关键,这个设置是支持中文的写法
/*BaseFont base = BaseFont.createFont("STSong-Light",
"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// 使用系统字体*/
/*//设置透明度
PdfGState gs = new PdfGState();
gs.setFillOpacity(1f);
gs.setStrokeOpacity(1f);*/
PdfContentByte under;
com.itextpdf.text.Rectangle pageRect = null;
// 循环对每页插入水印
for (int i = 1; i < total; i++) {
pageRect = stamper.getReader().getPageSizeWithRotation(i);
// 计算水印X,Y坐标
float x = (float) (pageRect.getWidth() / 1.98);
float y = (float) (pageRect.getHeight() / 2.8);
// 获得PDF最顶层
under = stamper.getOverContent(i);
under.saveState();
// set Transparency
PdfGState gs = new PdfGState();
// 设置透明度为0.2
gs.setFillOpacity(1.f);
under.setGState(gs);
under.restoreState();
under.beginText();
under.setFontAndSize(basefont, pageRect.getHeight() / 17);
under.setColorFill(BaseColor.RED);
// 水印文字成45度角倾斜
System.out.println("width" + pageRect.getWidth());
System.out.println("height" + pageRect.getHeight());
System.out.println("x" + x);
System.out.println("y" + y);
under.showTextAligned(Element.ALIGN_CENTER, "图片仅供预览,不可用于商业用途", x, y, 45);
// 添加水印文字
under.endText();
under.setLineWidth(1f);
under.stroke();
}
// returnBytes = baos.toByteArray();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
} finally {
try {
stamper.close();
if (os != null) {
os.close();
}
if (reader != null) {
reader.close();
}
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
来源:https://blog.csdn.net/qq_20519453/article/details/94596060
标签:java,pdf,水印
0
投稿
猜你喜欢
Eclipse自定义启动画面和图标的方法介绍
2022-05-14 09:27:13
Android网易有道词典案例源码分享
2022-09-18 20:53:25
springboot注册拦截器所遇到的问题
2023-01-17 21:18:30
Java 网络编程socket编程等详解
2023-09-09 16:43:12
Java struts2请求源码分析案例详解
2021-08-06 02:03:24
Spring Boot中利用JavaMailSender发送邮件的方法示例(附源码)
2023-05-13 02:13:08
c# WPF中自定义加载时实现带动画效果的Form和FormItem
2021-05-29 22:49:17
C# 复制与删除文件的实现方法
2022-01-23 02:36:06
Android 游戏开发中绘制游戏触摸轨迹的曲线图
2023-02-26 08:50:30
基于Java8实现提高Excel读写效率
2023-11-25 10:01:37
SpringBoot统一功能处理实现的全过程
2021-06-12 11:14:49
AndroidStudio4.0 New Class的坑(小结)
2022-07-29 15:06:48
浅谈java 执行jar包中的main方法
2022-06-28 07:58:27
一文带你搞懂Java定时器Timer的使用
2022-09-08 01:18:16
C#实现Stripe支付的方法实践
2023-01-22 01:46:47
C#中常用的运算符总结
2023-10-10 04:09:32
C#多线程之线程同步
2022-06-14 19:58:03
使用Flutter实现一个走马灯布局的示例代码
2023-06-19 03:50:03
SpringBoot内置tomcat调优测试优化
2023-04-09 03:01:59
关于统计数字问题的算法
2023-11-03 00:33:32