使用_Poi-tl_生成 Word 文档


使用 Poi-tl 生成 Word 文档

参考:

https://deepoove.com/poi-tl/#_why_poi_tl

https://www.cnblogs.com/god23bin/p/spring-boot-poi-tl.html

引入架包

<dependency>
    <groupId>com.deepoove</groupId>
    <artifactId>poi-tl</artifactId>
    <version>1.9.1</version>
</dependency>
  • 注意

如果项目里已经引入 poi 对应的架包,注意 poi-tl 和 poi 的版本要对应。参考下面的文档:

https://deepoove.com/poi-tl/

后端核心代码

// 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());
}

文章作者: L Q
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 L Q !
  目录