使用 Poi-tl 生成 Word 文档
参考:
引入架包
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.9.1</version>
</dependency>
- 注意
如果项目里已经引入 poi 对应的架包,注意 poi-tl 和 poi 的版本要对应。参考下面的文档:
后端核心代码
// 3、把数据渲染到文件中去
MultipartFile file = null;
String name = DateUtil.format(new Date(), "yyyyMMdd") + String.format("%05d", new Random().nextInt(100000)) + ".docx";
MultipartFile multipartFile = fileService.createMultipartFile(resUrl.getData().toString(), name, name);
try (XWPFTemplate xwpfTemplate = XWPFTemplate.compile(multipartFile.getInputStream()).render(
new HashMap<String, Object>() {{
dto.getMapCode().forEach(this::put);
}})) {
// 4、将完成数据渲染的文档写入到输入流
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
xwpfTemplate.write(byteArrayOutputStream);
// 5、将输入流转成 multipartFile
file = fileService.createByteMultipartFile(byteArrayOutputStream, name, name);
} catch (IOException e) {
setRecord(dto, template, null, 1, e.getMessage());
e.printStackTrace();
}
- 注意
XWPFTemplate.compile() 支持的参数有下面三种:
// 传递文件地址
public static XWPFTemplate compile(String path) {
return compile(new File(path));
}
// 传递文件类
public static XWPFTemplate compile(File file) {
return compile(file, Configure.createDefault());
}
// 传递文件输入流
public static XWPFTemplate compile(InputStream inputStream) {
return compile(inputStream, Configure.createDefault());
}