使用poi-tl生成Word文档的实例
在本文中,我们将展示如何使用 poi-tl库 来生成包含数据的Word文档。
1. 添加依赖
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.12.1</version>
</dependency>
2. 添加模版
在此之前先解释下:
• 在 poi-tl 中,文本内容使用 {{var}} 这样的双括号标识
• 文档嵌套,使用 {{+var}} 标识
tmp1.docx 模板文件内容如下:
{{title}}
来自:{{author}} 发布于:{{createTime}}
详细信息:
{{+subTmp}}
tmp2.docx 模板文件内容如下:
名称:{{name}}
年龄:{{age}}
3. 编写Java代码
package cn.yujky.io;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.data.ChartSingleSeriesRenderData;
import com.deepoove.poi.data.Charts;
import com.deepoove.poi.data.Includes;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @ClassName: DocTests
* @Description:
* @Author: yujky
* @Date: 2023/7/18 15:11
*/
@SpringBootTest
public class DocTests {
@Test
public void testCreate() {
try (
XWPFTemplate tmp1 = XWPFTemplate.compile(new File("/Users/yujky/IdeaProjects/yujky-study/yujky-io/src/test/java/cn/yujky/io/tmp1.docx"));
) {
tmp1.render(
new HashMap<String, Object>() {{
// 1. 添加tmp1文档的数据
put("title", "标题");
put("author", "yujky");
put("createTime", "2024-10-21 10:23:20");
// 2. 添加tmp2文档的数据
List<Map<String, Object>> subData = new ArrayList<>();
for (int i = 0; i < 10; i++) {
int finalI = i;
subData.add(new HashMap<String, Object>() {{
put("name", "yujky" + finalI);
put("age", finalI + 10);
}});
}
put("subTmp", Includes.ofLocal("/Users/yujky/IdeaProjects/yujky-study/yujky-io/src/test/java/cn/yujky/io/tmp2.docx").setRenderModel(subData).create());
}}
);
// 生成最终文档
tmp1.writeAndClose(Files.newOutputStream(Paths.get("/Users/yujky/IdeaProjects/yujky-study/yujky-io/src/test/java/cn/yujky/io/tmp1Res.pdf")));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
4. 运行代码
运行上述Java代码,将生成最终的文档,并保存为 tmp1Res.docx
。
5. 结果展示
生成的 Word 文档内容如下:
标题
来自:yujky 发布于:2024-10-21 10:23:20
详细信息:
名称:yujky0
年龄:10
名称:yujky1
年龄:11
......(省略部分内容)
名称:yujky9
年龄:19
通过上述步骤,即可成功地使用poi-tl库来生成包含数据的Word文档,并实现了模板之间的嵌套和渲染