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

itextpdf使用:使用PdfReader添加图片水印

gitee参考代码地址:https://gitee.com/wangtianwen1996/cento-practice/tree/master/src/test/java/com/xiaobai/itextpdf
参考文章:https://www.cnblogs.com/wuxu/p/17371780.html

1、生成带有文字的图片

使用java.awt包的相关类生成带文字的图片,代码如下:

/*** 生成带文字的图片* @return*/public static String createImage() {int imageWidth = 80;int imageHeight = 30;BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);Graphics2D g2 = image.createGraphics();g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);Color c = new Color(255, 255, 255);g2.setColor(c);// 设置背景色g2.fillRect(0, 0, imageWidth, imageHeight);String code = "000153";// 设置文字字体Font font = new Font(null, Font.PLAIN, 10);g2.setFont(font);g2.setColor(new Color(0, 0, 0));// 文字起始位置g2.drawString(code, 5, 15);g2.dispose();String imagePath = "D:\\usr\\local\\zeus\\resource\\temp/aaa.jpg";OutputStream baos = null;try {baos = new FileOutputStream(new File(imagePath));} catch (FileNotFoundException e) {e.printStackTrace();}try {ImageIO.write(image, "jpg", baos);} catch (IOException e) {e.printStackTrace();}// 关闭输出流IOUtils.closeQuietly(baos);return imagePath;}

2、使用itextpdf的PdfReader插入图片水印

@Test
public void addImage() {String pdfPath = "/Users/outenmon/Public/工作资料/公告/aaaa.pdf";PdfReader reader = null;try {reader = new PdfReader(pdfPath, "PDF".getBytes());} catch (IOException e) {e.printStackTrace();}String outPdfFile = "/Users/outenmon/Public/工作资料/公告/bbbb.pdf";PdfStamper stamp = null;try {stamp = new PdfStamper(reader, new FileOutputStream(new File(outPdfFile)));} catch (DocumentException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}PdfContentByte under;//        PdfGState gs1 = new PdfGState();
//        gs1.setFillOpacity(0.3f);// 透明度设置String imagePath = ImageUtil.createImage();Image img = null;// 插入图片水印try {img = Image.getInstance(imagePath);} catch (BadElementException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}Rectangle pageSize1 = reader.getPageSize(1);float height = pageSize1.getHeight();img.setAbsolutePosition(10, height - 50); // 坐标// img.setRotation(-20);// 旋转 弧度// img.setRotationDegrees(45);// 旋转 角度
//        img.scaleAbsolute(80, 30);// 自定义大小// img.scalePercent(50);//依照比例缩放//        int pageSize = reader.getNumberOfPages();// 原pdf文件的总页数/*for (int i = 1; i <= pageSize; i++) {under = stamp.getUnderContent(i);// 水印在之前文本下// under = stamp.getOverContent(i);//水印在之前文本上under.setGState(gs1);// 图片水印 透明度try {under.addImage(img);// 图片水印} catch (DocumentException e) {e.printStackTrace();}}*/under = stamp.getUnderContent(1);// 水印在之前文本下// under = stamp.getOverContent(i);//水印在之前文本上
//        under.setGState(gs1);// 图片水印 透明度try {under.addImage(img);// 图片水印} catch (DocumentException e) {e.printStackTrace();}try {stamp.close();// 关闭} catch (DocumentException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
}
http://www.lryc.cn/news/297307.html

相关文章:

  • 如何为Kafka加上账号密码(二)
  • 【大数据】Flink on YARN,如何确定 TaskManager 数
  • ES节点故障的容错方案
  • 【Flink】FlinkSQL实现数据从Kafka到MySQL
  • Unity GC
  • Vue源码系列讲解——变化侦测篇【下】(Array的变化侦测)
  • 【机器学习笔记】贝叶斯学习
  • ElasticSearch之倒排索引
  • win11安装mysql8.3.0压缩包版 240206
  • 数据库索引与优化:深入了解索引的种类、使用与优化
  • React 错误边界组件 react-error-boundary 源码解析
  • 分享66个相册特效,总有一款适合您
  • chagpt的原理详解
  • dockerfile 详细讲解
  • 跟着pink老师前端入门教程-day23
  • JRT监听程序
  • MCU+SFU视频会议一体化,视频监控,指挥调度(AR远程协助)媒体中心解决方案。
  • 1184. 欧拉回路(欧拉回路,模板题)
  • 学习 Redis 基础数据结构,不讲虚的。
  • Android 11 webview webrtc无法使用问题
  • 嵌入式单片机中晶振的工作原理
  • AWS配置内网EC2服务器上网【图形化配置】
  • Android中的MVVM
  • 制作耳机壳的UV树脂和塑料材质相比劣势有哪些?
  • CSP-202012-1-期末预测之安全指数
  • Doris中的本地routineload环境,用于开发回归测试用例
  • 【开源项目阅读】Java爬虫抓取豆瓣图书信息
  • 基于opencv-python模板匹配的银行卡号识别(附源码)
  • JAVA设计模式之建造者模式详解
  • ElasticSearch查询语句用法