当前位置: 首页 > 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.xdnf.cn/news/1386037.html

相关文章:

  • 深入解析Qt节点编辑器框架:高级特性与性能优化(四)
  • Kafka 副本同步异常与 ISR 收缩故障排查实录
  • 自动化Reddit 效率已ready
  • Linux(0)|梦开始的地方:xshell下载
  • 表达式语言EL
  • Java全栈工程师的实战面试:从基础到微服务架构
  • More Effective C++ 条款16:牢记80-20准则(Remember the 80-20 Rule)
  • 对于01背包的一些疑问
  • 第十三章项目资源管理--13.8 控制资源
  • 数学七夕花礼(MATLAB版)
  • 嵌入式学习日志————MPU6050简介
  • 【微信小程序】微信小程序基于双token的API请求封装与无感刷新实现方案
  • Unity、Unreal Engine与Godot中纹理元数据管理的比较分析
  • uni-app + Vue3 开发H5 页面播放海康ws(Websocket协议)的视频流
  • 腾讯位置商业授权微信小程序距离计算
  • 有鹿机器人:用智能清洁重塑多行业工作方式
  • AI推介-大语言模型LLMs论文速览(arXiv方向):2025.04.25-2025.04.30
  • ADO 操作access
  • 选华为实验工具:eNSP Pro 和社区在线实验哪个更适合?
  • 《华为战略管理法:DSTE 实战体系》读书笔记
  • 第二章 Vue + Three.js 实现鼠标拖拽旋转 3D 立方体交互实践
  • FDTD_mie散射_项目研究(1)
  • DirectX修复工具官方中文增强版下载!下载安装教程(附安装包),0xc000007b错误解决办法
  • 【python+requests】接口自动化测试:三步用代理工具快速定位问题
  • Linux 软件编程(十四)网络编程:数据存储与 SQLite 数据库
  • 【C++】类与对象(上)
  • Python- Visual Studio Code配置Anaconda
  • Vue 实战:优雅实现无限层级评论区,支持“显示全部”分页递归加载
  • simd笔记
  • 使用生成对抗网络增强网络入侵检测性能