【Java用法】使用Java导出word文档的解决方案(适用于Windows电脑)
目录
实现方式一、通过原生的POI
实现方式二、通过Hutool工具包
步骤1、添加pom依赖
步骤2、编写几行代码
步骤3、启动项目,大功告成
实现的效果
最近在做一个word导出功能,需求非常简单,只需要将内容导出到word文件里即可,对于word的格式并没有要求。功能不复杂,想快速实现这个功能,但是使用POI的话,比较麻烦。本文记录一下通过一个工具类即可实现简单的word导出的功能。
项目架构:Springboot + mybatis-plus + MySQL + Maven
实现方式一、通过原生的POI
通过原生的POI实现这个功能感觉有点大材小用,实现起来也比较复杂。可参考一篇写的比较好的博客:Apache POI使用详解。已经有其他人写的很好了,这里就不再赘述。
POI读写Excel功能强大、操作简单。但是POI操作时,一般只用它读取word文档,POI只能能够创建简单的word文档,相对而言POI操作时的功能太少。
实现方式二、通过Hutool工具包
如果以下内容看不懂,可参考Hutool工具包关于poi的介绍:Hutool工具包的使用方法
步骤1、添加pom依赖
<dependencies><!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>4.6.1</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><!--说明 hutool-4.x的poi-ooxml 版本需高于 3.17(别问我3.8版本为啥不行,
因为3.17 > 3.8 ) hutool-5.x的poi-ooxml 版本需高于 4.1.2 xercesImpl版本高于2.12.0--><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency></dependencies>
步骤2、编写几行代码
Hutool将POI中Word生成封装为Word07Writer
, 通过分段写出,实现word生成。
使用例子
Word07Writer writer = new Word07Writer();// 添加段落(标题)
writer.addText(new Font("方正小标宋简体", Font.PLAIN, 22), "我是第一部分", "我是第二部分");
// 添加段落(正文)
writer.addText(new Font("宋体", Font.PLAIN, 22), "我是正文第一部分", "我是正文第二部分");
// 写出到文件
writer.flush(FileUtil.file("e:/wordWrite.docx"));
// 关闭
writer.close();
步骤3、启动项目,大功告成
完成前两步即可导出word文档。
********************************************************************************************************************************************************************************************************************************************************************************************************************
附:以下是我的功能具体实现(步骤1省略)
public RestResponse word(Integer examId) {Word07Writer word07Writer = new Word07Writer();// 1、得到当前试卷信息Exam exam = this.getById(examId);// 1.1 保存试卷名称word07Writer.addText(new Font("方正小标宋简体", Font.PLAIN, 22), "试卷名称:" + exam.getTitle());// 2、得到当前试卷的题目列表List<Integer> quIds = quExamService.listByExamId(examId);// 题目列表用int count = 1;for (Integer quId : quIds) {// 3、得到当前题目信息Question question = questionMapper.selectById(quId);// 4、保存到文件中:题目 格式为( 题目2. 多选题测试(20分))word07Writer.addText(new Font("宋体", Font.PLAIN, 15),"题目" + (count++) + ". " + question.getContent() + "(" + (question.getQuScore()) + "分)");// 5、得到每个题目的选项列表List<QuAnswerDTO> quAnswerDTOList = quAnswerService.listByQu(quId);// 6、答案和解析StringBuilder answers = new StringBuilder();// 题目类型 1 单选题 2 多选题 3 判断题 4 简答题 5 填空题Integer quType = question.getQuType();for (QuAnswerDTO quAnswerDTO : quAnswerDTOList) {// 添加题目选项word07Writer.addText(new Font("宋体", Font.PLAIN, 10),quAnswerDTO.getAbc() + "、" + quAnswerDTO.getContent());// 得到题目选项的答案 1 正确答案,0 错误答案Integer isRight = quAnswerDTO.getIsRight();String dtoAbc = quAnswerDTO.getAbc();// 得到正确答案this.getAnswers(quType, isRight, answers, dtoAbc);}// 7、得到答案并保存到文件中word07Writer.addText(new Font("宋体", Font.PLAIN, 10), "答案:" + answers);// 8、得到题目整体解析String analysis = question.getAnalysis();word07Writer.addText(new Font("宋体", Font.PLAIN, 10),"解析:" + (Objects.isNull(analysis) ? "暂无解析" : analysis));}// 9、写出到文件(试卷名称.docx)word07Writer.flush(FileUtil.file("G:/" + Math.round(Math.random() * 100) + exam.getTitle() + ".docx"));// 10、关闭word07Writer.close();return RestResponse.ok();}/*** 得到答案** @param quType 题目类型 1 单选题 2 多选题 3 判断题 4 简答题 5 填空题* @param isRight 是否为正确答案 1 正确答案,0 错误答案* @param answers 得到的答案* @param dtoAbc 选项ABC*/private void getAnswers(Integer quType, Integer isRight, StringBuilder answers, String dtoAbc) {if (quType == Constants.QU_TYPE_SINGLE && isRight == Constants.NUMBER_ONE) {answers.append(dtoAbc);}if (quType == Constants.QU_TYPE_MULTI && isRight == Constants.NUMBER_ONE) {answers.append(dtoAbc);}if (quType == Constants.QU_TYPE_JUDGE && isRight == Constants.NUMBER_ONE) {answers.append(dtoAbc);}if (quType == Constants.QU_TYPE_SHORT && isRight == Constants.NUMBER_ONE) {answers.append(dtoAbc);}if (quType == Constants.QU_TYPE_FILL && isRight == Constants.NUMBER_ONE) {answers.append(dtoAbc);}}
实现的效果
在本地电脑可以,但是项目部署到服务器,还是无法下载到本地电脑,如果想要从服务器上下载word文档,请参考另一篇文章:【Java用法】使用Java导出word文档的解决方案(适用于从服务器上下载到本地电脑)
完结!
【Java用法】使用Java导出word文档的解决方案(适用于Windows电脑)相关推荐
- 【Java用法】使用Java导出word文档的解决方案(适用于从服务器上下载到本地电脑)
本文目录 一.Controller 二.Service 接口类 三.ServiceImpl 实现类 四.Content-Type 类型与MIME Type类型对照表 最近在做一个word导出功能,需求 ...
- Java使用POI实现导出Word文档
POI官网链接:http://deepoove.com/poi-tl/(方便各位博友后期深入学习) 1.首先导入POM依赖包 <dependency><groupId>com. ...
- Java后端使用Freemarker导出word文档的各种细节
2019独角兽企业重金招聘Python工程师标准>>> 1.前言 最近在项目中,因客户要求,需要做一个导出成word的功能(比如月度报表等),技术选型也考虑过几种,比如easypoi ...
- Java 用Freemarker完美导出word文档(带图片)
第一步:制作word模板 第二步:格式转换,将word另存为xml 第三步:找到图片base64,删除base64替换成占位符${image},只修改图片的,其余的不用动 第四步:加入依赖 <d ...
- java 图片 word文档_【Java】用Freemarker完美导出word文档(带图片)
Java 用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...
- java freemarker word_Java 用Freemarker完美导出word文档(带图片)(示例代码)
Java 用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...
- 【day22】java导出word文档(包含导出图片)
1.[Java]使用freemarker模板技术导出word main方法测试 package com.havenliu.document;import java.io.UnsupportedEnco ...
- 【Java实现导出Word文档功能 XDocReport +FreeMarker】
Java实现导出Word文档功能(XDocReport +FreeMarker) 前言 在日常的开发工作中,我们时常会遇到导出Word文档报表的需求,比如公司的财务报表.医院的患者统计报表.电商平台的 ...
- java调用word模板文件_Java使用模板导出word文档
Java使用模板导出word文档 需要导入freemark的jar包 使用word模板,在需要填值的地方使用字符串代替,是因为word转换为xml文件时查找不到要填入内容的位置.尽量不要在写字符串的时 ...
最新文章
- OpenCV+python:色彩空间转换及色彩通道的分离和合并
- matlab设计长度为50的滤波器,实验5 基于Matlab的数字滤波器设计
- c语言sleep_编程代码:用C语言来实现下雪效果,这个冬天,雪花很美
- 百度云推送的简单集成
- 2016年下半年勒索软件数量翻倍
- 礼物gift(DP)
- vim可以用来编译python吗_Linux下编译Vim以支持python2.x
- 新鲜出炉!腾讯大数据分析的真实面经,这几个问题把我问懵了
- 大数据时代,CRM帮助企业进行升级转型
- SurfaceView 之满屏的代码雨效果
- log4j的配置文件的位置
- Arduino ISP下载接口
- 金融信息化及交易管理系统(股票交易系统APP)
- 苹果9L0-403测试对于被选入苹果认证支持专家(ACSP)10.6名称
- openstack学习笔记六 多节点部署之keystone
- java 中session能存什么不能存什么
- webpack打包图片资源问题
- 2021年中国电力行业境外电力项目签约额分析:实现签约项目536个 签约合同总金额440.6亿美元[图]
- 【《RISC-V “V“ Vector Extension Version 1.0》阅读笔记】
- 热电阻 热电偶 测量电路_热控宝典之热电偶、热电阻原理及常见故障处理
热门文章
- html js控制页面蒙版,javascript实现蒙版与禁止页面滚动
- map容器对象插入数据的4种方式讲解
- python英雄联盟登录程序,注册用户程序
- 量化交易学习4--Python自动画K线
- 毕业论文ppt的研究方法及过程计算机专业,计算机毕业论文答辩PPT(完整版)教程文件.ppt...
- Editplus 激活码
- 图像分割与视频分割方法
- 【热门主题:魔法少女奈叶动漫主题】
- Andorid之拍照及相册选取照片回显
- hive 十六进制转十进制_[转] Hive 内置函数