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

PDF嵌入图片

所需依赖

<dependency><groupId>com.itextpdf</groupId><artifactId>itext-core</artifactId><version>9.0.0</version><type>pom</type>
</dependency>

源码

/*** PDF工具*/
public class PdfUtils {/*** 嵌入图片到 PDF 的指定页码* 在 PDF 文档的指定页面添加图片,坐标系以左下角为原点,x轴向右为正,y轴向上为正,单位为pt (1pt=1/72英寸)** @param pdfBytes   原 PDF 字节数组* @param imageBytes 图片字节数组* @param width      图片宽度,单位pt* @param height     图片高度,单位pt* @param x          图片位置x坐标,单位pt* @param y          图片位置y坐标,单位pt* @param pageNumber 目标页码(从1开始)* @return 嵌入图片后的 PDF 字节数组,如果页码无效则返回 null* @throws ServiceException 如果嵌入过程中发生错误*/public static byte[] embedImage(byte[] pdfBytes, byte[] imageBytes, float width, float height, float x, float y, int pageNumber) {try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {// 创建 PDF 文档对象,读取源 PDF 并指定输出流PdfDocument pdfDoc = new PdfDocument(new PdfReader(new ByteArrayInputStream(pdfBytes)),new PdfWriter(baos));// 检查页码是否有效int numberOfPages = pdfDoc.getNumberOfPages();if (pageNumber < 1 || pageNumber > numberOfPages) {log.error("指定的页码 {} 无效,文档总页数为 {}", pageNumber, numberOfPages);// 页码无效时返回 null,而不是抛出异常return null;}// 创建图片数据对象ImageData imageData = ImageDataFactory.create(imageBytes);// 基于图片数据创建图片对象Image image = new Image(imageData);// 设置图片大小,按比例缩放至指定尺寸image.scaleToFit(width, height);// 设置图片在指定页面的位置image.setFixedPosition(pageNumber, x, y);// 创建文档布局对象并添加图片Document document = new Document(pdfDoc);document.add(image);// 关闭文档并写入输出流document.close();// 返回处理后的 PDF 字节数组return baos.toByteArray();} catch (Exception e) {// 发生异常时抛出服务异常throw new ServiceException(0, "PDF处理失败");}}
}
http://www.dtcms.com/a/159458.html

相关文章:

  • 新闻数据接口开发指南:从多源聚合到NLP摘要生成
  • Linux的例行性工作(crontab)
  • 自动驾驶(ADAS)领域常用数据集介绍
  • Windows 安装 Yarn 的教程
  • 4.2.2 MySQL索引原理以及SQL优化
  • LangChain构建大模型应用之RAG
  • java-mybatis01
  • 大模型时代的具身智能:从虚拟到现实的智能体进化革命
  • 用Python做有趣的AI项目 2:用 Python 和 NLTK 构建一个聊天机器人
  • 深度解析如何将图像帧和音频片段特征高效存储到向量数据库 Milvus
  • 深入浅出JVM - Java架构师面试实战
  • 有源晶振输出匹配电阻选择与作用详解
  • Spring security详细上手教学(三)密码管理
  • 如何把握邮件发送的黄金时间?
  • 北京工业大学25计专上岸经验分享
  • Qt 中 QSQLITE 和 QODBC 数据库连接的区别
  • Java 构造器
  • 基于Pytest接口自动化的requests模块项目实战以及接口关联方法详解
  • 稳扎稳打,25西电生命科学技术学院(考研录取情况)
  • Git命令(Gitee)
  • 10 DPSK原始对话记录
  • spring项目rabbitmq es项目启动命令
  • Node.js 应用部署:镜像体积优化与安全的多阶段构建探索
  • 神经编译革命:如何用脑机接口直接编程量子计算机?
  • Java求职者面试:从Spring Boot到微服务的技术深度探索
  • TypeScript 入门到进阶全讲解(超全版)
  • 【计算机网络】Linux网络的几个常用命令
  • OceanBase数据库磁盘空间管理
  • 量子网络:构建未来通信的超高速“高速公路”
  • Flutter 在 Dart 3.8 开始支持 Null-Aware Elements 语法,自动识别集合里的空元素