基于Java模板技术动态生成Word文档
一.使用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文档相关推荐
- java利用freemarker动态生成word文档及动态表格
这里写自定义目录标题 目标 准备 实现 处理模板 java实现 验证 目标 根据给定word模板,动态填充指定内容,并输出为新的word文档. 准备 1.模板: 准备一份目标格式的word文档,如:w ...
- Java项目中利用Freemarker模板引擎导出--生成Word文档
应邀写的一篇文章:Java项目中利用Freemarker模板引擎导出--生成Word文档 资源下载:https://download.csdn.net/download/weixin_41367523 ...
- Freemarker - 根据模板动态生成word文档
文章目录 Freemarker 根据模板动态生成word文档 Freemarker 介绍: Freemarker 使用: freemarker加载模板目录的方法 参考资料 Freemarker 根据模 ...
- java如何根据模板填充数据生成word文档
java根据模板填充数据生成word文档 这篇文章干什么? 思路总览 1.准备word模板 2.转换文件格式 3.编写代码 补充--下载流 这篇文章干什么? 使用代码将word模板内容进行替换,并 ...
- Java使用FreeMarker自动生成Word文档(带图片和表单)
Java使用FreeMarker自动生成Word文档(带图片和表单) 1 背景 2 目标效果 3 创建Word模板 3.1 创建模板文档 3.2 转换模板文档 3.3 处理模板文档中的占位符 3.4 ...
- Springboot中使用freemarker动态生成word文档
文章目录 freemarker模板动态生成word文档 前言 准备 简单模板准备 <一> `word 2003` 新建`.doc` 模板 <二> 另存为`.xml` 文件,格式 ...
- java根据模板动态生成word文档
模板文档 首先,需要创建一个word模板,我的模板例子如下: 动态生成的文档 根据java代码动态的修改模板生成自己想要的文档,结果如下: 具体代码 代码操作如下:其中进行了文本的替换,图片的插入,以 ...
- 【.NET】用Aspose.Words for .NET动态生成word文档中的数据表格
1.概述 最近项目中有一个这样的需求:导出word 文档,要求这个文档的格式不是固定的,用户可以随便的调整,导出内容中的数据表格列是动态的,例如要求导出姓名和性别,你就要导出这两列的数据,而且这个文档 ...
- 用Aspose.Words for .NET动态生成word文档中的图片或水印
1.概述 在项目中生成word文档,这个功能很普遍的,一般生成都是纯文字或是列表的比较多,便于客户打印,而要把图片也生成到word文档中的需求有些客户也是需要的,例如产品图片.这次我们介绍的是如何利用 ...
- 动态生成word文档的靠谱方式
需求:将数据生成到word模板文件 实现方式:使用ftl做模板文件,将数据写到word文档中 1.导包 <dependency><groupId>org.freemarker& ...
最新文章
- 干货 | 只有100个标记数据,如何精确分类400万用户评论?
- 用oracle列实现sqlserver的自增列
- [转](总结)Linux/UNIX的scp命令用法详解
- idea提示,格式化代码,清除不使用的包快捷键,maven自动导jar包
- mysql5.7半自动同步设置【转】
- 快照速度_网络推广——网络推广专员如何看待网站快照更新快慢问题?
- 服务器配置再生龙系统,PXE引导再生龙安装步骤
- MFC中的几个常用类——CFileDialog
- SilverLight小游戏
- 云场景实践研究第37期:悦跑圈
- 逻辑斯谛(Logistic)回归、参数估计教程
- 广数系统加工中心编程_数控加工中心编程师傅亲述:提升编程水平的建议
- Mac 远程 屏幕共享 screen sharing
- SPRAY 光谱光线追迹仿真软件
- kinect二次开发_Kinect2.0动作捕捉Super Mocap K2
- 社会的需求对科技进步的作用要超过十所大学
- 宠物卡牌大赛奖励发放结束公告
- Python 爬取蜂鸟网的照片
- JAVA 实现《坦克大战联机版》游戏
- 计算机专业教师的简历模板,教师简历模板