java使用freemarker导出word

生成标准格式word请戳这里==>java使用freemarker导出word(标准格式版)

需求背景:根据模板的样式,导出不同内容的word。内容包括文字,图片,页眉等。
经过不同的尝试,最终选择使用freemarker来实现。
选择的原因:支持多图片,可以根据编辑的word模板导出,样式不会错乱。
主要分为以下几步:

  • 创建一个docx的word文档,编辑好模板,比如trip.docx。
  • trip.docx另存为trip.xml
  • 格式化trip.xml(方便阅读和替换里面的变量)
  • 替换变量,更改为trip.ftl放入项目中
  • java代码填充数据,并保存word

具体操作如下:

  1. 第一步:创建word文档trip.docx
    如图:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    从图中可以看出,这个文档包含的内容。对于数据结构相同的内容在模板中可以只写一次。
    比如:图中的日期和城市,只要写出第一天就行。
    图中的行程设计也只需要写DAY1的全部内容即可。其他相同数据结构,在freemarker中进行循环遍历。

  2. 第二步:把trip.docx另存为trip.xml
    在这里插入图片描述

  3. 使用文本编辑工具打开trip.xml,可以notepad++或者sublime text3或者其他编辑器打开。我使用的是sublime text3。打开后会发现xml格式是压缩的,可以进行格式化一下(百度xml格式化或者使用编辑器的插件)。如图:
    格式化前:
    在这里插入图片描述
    格式化后:
    在这里插入图片描述

  4. 第四步,找到对应的内容用变量替代。

    我们在模板中可以看到,需要替换的内容主要包含:文字内容,表格内容,页眉,单个的图片,列表图片。
    这当中比较复杂的就是列表图片。
    这里给出一个mock数据结构:
    
{
    "title": "西班牙10日精彩游",
    "desc": "共8天, 1个国家, 10个城市",
    "coverImg": "https://dpic.tiankong.com/39/x9/QJ8302262920.jpg",
    "qrCode": "https://dpic.tiankong.com/5a/we/QJ6256685144.jpg",
    "userName": "兴国",
    "levelName": "旅行定制师",
    "dayBrief": [
      {
        "date": "DAY1",
        "cities": [
          "马德里"
        ]
      },
      {
        "date": "DAY2",
        "cities": [
          "马德里"
        ]
      },
      {
        "date": "DAY3",
        "cities": [
          "马德里",
          "塞哥维亚",
          "马德里"
        ]
      }
    ],
    "googleMap": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1548689372&di=bc427f35f193dcae40177e4cf8b0e2e9&imgtype=jpg&er=1&src=
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值