java web 导出word_JavaWeb Project使用FreeMaker导出Word文件

基本思路

1. 导入freemaker2.3.jar

2. 需要导出的Word模板

3. 在Word内填入值的标签

4. Word另存为xml(2003版本)

5. Coding

6. 导出Word文件

具体操作

1. Intellij IDEA > FIle > Project Structure > Libraries > "+"(左下角) > OK

f70ba1c61c3a

导入Freemaker Jar

2. Word模板有需求方提供

f70ba1c61c3a

基本模板

3. 在Word内填入需要值的标签

f70ba1c61c3a

填入对应标签

4. 另存为Word 2003 XML文档

f70ba1c61c3a

转出XML

5. 放进项目文件

6. 实现代码

'''

/**

* 获取导出任务书所需要的数据,并封装进dataMap

* @param studWorkProcess

* @param studWork1

* @param request

* @param response

* @return

*/

@RequiresPermissions("studwork:studwork1:studWork1:edit")

@RequestMapping(value = {"exportStudWork1"})

public StringexportStudWork1(StudWorkProcess studWorkProcess, StudWork1 studWork1, HttpServletRequest request, HttpServletResponse response) {

studWork1.setId(studWorkProcess.getId());

List studWork1List =studWork1Service.findList(studWork1);

if(studWork1List.size() ==1) {

Map dataMap =new HashMap();

// set this yaer

dataMap.put("year","2020");

User user =systemService.getUser(studWork1List.get(0).getStudId());

// get student user obj

dataMap.put("user",user);

dataMap.put("studWork1", studWork1List.get(0));

User currentStudent =systemService.getUser(studWork1.getStudId());

// file name

String fileName = currentStudent.getNo() +"_" + currentStudent.getName() +"_" +"任务书.doc";

try {

download(response, fileName, dataMap);

}catch (Exception e) {

e.printStackTrace();

}

}

return "modules/studwork/studwork1/studWork1List";

}

/**

* 导出任务书doc文件

* @param response

* @param newWordName

* @param dataMap

*/

public void download(HttpServletResponse response, String newWordName, Map dataMap) {

Configuration configuration =new Configuration();

// set encoding

configuration.setDefaultEncoding("utf-8");

String path =this.getClass().getResource("/").getPath();

StudWork1 studWork1 =new StudWork1();

// get template path

configuration.setClassForTemplateLoading(studWork1.getClass(), "/");

Template t =null;

try {

// word1.xml is a template(generate by file 01)

User user = UserUtils.getUser();

if(user.getIsTeacher() ==null || user.getIsTeacher() ==""){

t = configuration.getTemplate("word1.xml","utf-8");

}else{

t = configuration.getTemplate("word1_stamp.xml","utf-8");

}

}catch (Exception e) {

e.printStackTrace();

}

File outFile =null;

Writer out =null;

String filename = newWordName;

try {

outFile =new File(newWordName);

out =new BufferedWriter(new OutputStreamWriter(

new FileOutputStream(outFile),"utf-8"));

}catch (Exception e1) {

e1.printStackTrace();

}

try {

t.process(dataMap, out);

}catch (Exception e) {

e.printStackTrace();

}

try {

out.flush();

out.close();

}catch (IOException e) {

e.printStackTrace();

}

InputStream fis =null;

OutputStream toClient =null;

try {

fis =new BufferedInputStream(new FileInputStream(outFile));

byte[] buffer =new byte[fis.available()];

fis.read(buffer);

fis.close();

// clear response

response.reset();

// set header and translate encoding

filename = URLEncoder.encode(filename, "utf-8");

response.addHeader("Content-Disposition", "attachment;filename=" + filename+"");

response.addHeader("Content-Length", "" + outFile.length());

toClient =new BufferedOutputStream(response.getOutputStream());

response.setContentType("application/octet-stream");

toClient.write(buffer);

toClient.flush();

}catch (Exception e) {

e.printStackTrace();

}finally{

try {

if(fis!=null){

fis.close();

}

}catch (IOException e) {

e.printStackTrace();

}

try {

if(toClient!=null){

toClient.close();

}

}catch (Exception e) {

e.printStackTrace();

}

}

}

'''

