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

    }

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

相关推荐
河阿里19 分钟前
SpringBoot:Spring Task定时任务完整使用教学
java·spring boot·spring
jiayong2320 分钟前
Tool Permission 与 Sandbox 的安全流水线:Agent 工具系统的工程边界
java·数据库·安全·agent
rururunu29 分钟前
Windows 下切换 Java 环境太复杂了,我做了个 cli 工具,可以快速安装,切换 Java 版本
java
qq_4523962331 分钟前
第十一篇:《性能压测基础:JMeter线程模型与压测策略设计》
java·开发语言·jmeter
澈20739 分钟前
二叉搜索树:高效增删查的秘诀
java·开发语言·算法
青云计划1 小时前
Spring
java·后端·spring
yychen_java1 小时前
深度解析电力交易系统的“硬核”战场
java·能源
无尽冬.1 小时前
个人八股之string字符串
java·开发语言·经验分享·后端·异世界
伯远医学2 小时前
Nat. Methods | 邻近标记技术:活细胞中捕捉分子互作的新利器
java·开发语言·前端·javascript·人工智能·算法·eclipse