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

Excel Word Pdf 格式转换

引入aspose包

手动更新本地mvn仓库

mvn install:install-file -Dfile=C:\aspose-cells-22.9.jar -DgroupId=aspose -DartifactId=aspose-cells -Dversion=22.9 -Dpackaging=jar
mvn install:install-file -Dfile=C:\aspose-pdf-22.9.jar -DgroupId=aspose -DartifactId=aspose-pdf -Dversion=22.9 -Dpackaging=jar
       <dependency><groupId>com.aspose</groupId><artifactId>aspose-cells</artifactId><version>22.9</version></dependency><dependency><groupId>com.aspose</groupId><artifactId>aspose-pdf</artifactId><version>22.9</version></dependency><dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>23.1</version></dependency>

配置pom文件,引入依赖

设置许可证,简单实现转换方法:

   /*** 许可证字符串*/private static final String LICENSE = "<License>" +"<Data>" +"<Products><Product>Aspose.Total for Java</Product><Product>Aspose.Words for Java</Product></Products>" +"<EditionType>Enterprise</EditionType>" +"<SubscriptionExpiry>20991231</SubscriptionExpiry>" +"<LicenseExpiry>20991231</LicenseExpiry>" +"<SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>" +"</Data>" +"<Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>" +"</License>";/*** 设置 license 去除水印*/private static void setLicense() {ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(LICENSE.getBytes());License license = new License();license.setLicense(byteArrayInputStream);}
  /*** 直接在内存中将Excel字节数组转换为PDF字节数组** @param excelBytes excelBytes* @return byte[]* @throws Exception*/public static byte[] convertExcelToPdf(byte[] excelBytes) throws Exception {// 确保已设置Aspose许可证setLicense();try (InputStream is = new ByteArrayInputStream(excelBytes);ByteArrayOutputStream pdfOut = new ByteArrayOutputStream()) {// 手动创建和管理 Aspose WorkbookWorkbook workbook = null;try {workbook = new Workbook(is);PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();pdfSaveOptions.setOnePagePerSheet(true);for (int i = 0; i < workbook.getWorksheets().getCount(); i++) {workbook.getWorksheets().get(i).setVisible(true);}workbook.save(pdfOut, pdfSaveOptions);return pdfOut.toByteArray();} finally {// 手动释放 Aspose Workbook 资源if (workbook != null) {workbook.dispose();}}}}
  /*** 将 Excel 文件转换为 Word 文档(通过PDF中间格式)** @param excelBytes Excel文件的字节数组* @return 生成的Word文档字节数组* @throws Exception 转换过程中可能抛出的异常*/public static byte[] convertExcelToWordViaPdf(byte[] excelBytes) throws Exception {// 确保已设置Aspose许可证setLicense();setLicensePdf();Workbook workbook = null;try {// 第一步:Excel 转 PDFbyte[] pdfBytes;try (InputStream is = new ByteArrayInputStream(excelBytes);ByteArrayOutputStream pdfOut = new ByteArrayOutputStream()) {workbook = new Workbook(is);// 设置PDF保存选项PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();// 不强制每页一个工作表pdfSaveOptions.setOnePagePerSheet(false);// 所有列显示在一页上pdfSaveOptions.setAllColumnsInOnePagePerSheet(true);// 保存为PDF格式workbook.save(pdfOut, pdfSaveOptions);pdfBytes = pdfOut.toByteArray();} finally {if (workbook != null) {workbook.dispose();}}log.info("Excel 转 PDF 成功");// 第二步:PDF 转 Word(使用aspose-words处理PDF)byte[] wordBytes;try (InputStream pdfInputStream = new ByteArrayInputStream(pdfBytes);ByteArrayOutputStream wordOut = new ByteArrayOutputStream()) {// 使用Aspose.PDF加载PDF并转换为Wordcom.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document(pdfInputStream);// 保存为Word格式pdfDocument.save(wordOut, com.aspose.pdf.SaveFormat.DocX);wordBytes = wordOut.toByteArray();// 释放资源pdfDocument.dispose();}log.info("Excel 转 PDF 转 Word 成功");return wordBytes;} catch (Exception e) {throw new Exception("Excel转Word失败: " + e.getMessage(), e);}}/*** 将Excel字节数组转换为Word文档字节数组** @param excelBytes Excel文件的字节数组* @return Word文档的字节数组* @throws Exception 转换过程中可能抛出的异常*/public static byte[] excelToWord(byte[] excelBytes) throws Exception {// 确保已设置Aspose许可证setLicense();// 从字节数组加载Excel工作簿Workbook workbook = new Workbook(new ByteArrayInputStream(excelBytes));// 创建DOCX保存选项DocxSaveOptions options = new DocxSaveOptions();options.setClearData(true);options.setCreateDirectory(true);options.setMergeAreas(true);// 将Excel保存为Word字节数组ByteArrayOutputStream outputStream = new ByteArrayOutputStream();workbook.save(outputStream, options);return outputStream.toByteArray();}

修改依赖groupId,不再需要手动更新本地mvn仓库

     <dependency><groupId>com.luhuiguo</groupId><artifactId>aspose-cells</artifactId><version>23.1</version></dependency><dependency><groupId>com.luhuiguo</groupId><artifactId>aspose-pdf</artifactId><version>22.9</version></dependency><dependency><groupId>com.luhuiguo</groupId><artifactId>aspose-words</artifactId><version>23.1</version></dependency>

其他问题:ContentType

不能重复设置response.setContentType 会导致前端异常 

        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");if ("pdf".equals(type)) {response.setContentType("application/pdf");}


浏览器无法正确识别响应内容类型:第一次设置为 Excel,第二次设置为 PDF,浏览器可能因为前后不一致而报错。
响应头冲突:部分 Web 容器(如 Tomcat)可能会对重复设置的头部进行处理,但有些前端库或代理服务器(如 Nginx、CDN)可能不接受这种行为,导致连接中断。
前端报错 network error 或 network not connected:这通常是由于响应头异常导致浏览器或前端请求库(如 axios)无法正常处理响应,从而中断连接。

http://www.dtcms.com/a/357162.html

相关文章:

  • ubuntu 安装 vllm
  • 电平移位器的原理
  • 群核科技--SpatialGen
  • pytest使用allure测试报告
  • Pytest 插件方法:pytest_runtest_makereport
  • 多方调研赋能AI+智慧消防 豪越科技人工智能创新获认可
  • 【网络安全领域】边界安全是什么?目前的发展及应用场景
  • java基本类型关键字
  • EasyExcel处理大数据量导出
  • 新手法务合同审查,有什么建议?
  • 单点登录(SSO)前端(Vue2.X)改造
  • 关于锁相放大器(LIA)的系统论文研究(重点于FPGA部分)
  • 设计模式:装饰模式(Decorator Pattern)
  • iOS开发之苹果系统包含的所有字体库
  • 最小生成树——Kruskal
  • 【机器学习入门】3.1 关联分析——从“购物篮”到推荐系统的核心逻辑
  • 响应式编程框架Reactor【2】
  • Windows C盘完全占满会如何?
  • 2024-06-13-debian12安装Mariadb-Galera-Cluster+Nginx+Keepalived高可用多主集群
  • 毕马威 —— 公众对人工智能的信任、态度及使用情况调查
  • C++基础(②VS2022创建项目)
  • docker compose设置命令别名的方法
  • Windows WizTree-v4.27.0.0-x64[磁盘空间分析软件]
  • C++中类,this指针,构造函数,析构函数。拷贝构造函数,初步理解运算符重载,初步理解赋值运算符重载
  • 2.4G串口透传模组 XL2417D无线模块,实测通讯距离300m左右!
  • 第23章笔记|PowerShell 高级远程控制配置(端点、自定义、双向认证、多跳)
  • 常见视频编码格式对比
  • GraphRAG 知识图谱核心升级:集成 langextract 与 Gemini ----实现高精度实体与关系抽取
  • 捡捡java——2、基础05
  • Redis不同场景下的注意事项