基本思路

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文件相关推荐

  1. Java使用 poi,pageOffice两种工具进行 word文件合并

    使用poi,pageOffice合并word操作.主要区别在于 poi可以进行后台操作,通过各种各样APi接口,直接进行文件io读写操作,,可用于后台操作,pageoffice需要前端预览后保存(根据 ...

  2. Java项目中使用PageOffice实现预览Word文件

    第一步:下载pageOffice插件 下载地址:http://www.zhuozhengsoft.com/dowm/   我使用的是PageOffice4.5 for JAVA,根据需要下载 第二步: ...

  3. java web移植 遇到Project facet Java version 1.7 is not supported

    2019独角兽企业重金招聘Python工程师标准>>> 在移植eclipse项目时,如果遇到 "Project facet Java version 1.7 is not ...

  4. java freemarker 图片_java通过freemarker导出包含富文本图片的word文档

    废话不多说,进入正题! 本文重点在于:对富文本图片的导出(基础的freemarker+word模板导出这里不做详细解说哈) (ps:大神的东西太深奥~~懵逼了 一周才搞定,为了方便后来在更加简单,清晰 ...

  5. idea启动Java web项目

    idea启动Java web项目 导入Java web项目 进入project structure中 1.按F4可进入project structure中 2.设置项目的jdk 3.在modules中 ...

  6. JAVA WEB开发环境搭建教程

    一.下载安装JDK,配置好环境变量.(例如我JDK安装的目录为:C:\Program Files (x86)\Java\jdk1.6.0_10     ) 点击我的电脑-属性-系统设置(高级系统设置) ...

  7. 【Apache POI】Java Web根据模板导出word文件

    最近工作中遇到一个需求:根据word模板文档导出word文件. 查阅了一些资料,发现Apache POI可以实现文档读写的功能,于是就研究了一下,总结如下: Apache-POI在线Javadoc:h ...

  8. Java web中不同浏览器间导出Excel文件名称乱码问题解决方案

    Java web中不同浏览器间导出Excel文件名称乱码问题解决方案 参考文章: (1)Java web中不同浏览器间导出Excel文件名称乱码问题解决方案 (2)https://www.cnblog ...

  9. Java web/springboot上传word/doc/docx文档(含图片)与HTML富文本导入/导出互相转换解析!附项目源码

    测试效果 先看下效果 文档内容如下: 上传 上传docx文档 查看解析内容 <html><head><style>p{margin-top:0pt;margin-b ...

最新文章

  1. 微信小程序之购物车功能
  2. 文件加解密,文件操作
  3. QuerySyntax(查询语法)
  4. 本周ASP.NET英文技术文章推荐[03/25 - 03/31]
  5. ~~筛法求欧拉函数(附模板题)
  6. java 正则表达式提取字符串
  7. model.evaluate 输出出一大串 ======================
  8. 基于SSM的旅游管理系统
  9. STM32F4之SDIO接口
  10. P2P继续停止...
  11. java98道经典面试题
  12. 【OpenCV】图像多通道混合、缩放
  13. 如何去掉图片上的水印,四个步骤,方法超级容易又简单
  14. 电主轴故障分析及正确处理方法
  15. 阿里的敏捷组织和中台策略有何不同?
  16. 云课堂服务器技术支持,中学语音教室云课堂云服务器
  17. 一个P2P未跑路平台老板的自白
  18. 8款最好用的固定资产管理软件
  19. ARM状态寄存器-PSR
  20. 源中的 backports proposed security updates 什么意思?

热门文章

  1. matlab中打不开保存好的模糊控制器,(完整版)matlab模糊控制工具箱的使用
  2. android webview定位权限,混合开发安Android webview使用内置浏览器定位的权限
  3. qdu_ACM3月7号组队训练
  4. java split 数字_java截取字符串,截串,substring和split,分割字母和数字,正则缝隙...
  5. indesign2020突然闪退_Adobe Photoshop 2020打不开,总是闪退,罪魁祸首在这里
  6. tensorflow 1.X迁移至tensorflow2 代码写法
  7. stm32 图像处理_假如STM32也有朋友圈
  8. python 获取json中最大值_详细解析 Python 爬取 bilibili 的视频、弹幕以及封面
  9. 【算法竞赛学习】学术前沿趋势-作者信息关联
  10. moel vue 自定义v_vue如何在自定义组件中使用v-model