Java poi 模板导出Word 带图片

Java poi 模板导出Word 带图片

重点!!!

官方文档https://deepoove.com/poi-tl/#_maven

最终效果

模板

其实内容都在官方文档里写的非常明白了 我这里只是抛砖引玉。

Maven依赖

xml 复制代码
 	<poi.version>4.1.2</poi.version>
    <poi.tl.version>1.10.0</poi.tl.version>
<!-- excel工具 -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>${poi.version}</version>
            </dependency>

            <!--poi Word-->
            <dependency>
                <groupId>com.deepoove</groupId>
                <artifactId>poi-tl</artifactId>
                <version>${poi.tl.version}</version>
            </dependency>

代码

java 复制代码
    @GetMapping("/word/export/{id}")
    public void word(@PathVariable("id") Long id,HttpServletResponse response)
    {
    	//这里自己查询需要导出的内容
        GenPersonWordInfoVO wordInfo = genPersonBaseService.getWordInfo(id);
        //将JavaBean转为map 
        HashMap<String, Object> map = new HashMap<>();
        Field[] fields = wordInfo.getClass().getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            try {
                map.put(field.getName(), field.get(wordInfo));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        //这里放入图片
        map.put("headImg", Pictures.ofUrl(wordInfo.getHeadImg()).size(100, 150).center().create());
        //这里声明这些字段是列表 需要使用LoopRowTableRenderPolicy 类来处理 看名字也可以发现是循环table的行
        LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
        Configure config = Configure.builder()
                .bind("healthHistory", policy)
                .bind("checkHistory", policy)
                .bind("touchHistory", policy)
                .bind("diagnosisHistory", policy)
                .bind("treatmentHistory", policy)
                .build();
        //加载模板文件 从resources目录下加载
        ClassPathResource resource = new ClassPathResource("template/person_file_template.docx");
        XWPFTemplate template = null;
        try {
            template = XWPFTemplate.compile(resource.getInputStream(),config).render(map);
            ServletOutputStream out = response.getOutputStream();
            response.setContentType("application/force-download");
            response.addHeader("Content-Disposition", "attachment;fileName=" + System.currentTimeMillis()+".docx");
            template.write(out);
            out.flush();
            out.close();
            template.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

最后,官方文档非常详细,完全可以参考官方文档。

相关推荐
云动雨颤17 分钟前
Java并发性能优化|读写锁与互斥锁解析
java
ldj202030 分钟前
Centos 安装Jenkins
java·linux
hqxstudying37 分钟前
Intellij IDEA中Maven的使用
java·maven·intellij-idea
SimonKing40 分钟前
拯救大文件上传:一文彻底彻底搞懂秒传、断点续传以及分片上传
java·后端·架构
深栈解码40 分钟前
JUC并发编程 内存布局和对象头
java·后端
北方有星辰zz1 小时前
数据结构:栈
java·开发语言·数据结构
Seven971 小时前
一个static关键字引发的线上故障:深度剖析静态变量与配置热更新的陷阱
java
山野万里__1 小时前
C++与Java内存共享技术:跨平台与跨语言实现指南
android·java·c++·笔记
风象南1 小时前
Spring Shell命令行工具开发实战
java·spring boot·后端
Java技术小馆1 小时前
POST为什么发送两次请求
java·面试·架构