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.pswp.cn/diannao/97362.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

变频器实习DAY40 调整测试零伺服PI LDO

目录变频器实习DAY40一、工作内容1.1 调整测试零伺服PI二、学习内容2.1 LDOLDO的核心工作原理——“采样-比较-调整”闭环控制LDO的关键参数——选型核心依据LDO与其他稳压器的选型对比附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^)变频器实习DAY40 一、工作内容 1.1 调整…

【半导体制造流程概述】

半导体制造流程概述 半导体制造是一个高度复杂且精密的过程&#xff0c;涉及多个关键步骤&#xff0c;通常分为以下几个主要阶段&#xff1a;设计、晶圆制备、光刻、刻蚀、掺杂、薄膜沉积、互连和封装测试。 文章目录半导体制造流程概述晶圆制备光刻刻蚀掺杂薄膜沉积互连封装测…

为什么大模型需要文档预处理:从数据到智能的关键一步

在人工智能&#xff0c;尤其是大语言模型&#xff08;LLM, Large Language Models&#xff09;的应用落地过程中&#xff0c;数据质量与处理流程的重要性正逐渐被各行各业所认识。无论是企业内部构建知识库、自动化文档审核&#xff0c;还是面向用户提供智能问答服务&#xff0…

50.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--二期功能规划

啰嗦了这么多文章&#xff0c;我们终于进入到了二期功能的开发。这篇文章我们先来规划一下二期要做的功能&#xff0c;在一期功能中&#xff0c;我们完成了基础的记账功能&#xff0c;但是作为一个记账软件&#xff0c;仅有这些功能是远远不够的。我们需要更多的功能来满足用户…

Oracle下载安装(学习版)

1. 下载&#xff08;学习版&#xff09; 网址&#xff1a;软件下载 | Oracle 中国 2. 安装 解压缩 双击可执行文件 下一步 选同意&#xff0c;下一步 下一步 设置密码&#xff08;自己记住&#xff09; 开始安装 测试安装是否成功

`basic_filebuf`、`basic_ifstream`、`basic_ofstream`和 `basic_fstream`。

C 文件 I/O 模板类深度解析 文章目录C 文件 I/O 模板类深度解析1. basic_filebuf 深度解析1.1 类模板定义详解1.2 关键成员变量1.3 核心成员函数实现原理1.3.1 open() 函数实现1.3.2 overflow() 函数实现1.4 完整示例&#xff1a;自定义缓冲策略2. basic_ifstream 深度解析2.1 …

计算机毕设 java 阿歹果园养鸡场管理系统 基于 SSM 框架的果园养鸡场全流程管理系统设计与实现 Java+MySQL 的养殖生产与进销存一体化平台开发

计算机毕设 java 阿歹果园养鸡场管理系统ky7dc9 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09;本套源码可以先看具体功能演示视频领取&#xff0c;文末有联xi 可分享 随着农业养殖规模化发展&#xff0c;传统果园养鸡场依赖人工记录、纸质台账的管理模式&#xf…

生成式BI工具(WrenAI)

生成式 BI 工具支持自然语言查询数据库&#xff0c;自动生成 SQL 与可视化图表&#xff0c;被金融分析师和数据科学家广泛采用。 WrenAI是由Canner团队开发的开源生成式BI&#xff08;GenBI&#xff09;智能体&#xff0c;致力于通过自然语言交互实现数据库查询、可视化生成和洞…

论文Review 3DGS PGSR | TVCG2024 ZJU-3DV | 几何约束的3DGS表面重建

基本信息 题目&#xff1a;PGSR: Planar-based Gaussian Splatting for Efficient and High-Fidelity Surface Reconstruction 来源&#xff1a;TVCG2024 学校&#xff1a;ZJU-3DV 是否开源&#xff1a;https://github.com/zju3dv/PGSR 摘要&#xff1a;3DGS表面重建 最近…

最新After Effects2025下载安装(含安装包)AE 2025 保姆级下载一键安装图文教程

