一.使用word文档编辑好模版,如下图:

编辑好模板之后选择另存为,保存为xml格式。

二.编写java代码

采用的是FreeMarker模板引擎。需要下载对应的jar包,如果用的是Maven,只需在pom.xml中加入以下代码即可。

<!-- 模版引擎用到的jar包 --><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.25-incubating</version></dependency> 

Service:

package Solin.service;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.URL;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import Solin.domain.Student;
import Solin.mapper.DynamicallyGeneratedWordMapper;
import freemarker.cache.URLTemplateLoader;
import freemarker.core.ParseException;
import freemarker.template.Configuration;
import freemarker.template.MalformedTemplateNameException;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateNotFoundException;@Service
public class DynamicallyGeneratedWordService {private static Configuration freemarkerConfig;static {freemarkerConfig = new Configuration(Configuration.VERSION_2_3_22);freemarkerConfig.setEncoding(Locale.getDefault(), "UTF-8");}@Autowiredprivate DynamicallyGeneratedWordMapper dynamicallyGeneratedWordMapper;/*** 生成word文档* @param filePath* @throws TemplateNotFoundException* @throws MalformedTemplateNameException* @throws ParseException* @throws IOException* @throws TemplateException*/public void genWordFile(String filePath) throws TemplateNotFoundException, MalformedTemplateNameException, ParseException, IOException, TemplateException{List<Student> stuList = dynamicallyGeneratedWordMapper.getStudentList();Map<String,Object> result = new HashMap<String,Object>();result.put("date", new Date());result.put("teacher", "Solin");result.put("topic", "基于Java模板技术动态生成Word文档");result.put("count", stuList.size());result.put("maleCount", dynamicallyGeneratedWordMapper.getManNumber());result.put("femaleCount", dynamicallyGeneratedWordMapper.getFemaleNumber());result.put("stuList", stuList);freemarkerConfig.setTemplateLoader(new URLTemplateLoader() {@Overrideprotected URL getURL(String arg0) {return DynamicallyGeneratedWordService.class.getResource("/test.xml");//此处需要注意test.xml模板的路径,不要搞错了,否则获取不到模板,我是放在src/main/java目录下}});Template temp = freemarkerConfig.getTemplate("test.xml");File targetFile = new File(filePath);Writer out = new OutputStreamWriter(new FileOutputStream(targetFile),"UTF-8");//执行模板替换temp.process(result, out);out.flush();}
}

我的test.xml文件的位置:

Student实体类:

package Solin.domain;/*** @author Solin* 学生信息实体类**/
public class Student {private Integer id;//主键private String name;//姓名private String sex;//性别private String age;//年龄public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}
}

Controller:

package Solin.controller;import java.io.IOException;
import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import Solin.domain.Student;
import Solin.service.DynamicallyGeneratedWordService;
import freemarker.core.ParseException;
import freemarker.template.MalformedTemplateNameException;
import freemarker.template.TemplateException;
import freemarker.template.TemplateNotFoundException;/*** @author Solin* 基于Java模板技术动态生成Word文档 */
@Controller
public class DynamicallyGeneratedWordController {@Autowiredprivate DynamicallyGeneratedWordService dynamicallyGeneratedWordService;@ResponseBody@RequestMapping("/getStudentList")public String getStudentList(){String result = "成功";try {dynamicallyGeneratedWordService.genWordFile("d://stu.doc");} catch (TemplateNotFoundException e) {result = "失败";e.printStackTrace();} catch (MalformedTemplateNameException e) {result = "失败";e.printStackTrace();} catch (ParseException e) {result = "失败";e.printStackTrace();} catch (IOException e) {result = "失败";e.printStackTrace();} catch (TemplateException e) {result = "失败";e.printStackTrace();}return result;}
}

XML模版中需要做以下修改:

表格数据是多行的,所以要循环。

我们在xml模版中做以下修改:找到上图中红色框框所在的地方,然后按下图修改

里面的内容依次改为对应的:${stu.id} ${stu.name} ${stu.sex} ${stu.age}这里的id name sex age是和Student实体类对应的。

 三.到此基本完成了动态模版的生成,测试结果图下图:

基于Java模板技术动态生成Word文档相关推荐

  1. java利用freemarker动态生成word文档及动态表格

    这里写自定义目录标题 目标 准备 实现 处理模板 java实现 验证 目标 根据给定word模板,动态填充指定内容,并输出为新的word文档. 准备 1.模板: 准备一份目标格式的word文档,如:w ...

  2. Java项目中利用Freemarker模板引擎导出--生成Word文档

    应邀写的一篇文章:Java项目中利用Freemarker模板引擎导出--生成Word文档 资源下载:https://download.csdn.net/download/weixin_41367523 ...

  3. Freemarker - 根据模板动态生成word文档

    文章目录 Freemarker 根据模板动态生成word文档 Freemarker 介绍: Freemarker 使用: freemarker加载模板目录的方法 参考资料 Freemarker 根据模 ...

  4. java如何根据模板填充数据生成word文档

    java根据模板填充数据生成word文档 这篇文章干什么? 思路总览 1.准备word模板 2.转换文件格式 3.编写代码 补充--下载流 这篇文章干什么?   使用代码将word模板内容进行替换,并 ...

  5. Java使用FreeMarker自动生成Word文档(带图片和表单)

    Java使用FreeMarker自动生成Word文档(带图片和表单) 1 背景 2 目标效果 3 创建Word模板 3.1 创建模板文档 3.2 转换模板文档 3.3 处理模板文档中的占位符 3.4 ...

  6. Springboot中使用freemarker动态生成word文档

    文章目录 freemarker模板动态生成word文档 前言 准备 简单模板准备 <一> `word 2003` 新建`.doc` 模板 <二> 另存为`.xml` 文件,格式 ...

  7. java根据模板动态生成word文档

    模板文档 首先,需要创建一个word模板,我的模板例子如下: 动态生成的文档 根据java代码动态的修改模板生成自己想要的文档,结果如下: 具体代码 代码操作如下:其中进行了文本的替换,图片的插入,以 ...

  8. 【.NET】用Aspose.Words for .NET动态生成word文档中的数据表格

    1.概述 最近项目中有一个这样的需求:导出word 文档,要求这个文档的格式不是固定的,用户可以随便的调整,导出内容中的数据表格列是动态的,例如要求导出姓名和性别,你就要导出这两列的数据,而且这个文档 ...

  9. 用Aspose.Words for .NET动态生成word文档中的图片或水印

    1.概述 在项目中生成word文档,这个功能很普遍的,一般生成都是纯文字或是列表的比较多,便于客户打印,而要把图片也生成到word文档中的需求有些客户也是需要的,例如产品图片.这次我们介绍的是如何利用 ...

  10. 动态生成word文档的靠谱方式

    需求:将数据生成到word模板文件 实现方式:使用ftl做模板文件,将数据写到word文档中 1.导包 <dependency><groupId>org.freemarker& ...

最新文章

  1. 干货 | 只有100个标记数据,如何精确分类400万用户评论?
  2. 用oracle列实现sqlserver的自增列
  3. [转](总结)Linux/UNIX的scp命令用法详解
  4. idea提示,格式化代码,清除不使用的包快捷键,maven自动导jar包
  5. mysql5.7半自动同步设置【转】
  6. 快照速度_网络推广——网络推广专员如何看待网站快照更新快慢问题?
  7. 服务器配置再生龙系统,PXE引导再生龙安装步骤
  8. MFC中的几个常用类——CFileDialog
  9. SilverLight小游戏
  10. 云场景实践研究第37期:悦跑圈
  11. 逻辑斯谛(Logistic)回归、参数估计教程
  12. 广数系统加工中心编程_数控加工中心编程师傅亲述:提升编程水平的建议
  13. Mac 远程 屏幕共享 screen sharing
  14. SPRAY 光谱光线追迹仿真软件
  15. kinect二次开发_Kinect2.0动作捕捉Super Mocap K2
  16. 社会的需求对科技进步的作用要超过十所大学
  17. 宠物卡牌大赛奖励发放结束公告
  18. Python 爬取蜂鸟网的照片
  19. JAVA 实现《坦克大战联机版》游戏
  20. 计算机专业教师的简历模板,教师简历模板

热门文章

  1. 移动增值短信平台实施计划方案(报业集团短信手机报)
  2. oppo9s刷机教程_OPPO R9s刷机教程_OPPO R9s卡刷升级更新官方系统包
  3. MyEclipse10破解详解过程
  4. C++ intptr_t类型
  5. eova、easyui及普通DOM表单元素操作
  6. dataload mysql_如何向eova中添加新的数据源呢
  7. 先锋意识dota人生
  8. 安装前端插件 FeHelper
  9. tarjan算法 转载
  10. PL/SQL中导出整个表、表结构、部分数据、以及导入整个表