java使用poi-tl模版引擎导出word之饼状图生成及循环批量生成饼状图

news2024/9/29 7:31:34

文章目录

  • 一、单个饼状图生成
    • 1.word模版制作
    • 2.编写接口完整代码
    • 3.导出结果
  • 二、批量生成饼图
    • 1.word模版制作
    • 2.编写接口完整代码
    • 3.导出结果

一、单个饼状图生成

1.word模版制作

在word中创建一个饼状图,点击图表,点击“文本选项”,在可选文字标题中填入{{pieChart}}
在这里插入图片描述

2.编写接口完整代码

    @GetMapping("/exportWord")
    public void exportWord(HttpServletResponse response) throws FileNotFoundException {
        //存放数据,也就是填充在word里面的值
        Map<String, Object> params = new HashMap<>();
        params.put("title","测试使用poi-tl模版导出word");

        ChartSingleSeriesRenderData pie = Charts
                .ofSingleSeries("测试第一个饼图", new String[] { "男", "女" })
                .series("countries", new Integer[] { 9826675, 9596961 })
                .create();
        params.put("pieChart", pie);

        // 或模板在静态资源的相对路径
        File rootFile = new File((ResourceUtils.getURL("classpath:").getPath()));
        File templateFile = new File(rootFile, "/static/templates/exportWord.docx");
        //jar包获取不到文件路径`
        //URLDecoder.decode() 解决获取中文名称文件路径乱码
        String templatePath = URLDecoder.decode(templateFile.getPath());
        //生成文件名
        String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + System.currentTimeMillis();
        // 导出wold
        try {
            // 导出Word文档为文件
            XWPFTemplate template = XWPFTemplate.compile(templatePath,builder.build()).render(params);
            // 将导出的Word文件转换为流
            response.setContentType("application/octet-stream");
            response.setHeader("Content-disposition","attachment;filename=\""+fileName+".docx"+"\"");
            // HttpServletResponse response
            OutputStream out = response.getOutputStream();
            BufferedOutputStream bos = new BufferedOutputStream(out);
            template.write(bos);
            bos.flush();
            out.flush();
            // 最后不要忘记关闭这些流。
            PoitlIOUtils.closeQuietlyMulti(template, bos, out);
        } catch (Exception e) {
            System.out.println("导出Word文档时出现异常:" + e.getMessage());
        }
    }

3.导出结果

在这里插入图片描述

二、批量生成饼图

1.word模版制作

在word中创建一个饼状图,点击图表,点击“文本选项”,在可选文字标题中同样填入{{pieChart}}
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d4c372a1df774bad94b3f0662e886959.png

2.编写接口完整代码

    @GetMapping("/exportWord")
    public void exportWord(HttpServletResponse response) throws FileNotFoundException {
        //存放数据,也就是填充在word里面的值
        Map<String, Object> params = new HashMap<>();
        params.put("title","测试使用poi-tl模版导出word");




        List<Map<String, Object>> list = new ArrayList<>();
        Map<String, Object> map = new HashMap<>();
        map.put("a","测试");
        map.put("b","米");
        map.put("c","201312");
        ChartSingleSeriesRenderData pie = Charts
                .ofSingleSeries("测试第一个饼图", new String[] { "男", "女" })
                .series("countries", new Integer[] { 9826675, 9596961 })
                .create();
        map.put("pieChart", pie);
        list.add(map);


        Map<String, Object> map1 = new HashMap<>();
        map1.put("a","测试2");
        map1.put("b","千米");
        map1.put("c","2012312");
        ChartSingleSeriesRenderData pie1 = Charts
                .ofSingleSeries("测试第二个饼图", new String[] { "上海", "广州" })
                .series("countries", new Integer[] { 253, 985 })
                .create();
        map1.put("pieChart", pie1);
        list.add(map1);

        params.put("list",list);

        // 或模板在静态资源的相对路径
        File rootFile = new File((ResourceUtils.getURL("classpath:").getPath()));
        File templateFile = new File(rootFile, "/static/templates/exportWord.docx");
        //jar包获取不到文件路径`
        //URLDecoder.decode() 解决获取中文名称文件路径乱码
        String templatePath = URLDecoder.decode(templateFile.getPath());
        //生成文件名
        String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + System.currentTimeMillis();
        // 导出wold
        try {
            // 导出Word文档为文件
            XWPFTemplate template = XWPFTemplate.compile(templatePath,builder.build()).render(params);
            // 将导出的Word文件转换为流
            response.setContentType("application/octet-stream");
            response.setHeader("Content-disposition","attachment;filename=\""+fileName+".docx"+"\"");
            // HttpServletResponse response
            OutputStream out = response.getOutputStream();
            BufferedOutputStream bos = new BufferedOutputStream(out);
            template.write(bos);
            bos.flush();
            out.flush();
            // 最后不要忘记关闭这些流。
            PoitlIOUtils.closeQuietlyMulti(template, bos, out);
        } catch (Exception e) {
            System.out.println("导出Word文档时出现异常:" + e.getMessage());
        }
    }