采坑

1. Word导出格式一定要是2003版本的XML,不然生成的文件无法正常打开

2. Word另存为过程中,会将部分标签分开,需要手动调整

'''

${

studwork.thesisTitle

}

'''

调整后

'''

${studwork.thesisTitle}

'''

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245913.shtml

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

相关文章

sql 除以_使用SQL分析游戏运营情况

数据来源:http://www.dcjingsai.com/common/cmpt/%E6%B8%B8%E6%88%8F%E7%8E%A9%E5%AE%B6%E4%BB%98%E8%B4%B9%E9%87%91%E9%A2%9D%E9%A2%84%E6%B5%8B%E5%A4%A7%E8%B5%9B_%E7%AB%9E%E8%B5%9B%E4%BF%A1%E6%81%AF.html游戏介绍:《野蛮时代》是一款SLG游戏。在…

好看的php验证码,一漂亮的PHP图片验证码实例

一、显示效果二、代码如下代码如下:/** Author fy*/$imgwidth 100; //图片宽度$imgheight 40; //图片高度$codelen 4; //验证码长度$fontsize 20; //字体大小$charset abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789;$font Fonts/segoesc.ttf;$imimagecreatetruecolor…

检测到目标服务器启用了trace方法_深度学习检测小目标常用方法

引言在深度学习目标检测中,特别是人脸检测中,小目标、小人脸的检测由于分辨率低,图片模糊,信息少,噪音多,所以一直是一个实际且常见的困难问题。不过在这几年的发展中,也涌现了一些提高小目标检…

php自定义能过滤器,过滤器与自定义过滤器的介绍

angularjs中的过滤器为了实现对于表达式结果的筛选、过滤、格式化,达到更好的表现效果。过滤器的语法:支持多重过滤和传参{{expression | 过滤器名称 : ‘参数’ | 过滤器名称2:‘参数’ }}方式:| -》 管道常用的过滤器&#xff1…

大数据项目开发案例_大数据分析技术——项目案例1(猫眼电影数据分析上)...

壹猫眼Top100电影数据分析概述从这一节开始,我们就综合利用已学到的一些分析技术来尝试做一些比较复杂的实际数据分析项目。在这些实际的项目案例中,我们将会看到一个完整的数据分析流程:数据清理——数据分析——数据可视化(即数据解释)。最…

matlab广泛用于什么,目前,Matlab已成为世界上最受欢迎的科学和工程计算软件工具....

目前,Matlab已成为世界上最受欢迎的用于科学和工程计算的软件工具. 它是一种新型的计算机高级编程语言,具有广阔的应用前景. 有人将其称为“第四代”计算机语言. 就影响而言,仍然没有其他计算软件可与Matlab匹敌. Matlab简介Matlab于1984年发…

必须使用列别名命名此表达式_lambda表达式

一般的,如果一个类定义了函数调用运算符,则我们可以像使用函数一样使用这个类,例如:一个类A定义了函数调用运算符,我们就可以使用A()这样的形式调用对象,实际上调用了类的调用运算符函数。如果一个类定义了…

mysql数据库出现幻读,MySQL 幻读怎样处理?_数据库

MySQL 幻读怎样处理?1、MVCC快照,将历史数据存一份快照,在其事件增添与删除数据时,保证当前事件来说是不可见的;多半数据库都完成了多版本并发掌握,而且都是靠保留数据快照来完成的。以 InnoDB 为例&#x…

搜索引擎提交软件_增加SEO超级外链须知的高权重网站目录提交方法

做SEO的朋友对开放式网站目录应该不陌生吧。网站目录就是按一定的分类方法把收录的网站进行分类归档。网站目录本身是不主动抓取网页的,一般只记录网站的名称,网址和有限的说明文字。和网址站、导航站、酷站网址大全等如同一辙。一般高质量的聚合目录网站…

把模糊MATLAB波形的图变清晰,什么修图软件能把模糊图片清晰化?

