springboot+freemarker导出word

2022-05-20  本文已影响0人  hongzhenw

操作步骤

  1. 创建空白word文档(最好是后缀是doc的)
  2. 根据需求在word里先把ftl命令写好(目的:导出的xml可以少编辑些)
  3. 把word另存为xml文件(最好是word 2003 xml)
  4. 把导出来的xml进行格式化(比如使用visual studio的xml插件)
  5. 把xml后缀改为ftl,拷贝到开发工程里

ftl指令可参考freemarker中文地址

  1. 配置freemarker库
<!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
<dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.30</version>
</dependency>

注意事项

  1. 若是用到了java bean记得实现get、set方法)
  2. 图片的话记得处理wordml的name、src,以及style的width、height

常见格式处理

1.文本

ftl举例

${title}

java代码对应举例

Map<String, Object> map = new HashMap<>()
map.put("title", "演示");

2.日期

ftl举例

${date}

java代码对应举例

Map<String, Object> map = new HashMap<>()
map.put("date", LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));

3.布尔

ftl举例

<#if isBool>是<#else> 否</#if>

java代码对应举例

Map<String, Object> map = new HashMap<>()
map.put("isBool", false);

4.序列

ftl举例

<#if fruits?? && fruits?size !=0 >
     <#list fruits as fruit>
      ……
      ${fruit}</w:t>
      ……
      </#list>
<#else >
      没有数据
</#if>

java代码对应举例

Map<String, Object> map = new HashMap<>()
List<String> fruits = new ArrayList<>();
fruits.add("橙子");
fruits.add("苹果");
fruits.add("香蕉");
fruits.add("橘子");
fruits.add("桃子");
map.put("fruits", fruits);

5.集合

ftl举例

<#if users?? && users?size !=0 >
     <#list users as user>
     ……
     ${user.name}
     ……
     ${user.age}
     ……
     <#if user.graduated>是<#else> 否</#if>
     ……
     </#list>
</#if>

java代码对应举例

Map<String, Object> map = new HashMap<>()
List<UserInfo> lists = new ArrayList<>();
lists.add(new UserInfo(11, "whz1", false));
lists.add(new UserInfo(12, "whz2", true));
lists.add(new UserInfo(13, "whz3", false));
lists.add(new UserInfo(14, "whz4", true));
lists.add(new UserInfo(15, "whz5", true));
map.put("users", lists);

6.图片

ftl举例

<#if images?? && images?size !=0 >
     <#list images as img>
     ……
     图片名称:${img.name}.png
     ……
     <w:binData w:name="${"wordml://"+img.name+".jpg"}" xml:space="preserve">${img.data}</w:binData>
     <v:shape id="图片 1" …… style="width:${img.width}pt;height:${img.height}pt">
     <v:imagedata src="${"wordml://"+img.name+".jpg"}" o:title=""/>
     ……
     </#list>
</#if>

java代码对应举例

Map<String, Object> map = new HashMap<>()
map.put("images", WordUtil.getInstance().getFakeImages());

示例代码说明

  1. 示例代码
  2. IntelliJ idea导入,选择maven工程
  3. run启动服务


    image.png
若run按钮灰色,可找到FtlApplication.java,点击左侧按钮run下就有了 image.png
  1. 浏览器输入:localhost:8080


    image.png

备注:导出word有两种方式,1是通过浏览器下载;2是保存到某路径下

上一篇 下一篇

猜你喜欢

热点阅读