3.导出结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1913847.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Conformal low power-2.电源感知等效性检查

电源感知等效性检查 ■ 第24页&#xff1a;电源感知等效性检查概述 ■ 第24页&#xff1a;启动低功耗&#xff08;等效性检查&#xff09;软件 ■ 第25页&#xff1a;电源感知等效性检查流程 ■ 第28页&#xff1a;电源感知等效性检查示例Do文件 电源感知等效性检查概述…

【4】A-Frame样例指南——完结

一、如何构建基本场景&#xff1f; 让我们从构建一个基本的 A-Frame场景开始。为此&#xff0c;我们需要对 HTML 有基本的了解。我们将学习如何&#xff1a; 使用原语添加 3D 实体&#xff08;即对象&#xff09; 通过位置、旋转、缩放来变换 3D 空间中的实体 添加环境 添加…

泰迪智能科技大数据实验室产品-实训管理平台介绍

高校大数据实验室通常配备有先进的计算机硬件和软件工具&#xff0c;以及专门的数据库和分析平台&#xff0c;以便研究人员和学生能够进行复杂的数据处理、分析和解释。主要利用大数据技术进行科学研究、技术开发和人才培养。 泰迪智能科技实训管理平台作为教学核心&#xff0c…

DBeaver 最新激活应用,亲测可用!!快来试试!!

DBeaver 最新激活应用&#xff0c;亲测可用&#xff01;&#xff01;快来试试&#xff01;&#xff01;简介DBeaver是一种通用数据库管理工具&#xff0c;适用于需要以专业方式使用数据的每个人&#xff1b;适用于开发人员&#xff0c;数据库管理员https://mp.weixin.qq.com/s/…

WEB安全:网络安全常用术语

一、攻击类别 漏洞&#xff1a;硬件、软件、协议&#xff0c;代码层次的缺陷。 后⻔&#xff1a;方便后续进行系统留下的隐蔽后⻔程序。 病毒&#xff1a;一种可以自我复制并传播&#xff0c;感染计算机和网络系统的恶意软件(Malware)&#xff0c;它能损害数据、系统功能或拦…

vs2022报找不到.netframework,version=V4.8的引用程序集

最近在win7上面安装vs2022 17.6版本&#xff0c;打开.net项目编译的时候出现了这个提示。 解决方案就是安装.net4.8开发者工具包&#xff0c;不是运行工具包。 安装完成之后在项目的属性中修改&#xff1a; 点击下载&#xff1a;.net4.8开发者工具包

性价比高的照明品牌有哪些?揭秘五款性价比高的照明灯

我国整体近视率呈低龄高发态势。为什么会这样呢?原因不外乎就是用眼时间长、不良坐姿、不合适的用眼环境。国内的学习压力一直就没有降低过&#xff0c;这也就导致学生课业多&#xff0c;晚上挑灯读写成常态。高强度的用眼自然会对眼睛伤害大。护眼台灯就是一个不错的选择&…

提供跨平台的视觉安防解决方案,满足不同场景的需求的智慧交通开源了。

智慧交通视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。用户只需在界面上…

快手矩阵源码揭秘:短视频运营新利器,一键管理多平台,轻松告别繁琐!

在数字化浪潮席卷全球的今天&#xff0c;短视频已成为人们生活中不可或缺的一部分。无论是抖音、快手还是其他短视频平台&#xff0c;都汇聚了数以亿计的用户&#xff0c;为内容创作者提供了广阔的舞台。然而&#xff0c;随着短视频平台的不断涌现&#xff0c;如何高效、便捷地…

防火墙安全策略用户认证综合实验

