freemarker生成docx文件
时间: 2023-11-20 17:07:26 浏览: 129
Freemarker 是一个模板引擎,可以将模板文件与数据合并生成新的文件,因此可以利用 Freemarker 生成 docx 文件。
以下是一个简单的示例:
1. 引入依赖
```xml
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
```
2. 创建模板
创建一个 docx 模板文件,使用 Word 编辑器打开,添加需要动态生成的内容,例如表格、文本等。
3. 编写 Freemarker 模板
在模板中使用 Freemarker 语法,例如:
```xml
<#list users as user>
<p>${user.name}</p>
<p>${user.age}</p>
</#list>
```
其中 `users` 是数据源,`user` 是遍历的变量。
4. 生成 docx 文件
读取模板文件,合并数据源,生成 docx 文件:
```java
public void generateDocx() throws Exception {
Configuration cfg = new Configuration(Configuration.VERSION_2_3_30);
cfg.setClassForTemplateLoading(this.getClass(), "/templates/");
cfg.setDefaultEncoding("UTF-8");
Template template = cfg.getTemplate("template.docx");
Map<String, Object> data = new HashMap<>();
List<User> users = new ArrayList<>();
users.add(new User("Tom", 20));
users.add(new User("Jerry", 18));
data.put("users", users);
XWPFDocument doc = new XWPFDocument();
OutputStream out = new FileOutputStream("output.docx");
Writer writer = new OutputStreamWriter(out, "UTF-8");
template.process(data, writer);
doc.write(out);
out.close();
}
```
其中 `User` 是数据模型,`template.docx` 是模板文件名,`output.docx` 是生成的文件名。
运行代码即可生成 docx 文件。
阅读全文
相关推荐


















