freemarker 导出word
时间: 2023-11-05 13:05:49 浏览: 142
可以使用 Apache POI 和 FreeMarker 来实现 Word 导出。具体步骤如下:
1. 引入依赖:
```xml
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
```
2. 编写模板文件,例如 `template.ftl`:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p>
<w:r>
<w:t>${title}</w:t>
</w:r>
</w:p>
<w:p>
<w:r>
<w:t>${content}</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
```
3. 编写 Java 代码:
```java
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
public class WordExportUtil {
public static void export(Map<String, Object> dataMap, String templatePath, String outputPath) throws Exception {
// 1. 创建 Configuration 对象
Configuration configuration = new Configuration(Configuration.VERSION_2_3_31);
configuration.setDefaultEncoding("UTF-8");
// 2. 加载模板文件
Template template = configuration.getTemplate(templatePath);
// 3. 创建 Word 文档对象
XWPFDocument document = new XWPFDocument();
// 4. 填充数据到 Word 文档中
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream, "UTF-8");
template.process(dataMap, outputStreamWriter);
outputStreamWriter.flush();
ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText(line);
}
// 5. 输出 Word 文档
FileOutputStream fileOutputStream = new FileOutputStream(outputPath);
document.write(fileOutputStream);
fileOutputStream.close();
}
}
```
其中,`dataMap` 是模板中需要填充的数据,`templatePath` 是模板文件的路径,`outputPath` 是输出文件的路径。
阅读全文