基础配置 1&#xff0c;交换机配置&#xff08;LSW5&#xff09; 划分vlan10和vlan20&#xff0c;将g0/0/1与与防火墙化为trunk干道&#xff0c;使用防火墙路由模式&#xff08;子接口&#xff09;&#xff0c;g0/0/2和g0/0/3化为access链路&#xff0c;分别连接生产区&#xf…

1Panel 安装常见问题与解决方案指南

安装 参考 1Panel 文档 - 在线安装 部分&#xff0c;这里仅作常见安装失败的问题解析。 常见Q&A 收集自 1Panel微信群&#xff0c;论坛以及GitHub issue Q1. 安装过程中提示 docker 安装失败 [1Panel Log]: … 启动 docker Failed to enable unit: Unit file docker.ser…

【基于R语言群体遗传学】-15-溯祖理论coalescence

在群体遗传学中&#xff0c;一个非常重要的概念是关注谱系的汇聚&#xff08;遗传线索的汇合&#xff09;&#xff0c;当我们回溯过去几代人口时。在之前的博客中&#xff0c;我们几乎只处理了随时间推移基因变化的“正向”模拟。 群体遗传学_tRNA做科研的博客-CSDN博客 然而&…

揭秘小红书矩阵系统:源码助力一键自动发布,多平台管理,效率飙升!

在数字化时代&#xff0c;社交媒体已成为品牌和个人展示自我、推广产品的重要舞台。小红书&#xff0c;作为备受年轻人喜爱的社交平台&#xff0c;其影响力不容小觑。然而&#xff0c;面对日益激烈的竞争&#xff0c;如何高效地在小红书上发布内容、管理多平台账号&#xff0c;…

Linux操作系统上用到的磁盘分区管理工具

parted磁盘分区工具 磁盘格式&#xff1a;MBR, GPT, 这两种名称分别是硬盘里面分区表两种格式的称呼&#xff0c; 第一种MBR格式的分区表最大支持2TB的容量&#xff0c; 磁盘的三种分区主分区&#xff0c;扩展分区&#xff0c;逻辑分区&#xff0c;主分区扩展分区<4 第…

Unity WebGL 嵌入前端网页并通信

1. 前言 最近在做项目时遇到需要将 UnityWebGL 嵌入到网页中去&#xff0c;且需要点击网页中的按钮 UnityWebGL 可以做出响应。新建项目部分直接略过 2. 最终效果 3. 基础设置 设置导出平台为WebGL 在Player Settings -> Publishing Settings 中勾选 Data Caching 和Deco…

NesT : 嵌套层次Transformer

探讨了在不重叠的图像块上嵌套基本局部变换的思想,并以分层的方式对它们进行聚合。发现块聚合功能在实现跨块非局部信息通信中起着至关重要的作用。 这个观察结果引导我们设计一个简化的体系结构,它需要在原始视觉转换器上进行少量的代码更改。所提出的明智选择的设计有三个好…

Dify中的weaviate向量数据库操作

一.安装weaviate客户端 1.Dify 0.6.9中weaviate信息 在Dify 0.6.9版本中weaviate容器信息如下: # The Weaviate vector store. weaviate:image: semitechnologies/weaviate:1.19.0restart: alwaysvolumes:# Mount the Weaviate data directory to the container.- ./volume…

精简库存,避免售罄 零售商常见错误及策略

减少库存是库存管理中最容易被误解和管理不善的策略之一。但如果正确执行&#xff0c;精简运营可以大幅降低成本&#xff0c;同时减少缺货和新鲜产品的损坏。 问题是什么&#xff1f;太多企业在尝试精简库存时陷入了同样的陷阱。不依赖过剩库存的库存规划能够提供所需的灵活性…

室内精准定位是什么?室内精准定位的方式有哪些?

说到室内精准定位很多人可能会比较陌生&#xff0c;因为这一说法并没有大范围推广&#xff0c;又或者说只是很多相关行业的人才知道这样的说法。但是定位这一问题大家都知道吧&#xff1f;尤其是要到一个地方去&#xff0c;都会进行定位导航。那么这一般都是户外定位&#xff0…

智能车载防窒息系统设计

摘要 随着汽车行业的快速发展&#xff0c;车辆安全问题越来越受到人们的关注。其中&#xff0c;车载防窒息系统是一项重要的安全设备。本论文基于STM32单片机&#xff0c;设计了一种智能车载防窒息系统。该系统主要包括氧气浓度检测模块、温湿度检测模块、声音检测模块、光线检…