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

PDF 转图片并插入到 EXCEL 再转PDF

pom.xml 引用

<dependency><groupId>com.aspose</groupId><artifactId>aspose-cells</artifactId><version>21.11</version></dependency><dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>21.11</version></dependency><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version></dependency>

代码 PDF 转 图片 其中Excel 转PDF 可以参考 上一篇

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.io.IoUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.CustomCellWriteHeightConfig;
import com.CustomPictureHandler;
import com.PictureModel;
import com.TtIncomingInspectionReportExcel;
import com.AsposeCellsUtil;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;public class TestMain {public static void main(String[] args) {Long start = new Date().getTime();try{FileInputStream fis = new FileInputStream("E:\\workData\\ZYInspectionFillReport.xlsx");FileOutputStream fos = new FileOutputStream("E:\\workData\\old.xlsx");TtIncomingInspectionReportExcel reportExcel = new TtIncomingInspectionReportExcel();ExcelWriter excelWriter = EasyExcel.write(fos).registerWriteHandler(new CustomCellWriteHeightConfig()).withTemplate(fis).build();WriteSheet writeSheet = EasyExcel.writerSheet().build();//开启自动换行,自动换行表示每次写入一条list数据是都会重新生成一行空行,此选项默认是关闭的,需要提前设置为trueFillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();excelWriter.fill(reportExcel.getClassList(), fillConfig, writeSheet);List<PictureModel> pictureModelList = getPictureModels();//设置 COA图片if(CollectionUtil.isNotEmpty(pictureModelList)){WriteSheet writeSheetCoa = EasyExcel.writerSheet("COA文件").registerWriteHandler(new CustomPictureHandler(pictureModelList, "COA文件")).build();//对象excelWriter.fill(reportExcel, writeSheetCoa);}//对象excelWriter.fill(reportExcel, writeSheet);excelWriter.finish();reportExcel = null;IoUtil.close(fis);IoUtil.close(fos);//创建Workbook 实例并加载示例文档String copyFilePath = "E:\\workData\\old.pdf";AsposeCellsUtil.excelToPdf("E:\\workData\\old.xlsx", new FileOutputStream(copyFilePath));}catch (Throwable t){t.printStackTrace();}Long end = new Date().getTime();System.out.println(end - start);}private static List<PictureModel> getPictureModels(){List<PictureModel> data = new ArrayList<>();String pdfPath = "E:\\BaiduNetdiskDownload\\WXWork\\202405080027_戴陆文2的试用期员工转正述职评分(数字产品BG).pdf";try{File pdf = new File(pdfPath);PDDocument document = PDDocument.load(new FileInputStream(pdf));List<BufferedImage> images = new ArrayList<>();// 创建PDF渲染器PDFRenderer pdfRenderer = new PDFRenderer(document);for (int i = 0; i < document.getNumberOfPages(); i++) {/*** 《 72 》 此处设置得越大像素越高,生成得时候也会越久* DPI 的设置一般根据具体的需求和使用场景来决定。DPI 越高,生成的图片分辨率越大,图像质量也越高,* 但同时文件大小也会变得更大。通常情况下,如果需要对生成的图片进行放大、裁剪等操作,建议将 DPI 设置得较高,* 以保证图像质量和细节的清晰度;如果只是需要简单地浏览或共享图片,可以适当降低 DPI 以减小文件大小。在实际开发中,* 可以根据不同的应用场景进行调整。一般来说,72 DPI 是一个比较常见的默认值,可以作为参考。*/BufferedImage image = pdfRenderer.renderImageWithDPI(i, 100, ImageType.RGB);images.add(image);}int row = 0;for(int i = 0; i < images.size(); i++){try{int statRow = row;int endRow = row+1;ByteArrayOutputStream os = new ByteArrayOutputStream();ImageIO.write(images.get(i), "png", os);data.add(PictureModel.createPictureModel("COA文件", statRow, endRow, 0, 0, os.toByteArray(), "png"));row = endRow + 1;}catch (Throwable t){t.printStackTrace();}}}catch (Throwable t){t.printStackTrace();}return data;}
}

http://www.lryc.cn/news/401419.html

相关文章:

  • jmeter之变量随机参数化以及解决多线程不会随机变化
  • 24/7/12总结
  • sentinel网关限流配置及使用
  • # 如何解决 App Store 审核中的 4.3(a) 问题:Guideline 4.3(a) - Design - Spam
  • 最长上升子序列(LIS)
  • 自动驾驶车道线检测系列—3D-LaneNet: End-to-End 3D Multiple Lane Detection
  • 手工创建 postgres kamailio 数据库
  • 装饰设计模式
  • Linux 线程初步解析
  • 为ppt中的文字配色
  • python-区间内的真素数(赛氪OJ)
  • TCP/IP、UDP、HTTP 协议介绍比较和总结
  • Unity Meta Quest 开发:如何在每只手指上添加 Poke 交互
  • MyBatis的原理?
  • 数学基础【俗说矩阵】:齐次线性方程和非齐次线性方程求解-学习笔记
  • 乐尚代驾项目概述
  • 脱发的 7 个原因,不能再瞒着大家了!
  • Vim使用教程
  • 前端开发体系+html文件详解
  • 小程序中用于跳转页面的5个api是什么和区别
  • 翁恺-C语言程序设计-10-0. 说反话
  • langchain 入门指南(二)- 如何跟大模型对话
  • [集成学习]基于python的Stacking分类模型的客户购买意愿分类预测
  • FastApi地理坐标数据存取实践
  • Docker容器——初识Docker,安装以及了解操作命令
  • JavaSE从零开始到精通
  • 求解答word图标变白
  • Jenkins 离线升级
  • Unty 崩溃问题(Burst 1.8.2)
  • 【大型实战】企业网络实验(华为核心交换、ESXI7.0vmware虚拟机、DHCP中继、服务端网络及用户端网络配置)