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
导入Freemaker Jar
2. Word模板有需求方提供
基本模板
3. 在Word内填入需要值的标签
填入对应标签
4. 另存为Word 2003 XML文档
转出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}
'''
java web 导出word_JavaWeb Project使用FreeMaker导出Word文件相关推荐
- Java使用 poi,pageOffice两种工具进行 word文件合并
使用poi,pageOffice合并word操作.主要区别在于 poi可以进行后台操作,通过各种各样APi接口,直接进行文件io读写操作,,可用于后台操作,pageoffice需要前端预览后保存(根据 ...
- Java项目中使用PageOffice实现预览Word文件
第一步:下载pageOffice插件 下载地址:http://www.zhuozhengsoft.com/dowm/ 我使用的是PageOffice4.5 for JAVA,根据需要下载 第二步: ...
- java web移植 遇到Project facet Java version 1.7 is not supported
2019独角兽企业重金招聘Python工程师标准>>> 在移植eclipse项目时,如果遇到 "Project facet Java version 1.7 is not ...
- java freemarker 图片_java通过freemarker导出包含富文本图片的word文档
废话不多说,进入正题! 本文重点在于:对富文本图片的导出(基础的freemarker+word模板导出这里不做详细解说哈) (ps:大神的东西太深奥~~懵逼了 一周才搞定,为了方便后来在更加简单,清晰 ...
- idea启动Java web项目
idea启动Java web项目 导入Java web项目 进入project structure中 1.按F4可进入project structure中 2.设置项目的jdk 3.在modules中 ...
- JAVA WEB开发环境搭建教程
一.下载安装JDK,配置好环境变量.(例如我JDK安装的目录为:C:\Program Files (x86)\Java\jdk1.6.0_10 ) 点击我的电脑-属性-系统设置(高级系统设置) ...
- 【Apache POI】Java Web根据模板导出word文件
最近工作中遇到一个需求:根据word模板文档导出word文件. 查阅了一些资料,发现Apache POI可以实现文档读写的功能,于是就研究了一下,总结如下: Apache-POI在线Javadoc:h ...
- Java web中不同浏览器间导出Excel文件名称乱码问题解决方案
Java web中不同浏览器间导出Excel文件名称乱码问题解决方案 参考文章: (1)Java web中不同浏览器间导出Excel文件名称乱码问题解决方案 (2)https://www.cnblog ...
- Java web/springboot上传word/doc/docx文档(含图片)与HTML富文本导入/导出互相转换解析!附项目源码
测试效果 先看下效果 文档内容如下: 上传 上传docx文档 查看解析内容 <html><head><style>p{margin-top:0pt;margin-b ...
最新文章
- 微信小程序之购物车功能
- 文件加解密,文件操作
- QuerySyntax(查询语法)
- 本周ASP.NET英文技术文章推荐[03/25 - 03/31]
- ~~筛法求欧拉函数(附模板题)
- java 正则表达式提取字符串
- model.evaluate 输出出一大串 ======================
- 基于SSM的旅游管理系统
- STM32F4之SDIO接口
- P2P继续停止...
- java98道经典面试题
- 【OpenCV】图像多通道混合、缩放
- 如何去掉图片上的水印,四个步骤,方法超级容易又简单
- 电主轴故障分析及正确处理方法
- 阿里的敏捷组织和中台策略有何不同?
- 云课堂服务器技术支持,中学语音教室云课堂云服务器
- 一个P2P未跑路平台老板的自白
- 8款最好用的固定资产管理软件
- ARM状态寄存器-PSR
- 源中的 backports proposed security updates 什么意思?
热门文章
- matlab中打不开保存好的模糊控制器,(完整版)matlab模糊控制工具箱的使用
- android webview定位权限,混合开发安Android webview使用内置浏览器定位的权限
- qdu_ACM3月7号组队训练
- java split 数字_java截取字符串,截串,substring和split,分割字母和数字,正则缝隙...
- indesign2020突然闪退_Adobe Photoshop 2020打不开,总是闪退,罪魁祸首在这里
- tensorflow 1.X迁移至tensorflow2 代码写法
- stm32 图像处理_假如STM32也有朋友圈
- python 获取json中最大值_详细解析 Python 爬取 bilibili 的视频、弹幕以及封面
- 【算法竞赛学习】学术前沿趋势-作者信息关联
- moel vue 自定义v_vue如何在自定义组件中使用v-model