-
引入maven依赖
xml<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.9</version> </dependency> -
java代码
javaimport cn.hutool.extra.qrcode.QrCodeUtil; import com.itextpdf.text.*; import com.itextpdf.text.pdf.*; import org.apache.commons.io.IOUtils; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.*; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public static void main(String[] args) { //本地测试时,用于存放测试文件的目录 Path dir = Paths.get("excel"); // 源pdf文件 Path pdf = dir.resolve("out.pdf"); // 最终生成的pdf文件 Path simple = dir.resolve("simple.pdf"); try (InputStream is = new BufferedInputStream(Files.newInputStream(pdf)); ByteArrayOutputStream bos = new ByteArrayOutputStream()){ // 创建PdfReader对象以读取现有的PDF文档 PdfReader reader = new PdfReader(IOUtils.toByteArray(is)); // 创建PdfStamper对象以追加到现有的PDF文档 PdfStamper stamper = new PdfStamper(reader, Files.newOutputStream(simple)); stamper.setFormFlattening(true); // 加载图像 //Image image = Image.getInstance("excel/image.png"); //此处通过hutool生成二维码图片,也可以通过上面的方式选择本地文件 BufferedImage generate = QrCodeUtil. generate("abcdefghijklmnopqrstuvwxyz", 500, 500); ImageIO.write(generate, "png", bos); Image image = Image.getInstance(bos.toByteArray()); // 获取PDF页面的PdfContentByte对象 PdfContentByte contentByte = stamper.getOverContent(1); // 获取pdf文件的长宽 Rectangle pageSize = reader.getPageSize(1); // 设置image的长宽 image.scaleAbsolute(80, 80); //设置图片在pdf文件中的绝对位置,pdf左下角的点为原点(0,0) image.setAbsolutePosition(pageSize.getRight() - 80 , pageSize.getTop() - 80); image.scalePercent(15f); //插入图片 contentByte.addImage(image); // 关闭PdfStamper和PdfReader对象 stamper.flush(); stamper.close(); reader.close(); generate.flush(); } catch (IOException | DocumentException e) { e.printStackTrace(); } } -
如果需要在每页文件上都加上图片,只需要将上面的代码做点小的改动就行
java//获取pdf总页数 int numberOfPages = reader.getNumberOfPages(); 省略...... //从第一页开始循环 for(int i = 1; i <= numberOfPages; i++){ //把这两个取值的地方改一下就行 // 获取PDF页面的PdfContentByte对象 PdfContentByte contentByte = stamper.getOverContent(i); // 获取pdf文件的长宽 Rectangle pageSize = reader.getPageSize(i); 省略...... }不出意外,二维码会出现在pdf页的右上角

Java使用itextpdf往pdf中插入图片
BillowX2024-03-24 15:53
相关推荐
2401_8949155341 分钟前
GEO 优化源码全解析:从搜索引擎到 AI 引擎的底层改写逻辑Java牛马5 小时前
SpringBoot Starter 依赖相关总结吴声子夜歌5 小时前
Java面试——Spring Cloud原理及应用(二)东小西6 小时前
【SAA实战】第 1 篇:ReactAgent 入门——先撸个"会调工具的助手"跑起来mqiqe6 小时前
AgentScope Java 2.0 协议集成全景解析:A2A、AG-UI、Agent Protocol 三大开放协议实战指南脉动数据行情6 小时前
Java 实现台股 TWSE/TPEx 行情采集(个股 + K 线)月华路8 小时前
G1 GC 对数组与大对象(Humongous)的处理liangshanbo12159 小时前
虚拟列表深度面试题整理gugucoding9 小时前
59. 【Java】Spring Boot 入门:第一个 Web 应用点我头像干啥10 小时前
004:多个PDF文件合并