当前位置: 首页 > news >正文

itext7 PDF添加水印,获取页面高度,添加到页面右上角

ps: pdf添加水印,内容多的时候会往下跑,修改为获取当前页面高度,进行固定在顶部,其他需要可以自己进行调整,直接贴代码。

public static void main(String[] args) throws IOException {String localFilePath = "C://1/1.pdf";// 页面高度float pageHeight = 0;// 获取当前工作目录的路径String outputFilePath = "C://1/watermarked.pdf";try {// 创建一个字节数组输出流ByteArrayOutputStream outputStream = new ByteArrayOutputStream();// 读取pdf文件PdfReader reader = new PdfReader(localFilePath);PdfStamper stamper = new PdfStamper(reader, outputStream);// 设置字体和编码BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);// 改透明度PdfGState gs = new PdfGState();gs.setFillOpacity(0.9f);gs.setStrokeOpacity(0.1f);// 在内容上方加水印PdfContentByte under = stamper.getOverContent(1);// pageNumber:获取高度的页码PdfDictionary page = reader.getPageN(1);PdfArray mediabox = (PdfArray) page.get(PdfName.MEDIABOX);if (mediabox != null) {float llx = mediabox.getAsNumber(0).floatValue();float lly = mediabox.getAsNumber(1).floatValue();float urx = mediabox.getAsNumber(2).floatValue();float ury = mediabox.getAsNumber(3).floatValue();// 创建一个 Rectangle 对象,包含页面的大小Rectangle pageSize = new Rectangle(llx, lly, urx, ury);// 获取页面的高度pageHeight = pageSize.getHeight();System.out.println("当前页面高度为:" + pageHeight);}// 设置保存当前状态under.saveState();// 设置透明度under.setGState(gs);// 开始添加文本under.beginText();// 设置水印字体大小under.setFontAndSize(base, 10);// 设置位置和偏移度(右上角)under.showTextAligned(Element.ALIGN_BASELINE, "水印内容", 390, pageHeight-20, 0);// 结束添加文本under.endText();stamper.close();reader.close();// 将输出流中的内容转换为字节数组byte[] pdfBytes = outputStream.toByteArray();// 将字节数组进行Base64编码byte[] encodedBytes = Base64.getEncoder().encode(pdfBytes);byte[] decodedBytes = cn.hutool.core.codec.Base64.decode(new String(encodedBytes));FileUtil.writeBytes(decodedBytes, outputFilePath);} catch (Exception e) {e.printStackTrace();}}

http://www.lryc.cn/news/348188.html

相关文章:

  • docker端口映射成功,docker端口不生效的问题解决,外界无法访问docker映射端口
  • RSA非对称加密解密,前端公钥加密后端私钥解密
  • Nginx-01-Nginx 是什么? 能做什么?
  • 最大数字——蓝桥杯十三届2022国赛大学B组真题
  • 查看微信小程序主包大小
  • B树与B+树的奥秘:原理解析与性能
  • Unity组件入门篇目录
  • 【Python技术】使用akshare、pandas高效复盘每日涨停板行业分析
  • kubeflow文档-介绍与架构
  • 传输层的TCP流量控制比数据链路层作用范围更广
  • CSS表格
  • 东芝移动硬盘数据恢复方法有哪些
  • FullCalendar日历组件集成实战(1)
  • wps
  • 【软设】常见易错题汇总
  • 安全数据交换系统哪个好?该如何选型?
  • 用matplotlib制作代码和色块
  • centos无法tab补全至文件
  • 大模型训练框架DeepSpeed使用入门(1): 训练设置
  • 自定义类型——结构体、枚举和联合
  • Windows11系统安装Mysql8之后,启动服务net start mysql报错“服务没有响应控制功能”的解决办法
  • WIFI模块的AT指令联网数据交互--第十天
  • 设计模式Java实现-迭代器模式
  • 单页源码加密屋zip文件加密API源码
  • 47.全排列
  • 呼叫中心系统选pscc好还是okcc好
  • 【SRC实战】前端脱敏信息泄露
  • 区块链 | NFT 水印:Review on Watermarking Techniques(三)
  • 初识C语言——第十九天
  • 软件需求工程习题