图片和内容的契合度再高,配色再完美,如果图片不清晰,那才真的是一图毁所有。针对这种情况,我也为大家找来两个非常实用的工具。第一个工具,SmartDeblur。主要针对原图分辨率不高的情况。这个软件目前支持三种模式&…

遗传算法在交通路线matlab,Matlab遗传算法公交车路线优化

Matlab遗传算法公交车路线优化Matlab遗传算法公交车路线优化Matlab遗传算法公交车路线优化1 模型介绍2模型分析2.1整体设计2.2要点分析3结果展示1 模型介绍以乘客出行总时间最小为目标函数,求出其最小值即为最终接驳优化方案。模型约束条件在算法过程中可能会产生不…

mysql 连续签到天数_新版签到活动明天上线,福利活动抢鲜看~

明天游戏中心app旧版福利签到活动马上就要结束啦,虽然很多的魅友反馈说积分签到结束的太早,积分不够换5折券,不过更早的开启新版签到才能更快的享受到更好的福利嘛~今晚0点新版签到活动即将上线,接下来就一起来看看新版的签到活动…

java中nio怎么实现聊天,JAVA-NIO实现聊天室详细代码说明

JAVA-NIO实现聊天室详细代码说明JAVA-NIO实现聊天室详细代码说明github源码:https://github.com/JolyouLu/JAVAIO.gitsrc\main\java\com\JolyouLu\nio\groupchat 文件夹下public class GroupChatServer {//定义属性private Selector selector;private ServerSocketC…

vscode 调试_如何使用VSCode调试JS?

更多精彩,请点击上方蓝字关注我们!序言做前端开发的朋友经常需要使用Visual Studio Code编辑代码,很多朋友就想在VSCode调试JS代码,下面我们就介绍下如何配置操作。一、环境准备首先安装好VSCode,准备好一个JS项目&…

基于matlab的信号合成与分解,基于matlab的信号合成与分解

基于matlab的信号合成与分解 - I - 摘 要 为了便于进行周期信号的分析与处理,常要把复杂的周期信号进行分解,即将周期 信号分解为正余弦等此类基本信号的线性组合,通过对这些基本信号单元在时域和频域 特性的分析来达到了解信号特性的目的。本…

基站位置查询系统_木牛导航网络基站服务免费了!——更便捷、更高效、更省心!...

布谷飞飞劝早耕,春锄扑扑趁初晴。千层石树通行路,一带水田放水声。《山行》-- 姚鼐(Photo by Quang Nguyen Vinh)农业生产作为人类最传统的产业自古以来都讲究及时耕种,即抢农时根据气候适宜而进行季节性生产随着科技的发展,农业生…

php cgi进程很多win2008,php cgi.exe 太多 在 windowserver2008 apache 这个怎么样限制下?...

php cgi.exe 太多 在 windowserver2008 apache 这个怎么样限制下?mip版 关注:61 答案:2 悬赏:70解决时间 2021-02-24 01:48已解决2021-02-23 09:13php cgi.exe 太多 在 windowserver2008 apache 这个怎么样限制下?最佳答案2021-02-23 09:57可以设置最…

wince怎么刷carplay_Carplay支持仪表/HUD显示 宝马为全球超750000辆车发布OTA升级

【太平洋汽车网 新车频道】日前,宝马官方宣布,将从10月19日起为全球超过750000辆汽车提供iDrive 7.0最新版本的最重要的一次OTA升级。据悉,这项升级将有多项新功能加入,并重点支持Apple Carplay将导航等信息显示在HUD抬头显示和全…

php 如何调用redis,php如何调用redis

一、windows下php连接redis1、下载phpredishttps://github.com/nicolasff/phpredis/downloads2、根据你php版本,选择安装vc库,可以通过phpinfo();查看3、安装php_redis.dll模块将下载下来的php_redis模块放到php安装目录下的/ext/中,并在php.…

分析以太网帧结构_传统以太网中的——中继器及集线器

1.1 Repeater 中继器中继器工作在以太网的第一层即物理层, 两端口设备,主要功能是放大信号,从而延长信号在同一网络上传输的长度。中继器的存在主要是解决解决电信号长距离传播过程中的衰减问题,以增加信号强度和传播距离。Figure…