Java使用itextpdf往pdf中插入图片

news/2024/10/20 12:54:34/
  • 引入maven依赖

    <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.9</version>
    </dependency>
    
  • java代码

    import 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();}}
  • 如果需要在每页文件上都加上图片,只需要将上面的代码做点小的改动就行

    //获取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页的右上角
    在这里插入图片描述


http://www.ppmy.cn/news/1393443.html

相关文章

python框架的一加剧场管理系统的设计与实现flask-django-nodejs-php

本文讲述了一加剧场管理系统。结合电子管理系统的特点&#xff0c;分析了一加剧场管理系统的背景&#xff0c;给出了一加剧场管理系统实现的设计方案。 本论文主要完成不同用户的权限划分&#xff0c;不同用户具有不同权限的操作功能&#xff0c;在用户模块&#xff0c;主要有用…

os.path模块(三)

文章目录 os.path.join(path, *paths)os.path.normcase(path)os.path.normpath(path)os.path.realpath(path, *, strictFalse)os.path.relpath(path, startos.curdir)os.path.samefile(path1, path2)os.path.sameopenfile(fp1, fp2)os.path.samestat(stat1, stat2)os.path.spli…

拒绝光照影响,一文教你在地平线旭日派X3上如何使用resnet18搭建自己的深度学习巡线小车

拒绝光照影响&#xff0c;一文教你在地平线旭日派X3上如何使用resnet18搭建自己的深度学习巡线小车 获取训练的代码请关注这个佬的文章,大佬,我这里只说怎么转模型&#xff0c;并且在旭日派X3部署 1. 在ubuntu虚拟机中将onnx模型转为bin模型 第一步将自己的resnet的onnx模型拖…

JavaScript初识及基本语法详解

JavaScript是一种广泛应用于Web开发的轻量级、解释型、面向对象的脚本语言&#xff0c;它支持事件驱动、函数式以及基于原型的编程风格。JavaScript不仅可以用于客户端&#xff08;在用户的浏览器中运行&#xff09;&#xff0c;也可以在服务端&#xff08;如Node.js环境&#…

python食品安全信息管理系统flask-django-nodejs-php

。 食品安全信息管理系统是在安卓操作系统下的应用平台。为防止出现兼容性及稳定性问题&#xff0c;编辑器选择的是Hbuildex&#xff0c;安卓APP与后台服务端之间的数据存储主要通过MySQL。用户在使用应用时产生的数据通过 python等语言传递给数据库。通过此方式促进食品安全信…

[游戏开发][Unity] 导出Xcode工程,完成调试与发布

Unity导出Xcode工程(模拟器版本与真机调试) [游戏开发][Unity] 打包Xcode工程模拟器真机调试_unity5 打包xcod-CSDN博客文章浏览阅读2k次。[游戏开发][Unity] 打包Xcode工程模拟器真机调试_unity5 打包xcodhttps://blog.csdn.net/liuyongjie1992/article/details/131934221 Uni…

PCB产业渐出谷底,超颖电子能否找到发展确定性?

经历了三年多低迷期&#xff0c;消费电子在2024年终于以企稳回升的姿态逐步回暖。IDC预期&#xff0c;2024年&#xff0c;智能手机、PC、服务器等关键领域的出货量或迎来修复性成长。 这也将带动“电子产品之母”印刷电路板&#xff08;Printed Circuit Board&#xff0c;PCB&…

Flutter 事件传递简单概述、事件冒泡、事件穿透

前言 当前案例 Flutter SDK版本&#xff1a;3.13.2 本文对 事件传递只做 简单概述&#xff0c;主要讲解&#xff0c;事件传递过程中可能遇到的问题解决&#xff0c;比如 事件冒泡、事件穿透&#xff1b; 不是我偷懒&#xff0c;是自认为没有这几位写的详细、仔细&#xff0c…