предисловие
использоватьfreemarker
Динамический экспорт шаблонаword
документ
Подготовить
-
окрестности
- IntellJ IDEA 2018.2
- SringBoot 2.1.9
-
Версия
- Word
2003
.doc
Формат - spring-boot-starter-freemarker
2.1.9
- Word
Простая подготовка шаблона
word 2003
новый.doc
шаблон
сохранить как.xml
Файл, отформатируйте код и проверьте наличие проблем с разделением переменных, как показано на
скорректированный
переименованы в.ftl
шаблонfreemarker
документ
Springboot экспортирует простое слово
использоватьfreemarker
шаблонизатор
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
настроитьfreemarker
# 设置freemarker
freemarker:
allow-request-override: false
# 开发过程建议关闭缓存
cache: true
check-template-location: false
charset: UTF-8
content-type: text/html; charset=utf-8
expose-request-attributes: false
expose-session-attributes: false
expose-spring-macro-helpers: false
request-context-attribute:
# 默认后缀就是.ftl
suffix: .ftl
template-loader-path: classPath:/templates/code/
шаблонUserInfo.flt
файл в проект
контрольная работаController
код
@PostMapping("user/doc")
@ResponseBody
@ApiOperation(value="导出用户doc", httpMethod = "POST",produces="application/json",notes = "导出用户doc")
public ResultBean exportDoc() throws IOException{
Configuration configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
configuration.setClassForTemplateLoading(this.getClass(), "/templates/code");
Template template = configuration.getTemplate("UserInfo.ftl");
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("name","gaolei");
dataMap.put("id","02201");
dataMap.put("code","251525v");
dataMap.put("pwd","root");
dataMap.put("tel","08583552");
File outFile = new File("UserInfoTest.doc");
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));
try {
template.process(dataMap,out);
out.flush();
out.close();
} catch (TemplateException e) {
e.printStackTrace();
}
return ResultBean.success();
}
Swagger
контрольная работа
Сохраняется в корневом каталоге проекта по умолчанию
Данные успешно экспортированыword
Сложный экспорт слова шаблона
Подготовка шаблона
Операция такая же, как и выше, шаблон выглядит следующим образом
Тест контроллера
@PostMapping("user/requireInfo")
@ResponseBody
@ApiOperation(value="导出用户确认信息表doc", httpMethod = "POST",produces="application/json",notes = "导出用户确认信息表doc")
public ResultBean userRequireInfo() throws IOException{
Configuration configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
configuration.setClassForTemplateLoading(this.getClass(), "/templates/code");
Template template = configuration.getTemplate("need.ftl");
Map<String , Object> resultMap = new HashMap<>();
List<UserInfo> userInfoList = new ArrayList<>();
userInfoList.add(new UserInfo("2019","安全环保处质量安全科2608室","风险研判","9:30","10:30","风险研判","风险研判原型设计","参照甘肃分公司提交的分析研判表,各个二级单位维护自己的风险研判信息,需要一个简单的风险上报流程,各个二级单位可以看到所有的分析研判信息作为一个知识成果共享。","张三","李四"));
resultMap.put("userInfoList",userInfoList);
File outFile = new File("userRequireInfo.doc");
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));
try {
template.process(resultMap,out);
out.flush();
out.close();
return null;
} catch (TemplateException e) {
e.printStackTrace();
}
return ResultBean.success();
}
freemarker
траверс
<#list userInfoList as user>
获取值:${user.name}
...
</#list>
Экспорт результатов
Экспорт с картинками в Word
Подготовка шаблона
Controller
@PostMapping("user/exportPic")
@ResponseBody
@ApiOperation(value="导出带图片的Word", httpMethod = "POST",produces="application/json",notes = "导出带图片的Word")
public ResultBean exportPic() throws IOException {
Configuration configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
configuration.setClassForTemplateLoading(this.getClass(), "/templates/code");
Template template = configuration.getTemplate("userPic.ftl");
Map<String,Object> map = new HashMap<>();
map.put("name","gaolei");
map.put("date","2015-10-12");
map.put("imgCode",imageToString());
File outFile = new File("userWithPicture.doc");
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));
try {
template.process(map,out);
out.flush();
out.close();
return null;
} catch (TemplateException e) {
e.printStackTrace();
}
return ResultBean.success();
}
public static String imageToString() {
String imgFile = "E:\\gitee\\excel-poi\\src\\main\\resources\\static\\img\\a.png";
InputStream in = null;
byte[] data = null;
try {
in = new FileInputStream(imgFile);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
String imageCodeBase64 = Base64Utils.encodeToString(data);
return imageCodeBase64;
}
Swagger
контрольная работа
экспортный эффект
demo
исходный код
Подробнее см.репозиторий github