文章目录一、After Effects 2025下载二、After Effects 2025安装教程三、核心功能升级详解四、系统配置与兼容性说明一、After Effects 2025下载 ①夸克网盘下载链接&#xff1a;https://pan.quark.cn/s/a06e6200e64c 二、After Effects 2025安装教程 1.解压安装包:找到下载…

【网络安全领域】边界安全是什么?目前的发展及应用场景

在网络安全领域&#xff0c;边界安全&#xff08;Perimeter Security&#xff09; 是指围绕企业或组织网络的 “物理与逻辑边界” 构建的防护体系&#xff0c;核心目标是阻止未授权访问从外部网络&#xff08;如互联网、合作方网络&#xff09;侵入内部可信网络&#xff0c;同时…

虚拟机快照对内存与磁盘空间的影响

核心概念&#xff1a;快照是什么&#xff1f;虚拟机快照捕获的是在某个特定时间点上虚拟机的完整状态。这包括&#xff1a;磁盘状态&#xff1a;虚拟磁盘的数据。内存状态&#xff1a;当时虚拟机内存中的所有内容&#xff08;如果选择&#xff09;。配置状态&#xff1a;虚拟机…

免费开源的 Gemini 2.5 Flash 图片生成器

免费开源的 Gemini 2.5 Flash 图片生成器&#xff1a;gemini-nano-banana 项目详解 在 AI 图片生成领域&#xff0c;大多数工具要么收费昂贵&#xff0c;要么需要复杂的配置。今天为大家介绍一个完全免费开源的解决方案——gemini-nano-banana&#xff0c;一个基于 Google Gemi…

介绍分布式事务之Seata

简介 Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式事务解决方案。 &#x1f680; 一、Seata 的四种主要模式 Seata 提供的分布式事…

安卓/ios按键精灵脚本开发工具:OpenCV.FindImgAll命令介绍

函数名称OpenCV.FindImgAll 找图返回全部结果函数功能使用OpenCV多尺度模板找图&#xff0c;返回全部结果与FindPic的区别&#xff1a;OpenCV找图&#xff1a;基于特征相似性的找图&#xff0c;允许一定几何形变或颜色差异&#xff0c;从而提高多分辨率容兼及抗干扰能力&#x…

Linux时间处理函数

gettimeofday 是 Linux 系统中一个用于获取当前时间的系统调用函数。它能够获取从 Unix 纪元&#xff08;1970年1月1日 00:00:00 UTC&#xff09;到当前时刻的秒数和微秒数。函数原型#include <sys/time.h>int gettimeofday(struct timeval *tv, struct timezone *tz);参…

C++ 面试高频考点 力扣 34. 在排序数组中查找元素的第一个和最后一个位置 二分查找左右端点 题解 每日一题

文章目录二分查找进阶&#xff0c;精准定位左右边界题目描述先踩坑&#xff1a;朴素二分为什么搞不定重复元素&#xff1f;第一步&#xff1a;找左边界——如何定位“第一个target”&#xff1f;第二步&#xff1a;找右边界——如何定位“最后一个target”&#xff1f;完整代码…

在word以及latex中引用zotero中的参考文献

背景 如何在word以及latex中引用zotero中的参考文献 历史参考 恢复Zotero软件内的误删条目数据/文献-CSDN博客使用zotero保存 CNKI知网文章时发生错误。改为尝试用 Save as Webpage 保存。-CSDN博客 word 在word中引用zotero中的参考文献 打开word&#xff0c;点击引用 经典…

docker 部署Skywalking

创建网络 docker network create skywalking-network docker compose 安装SkyWalking docker-compose.yaml 文件 version: "3" services:# SkyWalking OAP server with Elasticsearch storageskywalking-oap:image: apache/skywalking-oap-server:8.9.0container…

动态UI的秘诀:React中的条件渲染

动态UI的秘诀&#xff1a;React中的条件渲染 作者&#xff1a;码力无边各位React探险家&#xff0c;欢迎回到我们的《React奇妙之旅》&#xff01;我是你们的老朋友码力无边。在之前的旅程中&#xff0c;我们已经学会了如何创建组件、传递数据&#xff08;Props&#xff09;、管…