PDF 转图片并插入到 EXCEL 再转PDF
创始人
2025-01-09 13:07:24
0

pom.xml 引用

             com.aspose             aspose-cells             21.11                               com.aspose             aspose-words             21.11                                org.apache.pdfbox             pdfbox             2.0.24         

代码 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数据是都会重新生成一行空行,此选项默认是关闭的,需要提前设置为true             FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();              excelWriter.fill(reportExcel.getClassList(), fillConfig, writeSheet);              List 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 getPictureModels(){         List 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 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;     } }

相关内容

热门资讯

要领辅助!阿当比鸡辅助(辅助)... 要领辅助!阿当比鸡辅助(辅助)切实一直总是有辅助app(哔哩哔哩)1、不需要AI权限,帮助你快速的进...
据文件显示!小程序财神十三张辅... 据文件显示!小程序财神十三张辅助!都是真的是有开挂辅助方法(有挂解惑)-哔哩哔哩1、玩家可以在小程序...
攻略辅助!微乐家乡官方免费下载... 攻略辅助!微乐家乡官方免费下载安装(辅助)一直是有辅助工具(哔哩哔哩);1、让任何用户在无需微乐家乡...
网友热议!随意玩辅助器视频有挂... 网友热议!随意玩辅助器视频有挂!果然存在有开挂辅助教程(有挂存在)-哔哩哔哩1、完成随意玩辅助器视频...
绝活儿辅助!微信小程序财神十三... 绝活儿辅助!微信小程序财神十三脚本app(辅助)本来是有辅助神器(哔哩哔哩)一、微信小程序财神十三脚...
有玩家发现!黑科技透视工具!都... 有玩家发现!黑科技透视工具!都是是真的有开挂辅助神器(有挂辅助)-哔哩哔哩1、点击下载安装,黑科技透...
法门辅助!三哥玩外g挂(辅助)... 法门辅助!三哥玩外g挂(辅助)一贯存在有辅助方法(哔哩哔哩)进入游戏-大厅左侧-新手福利-激活码辅助...
黑科技辅助挂!微信小程序雀神修... 黑科技辅助挂!微信小程序雀神修改!本来存在有开挂辅助神器(有挂方法)-哔哩哔哩1、玩家可以在微信小程...
学习辅助!hhpoker这个软... 学习辅助!hhpoker这个软件靠谱吗(辅助)果然真的有辅助教程(哔哩哔哩)1、点击下载安装,hhp...
第三方插件!安装胡乐辅助脚本!... 第三方插件!安装胡乐辅助脚本!其实真的有开挂辅助app(有挂细节)-哔哩哔哩1、安装胡乐辅助脚本透视...