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

java 实现导出word 自定义word 使用aspose教程包含图片 for 循环 自定义参数等功能

java 实现导出word 主要有一下几个知识点

  • 1,aspose导入 jar包 和 java编写基础代码
    • 下载使用 aspose-words jar包
    • 导入 aspose jar 包 使用 maven导入
    • java代码编写
  • 2,if判断 是否显示
  • 2,显示指定值
  • 3,循环显示List 集合列表 使用 foreach
  • 4,显示图片 ,

1,aspose导入 jar包 和 java编写基础代码

下载使用 aspose-words jar包

我使用的是 aspose-words-23.3 版本的
之前版本的导出大量word内容容易报错 使用新版解决此问题

导入 aspose jar 包 使用 maven导入

mvn install:install-file -DgroupId=aspose-words -DartifactId=aspose-words -Dversion=23.3 -Dpackaging=jar -Dfile=G:\你的windows电脑的jar包路径\aspose-word\aspose-words-23.3-jdk16.jar

java代码编写

首选新建一个工具类方法

public class QualityConstants {/*** 质量检测 的督导事项id*/public static final int EVENTID = 12;/*** 数字0*/public static final int NUM_ZERO = 0;/*** 数字1*/public static final int NUM_ONE = 1;/*** 数字2*/public static final int NUM_TWO = 2;/*** 数字-1*/public static final int NUM_MINUS_1 = -1;/*** 字节大小512*/public static final int BYTE_512 = 512;/*** 500错误编码*/public static final int CODE_500 = 500;/*** 500错误提示信息 - 状态非法*/public static final String CODE_500_MSG_1 = "状态非法!";/*** 500错误提示信息 - 非督导用户不允许查看质量检测记录*/public static final String CODE_500_MSG_2 = "非督导用户不允许查看质量检测记录!";/*** 500错误提示信息 - 这条质量监测已经完成!无法修改*/public static final String CODE_500_MSG_3 = "这条质量监测已经完成!无法修改!";/*** 500错误提示信息 - 提交失败,材料上传不能为空*/public static final String CODE_500_MSG_4 = "提交失败,材料上传不能为空";/*** 500错误提示信息 - 提交失败,请稍后重试或联系管理员*/public static final String CODE_500_MSG_5 = "提交失败,请稍后重试或联系管理员!";/*** 500错误提示信息 - 提交失败,意见反馈不能为空*/public static final String CODE_500_MSG_6 = "提交失败,意见反馈不能为空!";/*** 405错误编码*/public static final int CODE_405 = 405;/*** 405错误提示信息 - 该信息只允许督导查看*/public static final String CODE_405_MSG_1 = "该信息只允许督导查看!";/*** 200成功编码*/public static final int CODE_200 = 200;/*** 200成功提示信息 - 该信息只允许督导查看*/public static final String CODE_200_MSG_1 = "提交成功!";/*** 错误提示信息 - 尚未选择记录*/public static final String DELETE_FAIRURE_MSG = "删除失败,尚未选择记录!";/*** 错误提示信息 - 尚未选择记录*/public static final String NO_RECORD_SELECTED = "尚未选择记录!";/*** 字符编码utf-8*/public static final String UTF_8 = "utf-8";/*** 默认pid*/public static final int PID = 0;/*** 默认层级*/public static final int DEFUALT_LAYER = 1;/*** 不适当最低得分*/public static final Integer MIN_SCORE = 1;/*** 优秀最高得分*/public static final Integer MAX_SCORE = 7;/*** map的hash初始值*/public static final int HASH_MAP_INIT_VALUE = 32;/*** 全园平均分*/public final static String WHOLE_AVERAGE = "全园平均分";/*** 查询失败*/public final static String QUERY_FAIRURE = "查询失败";/*** 操作成功*/public final static String SUCCESS_MSG = "操作成功!";/*** 操作失败*/public final static String FARIURE_MSG = "操作失败!";/*** 导出失败*/public final static String FARIURE_EXPORT = "导出失败!";/*** 请求头 - 文档*/public final static String CONTENT_TYPE_WORD = "application/msword";/*** 请求头 - 下载*/public final static String CONTENT_TYPE_DOWNLOAD = "application/x-download";/*** 请求头 - 二进制文件*/public final static String CONTENT_TYPE_STEAM = "application/octet-stream;charset=UTF-8";/*** 请求头*/public final static String USER_AGENT = "User-Agent";/*** 请求头*/public final static String CONTENT_TYPE = "Content-Type";/*** 连接*/public final static String CONNECTION = "Connection";/*** 关闭连接*/public final static String CLOSE = "close";/*** 连接*/public final static String ACCESS_CONTROL_ALLOW_ORIGIN = "Access-Control-Allow-Origin";/*** 连接*/public final static String CONTENT_DISPOSITION = "Content-Disposition";/*** 浏览器 - ie*/public final static String MSIE = "MSIE";/*** 浏览器 - Firefox*/public final static String FIREFOX = "Firefox";/*** 填写报告的step*/public final static String MODULE_STEP3_REPORT = "qualityreport";/*** 督导下园核实的材料*/public final static String MODULE_STEP1_MATERIAL = "qualitymetrail";/*** 数字3*/public final static int NUM_3 = 3;/*** 数字4*/public final static int NUM_4 = 4;/*** 数字5*/public final static int NUM_5 = 5;/*** 数字6*/public final static int NUM_6 = 6;/*** 数字7*/public final static int NUM_7 = 7;/*** 数字8*/public final static int NUM_8 = 8;/*** 数字9*/public final static int NUM_9 = 9;/*** 数字10*/public final static int NUM_10 = 10;/*** 数字11*/public final static int NUM_11 = 11;/*** 数字12*/public final static int NUM_12 = 12;/*** 数字13*/public final static int NUM_13 = 13;/*** 数字14*/public final static int NUM_14 = 14;/*** 数字15*/public final static int NUM_15 = 15;/*** 数字16*/public final static int NUM_16 = 16;/*** 数字17*/public final static int NUM_17 = 17;/*** 数字18*/public final static int NUM_18 = 18;/*** 数字19*/public final static int NUM_19 = 19;/*** 数字20*/public final static int NUM_20 = 20;/*** 格式化数字*/public final static String DECIMAL_Format = "######.00";}

