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,aspose导入 jar包 和 java编写基础代码下载使用 aspose-words jar包导入 aspose jar 包 使用 maven导入java代码编写 2,if判断 是否显示2,显示指定值3,循环显示List 集合列表 使用 fore…...
CSS动画(炫酷表单)
1.整体效果 https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa6yORMSqiaEKgpwibBgfcTQZNV0pI3M8t8HQm5XliaicSO42eBiboEUC3jxQOL1bRe0xlsd8bv04xXoKwg/640?wx_fmtgif&fromappmsg&wxfrom13 表单,也需要具有吸引力和实用性。HTML源码酷炫表单不仅能够提供给用户…...
Stream
Stream 也叫Stream流,是Jdk8开始新增的一套API (java.util.stream.*),可以用于操作集合或者数组的数据。 优势: Stream流大量的结合了Lambda的语法风格来编程,提供了一种更加强大,更加简单的方式操作集合或者数组中的…...
鸿蒙轻内核A核源码分析系列五 虚实映射(5)虚实映射解除
虚实映射解除函数LOS_ArchMmuUnmap解除进程空间虚拟地址区间与物理地址区间的映射关系,其中参数包含MMU结构体、解除映射的虚拟地址和解除映射的数量count,数量的单位是内存页数。 ⑴处函数OsGetPte1用于获取指定虚拟地址对应的L1页表项数据。⑵处计算需要解除的无效…...
编程初学者用什么软件电脑:全方位指南及深度解析
编程初学者用什么软件电脑:全方位指南及深度解析 在数字化浪潮席卷而来的今天,编程技能逐渐成为了一项必备的基本素养。对于初学者来说,选择一款合适的编程软件电脑至关重要。本文将从四个方面、五个方面、六个方面和七个方面,深…...
代理IP池功能组件
1.IP池管理器:用于管理IP池,包括IP地址的添加、删除、查询和更新等操作。 2.代理IP获取器:用于从外部资源中获取代理IP,例如从公开代理IP网站上爬取代理IP、从代理服务商订购代理IP等。 3.IP质量检测器:用于检测代理…...
Sqlite3入门和c/c++下使用
1. SQLite3基本介绍 1.1 数据库的数据类型 1.2 基本语法 1. 创建数据表格 create table 表名(字段名 数据类型, 字段名 数据类型); 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,exe闪退3.1 s…...
x64-linux下在vscode使用vcpkg
1.使用vscode远程连接上对应的linux ,或者直接在图形化界面上使用。 2.安装vcpkg 插件,然后打开插件设置。 注意:defalut和host的主机一定和你自己的主机一致,且必须符合vcpkg三元组格式,其中你可以选择工作台的设置&a…...
运营商二要素核验-手机号机主姓名核验接口-运营商二要素核验接口
通过电信运营商验证手机号码与姓名是否一致。广泛用于实名注册、风控审核等场景,如电商、游戏、直播、金融等需要用户实名认证的场景。支持携号转网核验。 更新周期:联通T1 电信T3 移动T3~5 均为工作日 接口地址: https://www.wapi.cn/api_de…...
C++设计模式-生产者消费者模式
运行在VS2022,x86,Debug下。 32. 生产者消费者模式 解耦生产者和消费者之间的关系,即生产者和消费者只依赖缓冲区,而不相互依赖。应用:多线程并发编程,可以解决生产者和消费者之间的同步问题。实现 生产者…...
VSTO Word.net 如何在另外的工程内添加CustomTaskPane
其他工程肯定是不能直接添加CustomTaskPane面板的,但我们可以在ThisAddIn 中先把对应的panel给新建出来再进行隐藏。步骤如下: 1.在另外工程中定义public static CustomTaskPane currMainForm;把需要隐藏的界面赋值给currMainForm; 2.在另外…...
ROS——自定义话题消息和使用方法
定义Person话题 定义Person发布者 /*** 该例程将发布/person_info话题,自定义消息类型: test_topic::Person*/#include <ros/ros.h> #include <test_topic/Person.h> //包含的头文件,ros相关的头文件,及自定义头文件…...
包装对象类型又是啥啊。。。
包装对象类型 目录 包装对象类型 目录包装对象的概念包装对象类型和字面量类型Objectobject 包装对象的概念 JavaScript 的8种类型之中,undefined和null其实是两个特殊值,object属于复合类型,剩下的五种属于原始类型(primiti…...
服务编排如何选?这几款可视化服务编排引擎,开发团队赶紧收藏
最近看到几款不错的服务编排的产品,先给大家上图看看 扣子: jvs-logic: node-red: jvs-rules: 上述几个产品是最近看到的 几个比较有特点的服务编排的系统。 接下来我对API详细分解下,说明下优点与挑战 服…...
web前端语言框架:探索现代前端开发的核心架构
web前端语言框架:探索现代前端开发的核心架构 在快速发展的web开发领域,前端语言框架的选择对于项目的成功至关重要。它们不仅影响着开发效率,更直接关系到用户体验与网站性能。本文将从四个方面、五个方面、六个方面和七个方面,…...
基于flask的网站如何使用https加密通信
文章目录 内容简介网站目录示例生成SSL证书单独使用Flask使用WSGI服务器Nginx反向代理参考资料 内容简介 HTTPS 是一种至关重要的网络安全协议,它通过在 HTTP 协议之上添加 SSL/TLS 层来确保数据传输的安全性和完整性。这有助于防止数据在客户端和服务器之间传输时…...
软件测试面试题(应届生)
设计员工管理系统的测试用例时,需要考虑系统的各种功能和可能的使用场景,以确保系统的稳定性和准确性。以下是一些设计测试用例的基本步骤和策略: 一、明确测试目标 首先,需要明确测试的目标,例如确保员工信息的准确…...
使用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(内核、用户、进程)句柄数设置问题 shell修复 Pre Linux - 深入理解/proc虚拟文件系统:从基础到高级 (内核、用户、进程)句柄数设置 在Linux系统中,进程打开的最大句柄数可以通过多种方式配置…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...
AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...
基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究
摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...
