美文网首页
springboot+freemarker导出word

springboot+freemarker导出word

作者: hongzhenw | 来源:发表于2022-05-20 11:46 被阅读0次

    操作步骤

    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是保存到某路径下

    相关文章

      网友评论

          本文标题:springboot+freemarker导出word

          本文链接:https://www.haomeiwen.com/subject/xshfprtx.html