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

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.xdnf.cn/news/2325.html

相关文章:

  • python连接Elasticsearch并完成增删改查
  • 游戏遭遇DDoS攻击如何快速止损?实战防御策略与应急响应指南
  • 百度Create大会深度解读:AI Agent与多模态模型如何重塑未来?
  • PostgreSQL的扩展 pgcrypto
  • 全场景婴幼儿托育服务与管理实训室建设方案
  • 鸿蒙版电影app设计开发
  • 【Quest开发】透视环境下抠出身体并能遮挡身体上的服装
  • 【前端基础】viewport 元标签的详细参数解析与实战指南
  • Milvus(8):密集向量、二进制向量、稀疏向量
  • 烽火HG680-MC_晨星MSO9385芯片-2+8G_安卓9.0_不分地区通刷卡刷固件包
  • Java面向对象:抽象类详解
  • Linux文件操作
  • 如何避免爬虫因Cookie过期导致登录失效
  • 视觉/深度学习/机器学习相关面经总结(2)(持续更新)
  • vscode vue 的插件点击组件不能跳转到文件问题解决
  • LeetCode13_罗马数字转整数
  • OpenVLA:大语言模型用于机器人操控的经典开源作品
  • 界面打印和重定向同时实现
  • 多级缓存架构设计与实践经验
  • 决策树随机深林
  • Mysql从入门到精通day6————时间和日期函数精讲
  • PDF嵌入隐藏的文字
  • [ACTF2020 新生赛]Upload
  • DeepSeek智能时空数据分析(五):基于区域人口数量绘制地图散点-大模型搜集数据NL2SQL加工数据
  • Python对比两张CAD图并标记差异的解决方案
  • 第5章 数据库系统(选择|案例|论文)(重点★★★★★)
  • 【ROS2】ROS开发环境配置——vscode和git
  • 【极致版】华为云Astro轻应用抽取IoTDA影子设备参数生成表格页面全流程
  • OceanBase数据库磁盘空间管理
  • AI声像融合守护幼儿安全——打骂/异常声音报警系统的智慧防护