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

Java使用itextpdf往pdf中插入图片

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

相关文章:

  • Python Windows系统 虚拟环境使用
  • JavaEE 初阶篇-深入了解进程与线程(常见的面试题:进程与线程的区别)
  • Spring Boot 实现程序的优雅退出
  • 软考真题详解-系统架构设计师-计算机基础知识(1)
  • binary.write 和 binary.read
  • 分布式事务的解决方案--Seata架构
  • Linux的基本使用
  • vue3+threejs新手从零开发卡牌游戏(七):创建卡组
  • 掌握Go语言:Go语言结构体,精准封装数据,高效管理实体对象(22)
  • 重磅|国家能源局开展配电网安全风险管控重点行动
  • 微前端架构
  • 实验三 前端性能优化-CSS优化
  • Unity InputField实现框自适应内容简便方法
  • 自动化测试 —— 基于Jmeter之DDT!
  • 设计模式:面向对象设计的六大原则
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • Effective Java 笔记(一)
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • IP路由与转发
  • JAVA SE 6 GC调优笔记
  • JAVA 学习IO流
  • Java方法详解
  • Js基础知识(四) - js运行原理与机制
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • mysql_config not found
  • PhantomJS 安装
  • Tornado学习笔记(1)
  • ubuntu 下nginx安装 并支持https协议
  • use Google search engine
  • Vue全家桶实现一个Web App
  • 初识 webpack
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 配置 PM2 实现代码自动发布
  • 三栏布局总结
  • zabbix3.2监控linux磁盘IO
  • ​ArcGIS Pro 如何批量删除字段
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • (145)光线追踪距离场柔和阴影
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (六)Hibernate的二级缓存
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • .Mobi域名介绍
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET 5种线程安全集合
  • .net core 6 集成和使用 mongodb
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET多线程执行函数
  • @ModelAttribute使用详解
  • [ 数据结构 - C++] AVL树原理及实现
  • []C/C++读取串口接收到的数据程序
  • [BUUCTF 2018]Online Tool(特详解)
  • [bzoj1038][ZJOI2008]瞭望塔