以下为实现post导出 并且删除新生成的文件代码 需要借助工具类
传入map json的方式获取参数

@PostMapping("/Export")@ResponseBodypublic void ExportWord(@RequestBody Map<String, Object> json, HttpServletRequest request, HttpServletResponse response) throws Exception {String filePath = "/xxx/xxx/xx/要生成的临时word地址和名称.docx";String tempName = "/xxx/xxx/xx/你的word模版地址和名称.docx";com.aspose.words.Document doc = new com.aspose.words.Document(tempName);Map<String, Object> map = new HashMap<>();XXX  XX= new XXX();  //XXX   为你的 word要的数据的实体类 自己建 这个XXX 包含word所有需要的字段 图片 和循环体XX.setTitle(json.get("title").toString());  //标题
//        图片 base64  传入BufferedImage image = decodeBase64Image(json.get("image").toString()); //json格式传入的base64图片/**** 这里获取图片可以用路径的方式 不使用base64传进来*///BufferedImage image =  ImageIO.read(new FileInputStream("/home/123.png"));//BufferedImage bufferedImage = Utils.resizeBufferedImage(image, 100, 100, false);scivalword.setImg(image );setParams(doc, scivalword);doc.save(filePath);File file = new File(filePath);//world输出流操作InputStream fin = null;OutputStream out = null;try {fin = new FileInputStream(file);response.setCharacterEncoding(QualityConstants.UTF_8);response.setContentType(QualityConstants.CONTENT_TYPE_WORD);String filename = "demo";String agent = request.getHeader(QualityConstants.USER_AGENT);String filenameEncoder = "";// 根据不同的浏览器进行不同的判断if (agent.contains(QualityConstants.MSIE)) {// IE浏览器filenameEncoder = URLEncoder.encode(filename, QualityConstants.UTF_8);filenameEncoder = filenameEncoder.replace("+", " ");} else if (agent.contains(QualityConstants.FIREFOX)) {// 火狐浏览器BASE64Encoder base64Encoder = new BASE64Encoder();filenameEncoder = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes(StandardCharsets.UTF_8)) + "?=";} else {// 其它浏览器filenameEncoder = URLEncoder.encode(filename, QualityConstants.UTF_8);}response.setHeader(QualityConstants.ACCESS_CONTROL_ALLOW_ORIGIN, "*");//所有域都可以跨response.setHeader(QualityConstants.CONTENT_TYPE, QualityConstants.CONTENT_TYPE_STEAM);//二进制  流文件response.setHeader(QualityConstants.CONTENT_DISPOSITION, "attachment;filename=" + filenameEncoder + ".doc");//下载及其文件名response.setHeader(QualityConstants.CONNECTION, QualityConstants.CLOSE);//关闭请求头连接//设置文件在浏览器打开还是下载response.setContentType(QualityConstants.CONTENT_TYPE_DOWNLOAD);out = response.getOutputStream();byte[] buffer = new byte[QualityConstants.BYTE_512];int bytesToRead = QualityConstants.NUM_MINUS_1;// 通过循环将读入的Word文件的内容输出到浏览器中while ((bytesToRead = fin.read(buffer)) != QualityConstants.NUM_MINUS_1) {out.write(buffer, QualityConstants.NUM_ZERO, bytesToRead);}} catch (Exception e) {System.out.println("导出异常");} finally {try {//这里最后删除文件if (fin != null) {fin.close();}if (out != null) {out.flush();out.close();}if (file != null) {file.delete();}} catch (IOException e) {System.out.println("导出异常");}}}private static void setParams(Document doc, XXX vo) throws Exception { //XXX   为你的 word要的数据的实体类 自己建 这个XXX 包含word所有需要的字段 图片 和循环体ReportingEngine engines = new ReportingEngine();engines.getKnownTypes().add(xxxxx.class);//加入实体类类型 - 在foreach中用到 engines.buildReport(doc, new Object[]{vo}, new String[]{"st"});}//获取当前日期的年月日public static String getCurrentDate() {Date currentDate = new Date();SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年 MM月dd日");return dateFormat.format(currentDate);}
//把字符串类型的base64图片转换成IO流给buffere public static BufferedImage decodeBase64Image(String base64Image) {try {byte[] imageData = Base64.getDecoder().decode(base64Image);ByteArrayInputStream inputStream = new ByteArrayInputStream(imageData);return ImageIO.read(inputStream);} catch (Exception e) {e.printStackTrace();return null;}}

上面的代码中包含 图片 和实体类 for循环就是要在你的实体类里面插入一个 list 然后往这个list里面插入值以后
在这里插入图片描述
这里需要加入你要插入循环的实体类 给word里面获取实体类使用

在这里插入图片描述
比如我的实体类里面就有这些list 那么这些list里面的 bo就需要插入到上面的图片里面

上的代码中
XXX 为你的实体类自己创建 可以创建一个 默认的 比如

public class XXX{//注意 get set 方法一定要有private String title;private BufferedImage img;private List<entityBo> entitbo;
}

2,if判断 是否显示

这里用到word里面的if判断了
如图
在这里插入图片描述

<<if [st.getTitle() != null ]>> <<[st.getTitle()]>> <>
这里就判断了如果 传入的title不为空的情况下再进行显示

2,显示指定值

在这里插入图片描述
直接使用 就可以显示值

3,循环显示List 集合列表 使用 foreach

在这里插入图片描述

这里用到了 entitylist 进行了for循环 xxxx为
在这里插入图片描述
这里显示的实体类 必须在这里加入 否则会报错和无法使用
注意 开始 foreach就要有结束的 foreach 相对应的都是 类似于 xml格式的 word导出

注意 “String[]{“st”}” st表示在word里面的初始名称 调用关键字 比如你的实体类里面有title的字段 就用 st.getTitle() 就可以调用 如果是list就是 st.getList() 就可以调用

4,显示图片 ,

显示图片就是你的baset64复值给实体类传入以后 打开你的 word
在这里插入图片描述
点击文本框
插入到里面 在里面写入bo的img名称即可
如图
在这里插入图片描述
如果不想要外边框可以使用
在这里插入图片描述
属性里面的内容设置成无即可

附赠一个 word
在这里插入图片描述


相关文章:

java 实现导出word 自定义word 使用aspose教程包含图片 for 循环 自定义参数等功能

java 实现导出word 主要有一下几个知识点 1&#xff0c;aspose导入 jar包 和 java编写基础代码下载使用 aspose-words jar包导入 aspose jar 包 使用 maven导入java代码编写 2&#xff0c;if判断 是否显示2&#xff0c;显示指定值3&#xff0c;循环显示List 集合列表 使用 fore…...

CSS动画(炫酷表单)

1.整体效果 https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa6yORMSqiaEKgpwibBgfcTQZNV0pI3M8t8HQm5XliaicSO42eBiboEUC3jxQOL1bRe0xlsd8bv04xXoKwg/640?wx_fmtgif&fromappmsg&wxfrom13 表单&#xff0c;也需要具有吸引力和实用性。HTML源码酷炫表单不仅能够提供给用户…...

Stream

Stream 也叫Stream流&#xff0c;是Jdk8开始新增的一套API (java.util.stream.*)&#xff0c;可以用于操作集合或者数组的数据。 优势&#xff1a; Stream流大量的结合了Lambda的语法风格来编程&#xff0c;提供了一种更加强大&#xff0c;更加简单的方式操作集合或者数组中的…...

鸿蒙轻内核A核源码分析系列五 虚实映射(5)虚实映射解除

虚实映射解除函数LOS_ArchMmuUnmap解除进程空间虚拟地址区间与物理地址区间的映射关系&#xff0c;其中参数包含MMU结构体、解除映射的虚拟地址和解除映射的数量count,数量的单位是内存页数。 ⑴处函数OsGetPte1用于获取指定虚拟地址对应的L1页表项数据。⑵处计算需要解除的无效…...

编程初学者用什么软件电脑:全方位指南及深度解析

编程初学者用什么软件电脑&#xff1a;全方位指南及深度解析 在数字化浪潮席卷而来的今天&#xff0c;编程技能逐渐成为了一项必备的基本素养。对于初学者来说&#xff0c;选择一款合适的编程软件电脑至关重要。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;深…...

代理IP池功能组件

1.IP池管理器&#xff1a;用于管理IP池&#xff0c;包括IP地址的添加、删除、查询和更新等操作。 2.代理IP获取器&#xff1a;用于从外部资源中获取代理IP&#xff0c;例如从公开代理IP网站上爬取代理IP、从代理服务商订购代理IP等。 3.IP质量检测器&#xff1a;用于检测代理…...

Sqlite3入门和c/c++下使用

1. SQLite3基本介绍 1.1 数据库的数据类型 1.2 基本语法 1. 创建数据表格 create table 表名(字段名 数据类型&#xff0c; 字段名 数据类型)&#xff1b; create table student(id int, name varchar(256), address text, QQ char(32)); 2. 插入数据 insert into 表名 valu…...

pyinstaller打包exe多种失败原因解决方法

pyinstaller打包exe多种失败原因解决方法 目录 pyinstaller打包exe多种失败原因解决方法1、pyinstaller安装有问题1.1 安装pyinstaller1.2 采用anconda的环境启动 2、pyqt5与pyside6冲突2.1 打包生成.spec文件2.2 编辑spec文件 3、打包成功后打不开exe&#xff0c;exe闪退3.1 s…...

x64-linux下在vscode使用vcpkg

1.使用vscode远程连接上对应的linux &#xff0c;或者直接在图形化界面上使用。 2.安装vcpkg 插件&#xff0c;然后打开插件设置。 注意&#xff1a;defalut和host的主机一定和你自己的主机一致&#xff0c;且必须符合vcpkg三元组格式&#xff0c;其中你可以选择工作台的设置&a…...

运营商二要素核验-手机号机主姓名核验接口-运营商二要素核验接口

通过电信运营商验证手机号码与姓名是否一致。广泛用于实名注册、风控审核等场景&#xff0c;如电商、游戏、直播、金融等需要用户实名认证的场景。支持携号转网核验。 更新周期&#xff1a;联通T1 电信T3 移动T3~5 均为工作日 接口地址&#xff1a; https://www.wapi.cn/api_de…...

C++设计模式-生产者消费者模式

运行在VS2022&#xff0c;x86&#xff0c;Debug下。 32. 生产者消费者模式 解耦生产者和消费者之间的关系&#xff0c;即生产者和消费者只依赖缓冲区&#xff0c;而不相互依赖。应用&#xff1a;多线程并发编程&#xff0c;可以解决生产者和消费者之间的同步问题。实现 生产者…...

VSTO Word.net 如何在另外的工程内添加CustomTaskPane

其他工程肯定是不能直接添加CustomTaskPane面板的&#xff0c;但我们可以在ThisAddIn 中先把对应的panel给新建出来再进行隐藏。步骤如下&#xff1a; 1.在另外工程中定义public static CustomTaskPane currMainForm;把需要隐藏的界面赋值给currMainForm&#xff1b; 2.在另外…...

ROS——自定义话题消息和使用方法

定义Person话题 定义Person发布者 /*** 该例程将发布/person_info话题&#xff0c;自定义消息类型&#xff1a; test_topic::Person*/#include <ros/ros.h> #include <test_topic/Person.h> //包含的头文件&#xff0c;ros相关的头文件&#xff0c;及自定义头文件…...

包装对象类型又是啥啊。。。

包装对象类型 目录 包装对象类型 目录包装对象的概念包装对象类型和字面量类型Objectobject 包装对象的概念 JavaScript 的8种类型之中&#xff0c;undefined和null其实是两个特殊值&#xff0c;object属于复合类型&#xff0c;剩下的五种属于原始类型&#xff08;primiti…...

服务编排如何选?这几款可视化服务编排引擎,开发团队赶紧收藏

最近看到几款不错的服务编排的产品&#xff0c;先给大家上图看看 扣子&#xff1a; jvs-logic&#xff1a; node-red&#xff1a; jvs-rules&#xff1a; 上述几个产品是最近看到的 几个比较有特点的服务编排的系统。 接下来我对API详细分解下&#xff0c;说明下优点与挑战 服…...

web前端语言框架:探索现代前端开发的核心架构

web前端语言框架&#xff1a;探索现代前端开发的核心架构 在快速发展的web开发领域&#xff0c;前端语言框架的选择对于项目的成功至关重要。它们不仅影响着开发效率&#xff0c;更直接关系到用户体验与网站性能。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;…...

基于flask的网站如何使用https加密通信

文章目录 内容简介网站目录示例生成SSL证书单独使用Flask使用WSGI服务器Nginx反向代理参考资料 内容简介 HTTPS 是一种至关重要的网络安全协议&#xff0c;它通过在 HTTP 协议之上添加 SSL/TLS 层来确保数据传输的安全性和完整性。这有助于防止数据在客户端和服务器之间传输时…...

软件测试面试题(应届生)

设计员工管理系统的测试用例时&#xff0c;需要考虑系统的各种功能和可能的使用场景&#xff0c;以确保系统的稳定性和准确性。以下是一些设计测试用例的基本步骤和策略&#xff1a; 一、明确测试目标 首先&#xff0c;需要明确测试的目标&#xff0c;例如确保员工信息的准确…...

使用halo的jar方法搭建博客(数据库mysql

ssh连接远程主机 ➜ ~ ssh root 146.56.249.61 第一步.在CentOS 7上安装下载OpenJDK 17的tar.gz文件 wget https://download.java.net/java/GA/jdk17.0.1/2a2082e5a09d4267845be086888add4f/12/GPL/openjdk-17.0.1_linux-x64_bin.tar.gz解压 tar xvf openjdk-17.0.1_linux-…...

Linux - 复盘一次句柄数引发的故障

文章目录 Pre&#xff08;内核、用户、进程&#xff09;句柄数设置问题 shell修复 Pre Linux - 深入理解/proc虚拟文件系统&#xff1a;从基础到高级 &#xff08;内核、用户、进程&#xff09;句柄数设置 在Linux系统中&#xff0c;进程打开的最大句柄数可以通过多种方式配置…...

2024/06/13--代码随想录算法2/17| 62.不同路径、63. 不同路径 II、343. 整数拆分 (可跳过)、96.不同的二叉搜索树 (可跳过)

62.不同路径 力扣链接 动态规划5步曲 确定dp数组&#xff08;dp table&#xff09;以及下标的含义&#xff1a; dp[i][j] &#xff1a;表示从&#xff08;0 &#xff0c;0&#xff09;出发&#xff0c;到(i, j) 有dp[i][j]条不同的路径。确定递推公式&#xff0c;dp[i][j] d…...

Android低代码开发 - 直接创建一个下拉刷新列表界面

看了我Android低代码开发 - 让IDE帮你写代码这篇文章的小伙伴&#xff0c;大概都对Dora全家桶开发框架有基本的认识了吧。本篇文章将会讲解如何使用dora-studio-plugin快捷创建一个下拉刷新列表界面。 效果演示 这样直接通过图形界面的方式就创建好了下拉刷新上拉加载空态界面…...

23.Dropout

在深度学习的训练过程中&#xff0c;过拟合是一个常见的问题。为了解决这个问题&#xff0c;研究者们提出了多种正则化技术&#xff0c;其中Dropout技术因其简单而有效的特点&#xff0c;得到了广泛的应用。本文将对Dropout技术的工作原理、主要优点、潜在缺点以及应用场景进行…...

电脑撤回的快捷键是什么?

下面给大家介绍了各种办公应用的撤回以及反向撤回快捷键介绍&#xff0c;在ps、excel中都是可以使用的。 撤回键是ctrl加什么 1、撤销的快捷键是“CtrlZ”&#xff0c;用于取消上一步操作&#xff0c;对与在电脑系统上或软件内的操作均适用。重复按下可以取消多步操作。 2、而…...

每日一题——Python实现PAT甲级1116 Come on! Let‘s C(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码点评 时间复杂度分析 空间复杂度分析 总结 我要更强 优化思路 优化…...

spring-data-mongodb版本兼容问题

spring-data-mongodb与mongodb驱动有兼容性问题&#xff0c;不匹配会报NoSuchMethod异常&#xff0c;mongodb的java驱动包在4.0之后由mongodb-java-driver更名为mongodb-driver-sync。 spring-data-mongodb包依赖中有mongodb-driver-core&#xff0c;但缺诸如MongoCollection等…...

Java的核心类库

引言 在Java编程中&#xff0c;熟练掌握常用类与对象操作是开发的基础。Java的核心类库提供了丰富的功能&#xff0c;可以帮助开发者高效地处理各种编程任务。本文将详细介绍Java字符串操作、集合框架、日期与时间处理等内容&#xff0c;并通过图表和表格进行总结与示范。 字符…...

NSS题目练习9

[极客大挑战 2020]welcome 界面打开后一片空白&#xff0c;查看题目描述&#xff0c;翻译过来是 1.除了GET请求方法&#xff0c;还有一种常见的请求方法… 2.学习一些关于sha1和array的知识。 3.更仔细地检查phpinfo&#xff0c;你会发现标志在哪里。 补充&#xff1a; sh…...

JS 【算法】二分查找

使用场景 在有序数组中查找目标元素 const arr [1, 2, 3, 4, 5, 6, 7, 8, 9] const target 2 console.log(binarySearch1(arr, target)) console.log(binarySearch2(arr, target))循环实现 function binarySearch1(arr, target) {const length arr.lengthif (length 0) re…...

前端工程化工具系列(十四)—— Webpack(v5.91.0):应用模块打包器与构建工具

Webpack 是用于现代 JavaScript 应用程序的静态模块打包器。 当 webpack 处理应用程序时&#xff0c;它会在内部构建一个依赖关系图&#xff0c;该图映射项目所需的每个模块最终会生成一个或多个包。 1 概念 1.1 modules Webpack 中&#xff0c;无论是 JS 、CSS 还是图片等&…...