freemarker 制作word文档docx案例

主要用于生成特定word文档,需要替换docx中的文字,书签,图片,动态表格等

本文以生成docx为例,doc文件目前有一些问题 例如图片或模板不好处理等,暂不考虑。

思路:

1)熟悉docx文件的结构

2)重新生成docx中的文件

3)替换docx中的文件

一、引入依赖

pom.xml 引入相关jar包

1.freemarker-2.3.28:处理xml或ftl模板的jar

2.hutool-all-5.5.7:主要一些工具类的jar

3.dom4j-1.6.1:XML解析使用的jar

4.aspose-words-15.8.0-jdk16:对word操作的jar,例如word转pdf,word书签操作

二、构造参数

1.针对生成的word文档中需要的数据构造对象与属性

例如以下word模板

开发人员根据具体模板构造参数,不过多介绍

2.代码书写

需要准备内容:模板目录,生成word文档目录,相关模板文件名称

例如:

document.xml.rels:实际上为xml文件,指定相关资源与图片地址的文件

document.xml:word文档内容文件

freemarker_template.docx:word模板文件

3.执行顺序

1)通过dom4j进行xml解析 重新生成document.xml.rels

2)通过Freemarker进行模板处理重新生成document.xml

3)通过java自带zip操作替换word模板中的document.xml.rels,document.xml,写入相应图片,并且重新压缩生成新的word文档

4)删除临时文件:上述过程会产生一些临时文件,操作完成后需要及时删除

三、准备模板

docx文件实际是压缩文件,将word模板docx用压缩程序打开,如下:

将word目录中的document.xml文件,word/_rels/document.xml.rels文件拷贝出来,可以用HBuildX进行编辑,HBuildX可以对xml文件进行格式化。

document.xml.rels:

一般删除该文件中引入的图片标签即可

document.xml:

该word文档内容文件,需要开发人员自己编辑其内容 通过${}指定对应参数,这里使用的是Freemarker的语法格式

一般语法:

!'' 表示为空时为'',以下都做了非空判断,不然程序执行时会报错

${myName!''}

${(user.userName)!''}

<#if ((user.type)!'')=='admin'>
    ${(user.userName)!''}
</#if>

<#if userList??>
    <#list userList as user>
        ${(user.userName)!''}
    </#list>
</#if>

freemarker_template.docx:

这个文件是word模板文件,需要处理的是用压缩软件打开该文件后删除其中的图片,目录地址位于word/media/下,还需要处理的文件是[Content_Types].xml

一般添加以下内容即可(不添加时可能会提示错误):

<Default Extension="png" ContentType="image/png"/>

<Default Extension="jpg" ContentType="image/jpg"/>

<Default Extension="jpeg" ContentType="image/jpeg"/>

四、开始测试

具体测试请看demo

freemarker-demo: freemarker 制作word文档docx案例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值