# freemarker-demo
**Repository Path**: lanping520/freemarker-demo
## Basic Information
- **Project Name**: freemarker-demo
- **Description**: freemarker 制作word文档docx案例
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 10
- **Forks**: 1
- **Created**: 2022-05-26
- **Last Updated**: 2025-12-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Freemarker案例
主要用于生成特定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
一般添加以下内容即可(不添加时可能会提示错误):
# 四、开始测试
具体测试请看demo