freemarker生成word文档样例
时间: 2023-08-23 10:05:48 浏览: 128
利用FreeMarker生成word文件例子
5星 · 资源好评率100%
以下是一个使用 FreeMarker 生成 Word 文档的示例。
首先需要在 pom.xml 中添加以下依赖:
```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>
```
然后可以创建一个 FreeMarker 模板文件,例如 `template.ftl`:
```html
<html>
<head>
<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
border: 1px solid black;
text-align: left;
padding: 8px;
}
th {
background-color: #ddd;
}
</style>
</head>
<body>
<h1>${title}</h1>
<table>
<tr>
<th>Name</th>
<th>Age</th>
<th>Email</th>
</tr>
<#list users as user>
<tr>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.email}</td>
</tr>
</#list>
</table>
</body>
</html>
```
这个模板包含了一个表格,其中列出了用户的姓名、年龄和电子邮件地址。
然后可以使用以下代码读取模板并将数据填充到模板中:
```java
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.apache.poi.xwpf.usermodel.*;
import java.io.*;
import java.util.*;
public class WordGenerator {
public static void generate(Map<String, Object> data, OutputStream outputStream) throws Exception {
// 创建 FreeMarker 配置
Configuration cfg = new Configuration(Configuration.VERSION_2_3_30);
cfg.setClassForTemplateLoading(WordGenerator.class, "/");
cfg.setDefaultEncoding("UTF-8");
// 加载模板
Template template = cfg.getTemplate("template.ftl");
// 创建 Word 文档
XWPFDocument document = new XWPFDocument();
// 将模板填充到 Word 文档中
StringWriter writer = new StringWriter();
template.process(data, writer);
String html = writer.toString();
InputStream inputStream = new ByteArrayInputStream(html.getBytes());
XWPFHtmlConverter.getInstance().convert(inputStream, document);
// 保存 Word 文档
document.write(outputStream);
outputStream.close();
}
public static void main(String[] args) throws Exception {
// 准备数据
Map<String, Object> data = new HashMap<>();
data.put("title", "User List");
List<Map<String, Object>> users = new ArrayList<>();
users.add(createUser("Alice", 25, "alice@example.com"));
users.add(createUser("Bob", 30, "bob@example.com"));
users.add(createUser("Charlie", 35, "charlie@example.com"));
data.put("users", users);
// 生成 Word 文档
generate(data, new FileOutputStream("output.docx"));
}
private static Map<String, Object> createUser(String name, int age, String email) {
Map<String, Object> user = new HashMap<>();
user.put("name", name);
user.put("age", age);
user.put("email", email);
return user;
}
}
```
这个示例将生成一个名为 `output.docx` 的 Word 文档,其中包含了填充后的表格。
阅读全文