java导入导出excel数据图片合成工具

news2024/11/18 5:47:46

目录

  • java导出和导入excel数据
    • java读取excel数据
    • java数据导出成excel表格
  • java服务端图片合成的工具

java导出和导入excel数据

可以使用hutool的ExcelUtil工具。
在项目中加入以下依赖:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.16</version>
</dependency>

java读取excel数据

    // 批量导入用户
    @Log("批量导入用户")
    @ApiOperation("批量导入用户")
    @PostMapping("/loadtocreate")
    public ResultVO loadtocreate(MultipartFile file) throws IOException {
        // 获取文件扩展名,不带 .
        String extensionName = FileUtil.getExtensionName(file.getOriginalFilename());
        if (!extensionName.equals("xls") && !extensionName.equals("xlsx")) {
            return new ResultVO(211, "批量导入请上传excel表格文件");
        }

        ExcelReader reader = ExcelUtil.getReader(file.getInputStream());
        reader.addHeaderAlias("用户名", "username");
        reader.addHeaderAlias("昵称", "nickName");
        reader.addHeaderAlias("电话", "phone");
        reader.addHeaderAlias("邮箱", "email");
        reader.addHeaderAlias("性别", "gender");
        List<UserOfExcel> list = reader.readAll(UserOfExcel.class);
        Long orgId = SecurityUtils.getCurrentUserOrgId();
        Org org = new Org();
        org.setId(orgId);

        Set<Role> roles = new HashSet<>();
        Role role = new Role();
        // 普通用户
        role.setId(2L);
        roles.add(role);

        List<User> users = new ArrayList<>();
        for (UserOfExcel userOfExcel : list) {
            User user = new User();
            BeanUtils.copyProperties(userOfExcel, user);
            user.setPassword(passwordEncoder.encode("123456"));
            user.setIsAuth(true);
            user.setOrg(org);
            user.setRoles(roles);
            user.setEnabled(true);
            users.add(user);
        }
        userService.createAll(users);
        return new ResultVO(200, "导入成功");
    }
    
    // FileUtill类方法:获取文件扩展名,不带 .
    public static String getExtensionName(String filename) {
        if ((filename != null) && (filename.length() > 0)) {
            int dot = filename.lastIndexOf('.');
            if ((dot > -1) && (dot < (filename.length() - 1))) {
                return filename.substring(dot + 1);
            }
        }
        return filename;
    }

在这里插入图片描述

主要代码:
文件流读取xls或者xlsx文件,然后通过设置表头字段,将每一行数据转换成一个java对象,最后导出成List

        ExcelReader reader = ExcelUtil.getReader(file.getInputStream());
        reader.addHeaderAlias("用户名", "username");
        reader.addHeaderAlias("昵称", "nickName");
        reader.addHeaderAlias("电话", "phone");
        reader.addHeaderAlias("邮箱", "email");
        reader.addHeaderAlias("性别", "gender");
        List<UserOfExcel> list = reader.readAll(UserOfExcel.class);

java数据导出成excel表格

    @Override
    public void download(List<FeedbackDto> queryAll, HttpServletResponse response) throws IOException {
        List<Map<String, Object>> list = new ArrayList<>();
        for (FeedbackDto feedbackDto : queryAll) {
            Map<String, Object> map = new LinkedHashMap<>();
            map.put("反馈内容", feedbackDto.getContent());
            map.put("反馈类型", feedbackDto.getType());
            map.put("设备ID", feedbackDto.getSysId());
            map.put("用户联系方式", feedbackDto.getUserId());
            map.put("openid", feedbackDto.getOpenId());
            map.put("反馈资料", feedbackWebPath + "preview?id=" + feedbackDto.getId());
            map.put("反馈时间", feedbackDto.getTime());
            list.add(map);
        }
        // 导出excel
        FileUtil.downloadExcel(list, response);
    }
    
    
    
    /**
     * 导出excel
     */
    public static void downloadExcel(List<Map<String, Object>> list, HttpServletResponse response) throws IOException {
        // 文件名
        String tempPath = SYS_TEM_DIR + IdUtil.fastSimpleUUID() + ".xlsx";
        File file = new File(tempPath);
        BigExcelWriter writer = ExcelUtil.getBigWriter(file);
        // 一次性写出内容,使用默认样式,强制输出标题
        writer.write(list, true);
        //response为HttpServletResponse对象
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
        response.setHeader("Content-Disposition", "attachment;filename=file.xlsx");
        ServletOutputStream out = response.getOutputStream();
        // 终止后删除临时文件
        file.deleteOnExit();
        writer.flush(out, true);
        //此处记得关闭输出Servlet流
        IoUtil.close(out);
    }

java数据导出成excel表格的的关键操作:
1、将Java对象List转换成List<Map<String, Object>>的List,每个Map为excel一行数据
2、新建文件,使用ExcelUtil写入数据
3、可使用HttpServletResponse输出响应流,在客户端直接下载

java服务端图片合成的工具

ImageCombiner是一个专门用于Java服务端图片合成的工具,没有很复杂的功能,简单实用,从实际业务场景出发,提供简单的接口,几行代码即可实现图片拼合(当然用于合成水印也可以),素材上支持图片、文本、矩形三种,支持定位、缩放、旋转、圆角、透明度、颜色、字体、字号、删除线、居中绘制、文本自动换行等特性,足够覆盖图片合成的日常需求。

在项目中加入以下依赖:

<dependency>
    <groupId>com.freewayso</groupId>
    <artifactId>image-combiner</artifactId>
    <version>2.6.3</version>
</dependency>

示例合成海报代码:
海报背景 + 二维码 + 头像图片

  public static String MergeImage2(String qrCodeUrl, String headImgUrl, String filename) throws Exception {
        // 背景图
        String bgImagePath = "https://img-blog.csdnimg.cn/fff475d24c8d47cf893528b508c60941.jpeg";
        //头像图片
        BufferedImage avatar = ImageIO.read(new URL(headImgUrl));
        BufferedImage bgImage = ImageIO.read(new URL(bgImagePath));

        //合成器和背景图(整个图片的宽高和相关计算依赖于背景图,所以背景图的大小是个基准)
        ImageCombiner combiner = new ImageCombiner(bgImage, OutputFormat.PNG);
        combiner.setBackgroundBlur(0);     //设置背景高斯模糊(毛玻璃效果)
        combiner.setCanvasRoundCorner(0); //设置整图圆角(输出格式必须为PNG)

        //头像(圆角设置一定的大小,可以把头像变成圆的)
        combiner.addImageElement(avatar, 503, 1200, 186, 186, ZoomMode.WidthHeight)
                .setRoundCorner(10)
                .setBlur(0);       //高斯模糊,毛玻璃效果

        //二维码(强制按指定宽度、高度缩放)
        combiner.addImageElement(ImageIO.read(new URL(qrCodeUrl)), 138, 1200, 186, 186, ZoomMode.WidthHeight).setRoundCorner(10);

        //执行图片合并
        combiner.combine();

        //保存文件
        String path = "D:\\img\\" + filename + "_full.png";
        combiner.save(path);

        return path;
    }

    @Test
    public static void main(String[] args) throws Exception {
        String qrCodeUrl = "http://qiniu.qkongtao.cn/2020/03/weixin.jpg";
        String headImgUrl = "https://img-blog.csdnimg.cn/7c11e9a1b5764fa3b612545b65bf00e6.png";
        String path = MergeImage2(qrCodeUrl, headImgUrl, "111111111");
        System.out.println(path);
    }

效果如下:
在这里插入图片描述

image-combiner图像处理项目具体源码和教程可以看开源项目:https://gitee.com/dromara/image-combiner

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

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

相关文章

【计算机基础】绝对路径和相对路径

目录 一.绝对路径 二.相对路径 例如 三.举例 一.绝对路径 绝对路径是指从根目录开始的完整路径&#xff0c;包括所有父目录的路径&#xff0c;直到目标文件或者目录 所在的位置。 全文件名全路径文件名绝对路经完整的路径 例如&#xff0c;在windows系统中&#xff0c;绝…

《Linux基础》09. Shell 编程

Shell 编程 1&#xff1a;Shell 简介2&#xff1a;Shell 脚本2.1&#xff1a;规则与语法2.2&#xff1a;执行方式2.3&#xff1a;第一个 Shell 脚本 3&#xff1a;变量3.1&#xff1a;系统变量3.2&#xff1a;用户自定义变量3.2.1&#xff1a;规则3.2.2&#xff1a;基本语法3.2…

Python自动发送消息小脚本,可用于各种聊天框~

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,YOLO,活动领域博主爱笑的男孩。擅长深度学习,YOLO,活动,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typecollect 个…

安装k3s

k3s官方文档 architecture quick start 概述&#xff1a;k3s一个轻量级的kubernetes,因资源消耗知识kubernetes的一半&#xff0c;故取名k3s k3s的node分为 server node 和agent node: server node: 可以运行kubectl等命令&#xff0c;且包含 agent node的功能。agent node:…

【升级】专为小白设计的TypeScript入门课无密拟把疏狂图一醉

TypeScript&#xff1a;JavaScript的超集&#xff0c;提高代码可靠性和可维护性 【升级】专为小白设计的TypeScript入门课 download&#xff1a;https://www.666xit.com/3817/ 随着现代Web应用程序的复杂性增加&#xff0c;使用JavaScript编写大型项目变得越来越困难。TypeS…

Centos 安装MySQL

CentOS 安装 MySQL 1. 安装 VMware 以及 CentOS2. 安装 docker2.1 卸载&#xff08;可选&#xff09;2.2 安装 Docker2.3 启动 Docker2.4.配置镜像加速2.5 设置 Docker 开机自启 3. 安装 MySQL3.1 从docker镜像仓库中拉取mysql镜像3.2 创建实例&#xff0c;并启动3.3.查看docke…

20230422 | 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142. 环形链表 II

1、24. 两两交换链表中的节点 初始时&#xff0c;cur指向虚拟头结点&#xff0c;然后进行如下三步&#xff1a; 操作之后&#xff0c;链表如下&#xff1a; 看这个可能就更直观一些了&#xff1a; /*** Definition for singly-linked list.* public class ListNode {* i…

camunda流程引擎send task节点用途

Camunda的Send Task用于向外部系统或服务发送消息。消息可以是同步或异步的&#xff0c;可以发送到队列、主题或其他类型的消息中间件。Send Task通常用于将消息发送到外部系统&#xff0c;而无需等待响应或结果。相反&#xff0c;它只是向外部系统发出信号&#xff0c;通知其执…

使用Storm proxies动态代理IP如何正确设置使用海外IP代理?

正确设置使用海外IP代理需要以下几个步骤&#xff1a; 获取代理服务器的IP地址和端口号&#xff1a;可以在代理服务提供商的网站上或者代理IP池中获取相应的信息。在计算机或移动设备上配置代理服务器&#xff1a;打开网络设置&#xff0c;找到代理服务器的设置选项&#xff0c…

10. 并查集

10. 并查集 并查集是一种树型的数据结构 &#xff0c;并查集可以高效地进行如下操作&#xff1a; 查询元素p和元素q是否属于同一组 合并元素p和元素q所在的组 10.1 并查集结构 并查集也是一种树型结构&#xff0c;但这棵树跟我们之前讲的二叉树、红黑树、B树等都不一样&…

项目风险管理的5个重点 不得不重视

风险管理持续贯穿软件项目的整个生命周期&#xff0c;其对项目的影响非常大&#xff0c;那么如何高效管理项目风险&#xff1f;5个风险管理重点如下&#xff1a; 1、风险识别和科学分析 需要对风险发生的可能性进行分析&#xff0c;判断风险对项目影响可能性并记录其特征&#…

【 初识 Spring MyBatis 查询数据库 】

文章目录 一、概念二、为什么学 MyBatis三、怎么学 MyBatis四、第⼀个MyBatis查询4.1 MyBatis 在整个框架中的定位4.2 准备&#xff1a;创建库和表4.3 配置 MyBatis 开发环境4.3.1 添加MyBatis框架⽀持4.3.1.1 ⽼项⽬添加支持扩展&#xff1a;在⽼项⽬中快速添加框架 - EditSta…

ChatGPT 速通手册——不同相似度算法的分值介绍

不同相似度算法的分值介绍 在信息大暴涨的今天&#xff0c;人类已经不可能出现通才、全才式的人物。利用 ChatGPT 来询问我们未知领域的知识是很好的习惯和用法。但对严肃知识的学习&#xff0c;一定要通过权威来源复核审校&#xff0c;保证自己所学知识的正确。否则&#xff…

【安全学习笔记】信息收集-CDN相关的技术(CDN绕过)

CDN相关的技术&#xff08;CDN绕过&#xff09; CDN&#xff1a;内容分发网络&#xff0c;它是构建在现有网络基础之上的智能虚拟网络&#xff0c;依靠部署在各地的边缘服务器&#xff0c;通过中心平台的负载均衡、内容分发、调度等功能模块&#xff0c;使用户就近获取所需内容…

104. 二叉树的最大深度【75】

难度等级&#xff1a;容易 上一篇算法&#xff1a; 101. 对称二叉树【74】 力扣此题地址&#xff1a; 104. 二叉树的最大深度 - 力扣&#xff08;Leetcode&#xff09; 1.题目&#xff1a;104. 二叉树的最大深度 给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根…

【并发编程】Java并发之关键字synchronized使用和原理

文章目录 前言一、synchronized的四种应用方式修饰一个代码块修饰一个方法修饰一个静态的方法修饰一个类 二、synchronized底层语义原理三、理解Java对象头与Monitor四、synchronized代码块底层原理五、synchronized方法底层原理六、Java虚拟机对synchronized的优化偏向锁轻量级…

Finetuner+:为企业实现大模型微调和私有化部署

如 ChatGPT、GPT4 这样的大型语言模型就像是你为公司请的一个牛人顾问&#xff0c;他在 OpenAI、Google 等大公司被预训练了不少的行业内专业知识&#xff0c;所以加入你的公司后&#xff0c;你只需要输入 Prompt 给他&#xff0c; 介绍一些业务上的背景知识&#xff0c;他就能…

清除Github提交历史commit

如果提交代码到Github仓库时&#xff0c;不小心把敏感信息&#xff08;比如登陆账号和登陆密码&#xff09;提交了上去&#xff0c;尽快处理。 git log 查看提交记录 git log定位你误操作的那一个版本 ‘be757abcb2b6c2b86b489384aeb4619d9b8c94c7’ 比如这个是你提交版本的…

2023全网汇总PMP备考攻略(附答题技巧)

一&#xff0c;多复习和学习新版考纲 01《PMBOK》看三遍 这边建议看三遍《PMBOK》&#xff0c;更有利于我们巩固知识&#xff0c;查缺补漏。 第一遍 第一遍是老师带着我们去看。这个时候一定要非常专心&#xff0c;千万不要上课走神或者玩手机。因为这一遍老师会告诉我们&a…

FreeRTOS源码获取以及解释各个文件作用

1.源码可以在官网:FreeRTOS官网&#xff1a;https://www.freertos.org/下载 2.FreeRTOS源码内容介绍 名称 描述 FreeRTOS FreeRTOS内核 FreeRTOS-Plus FreeRTOS组件 tools 工具 GitHub-FreeRTOS-Home FreeRTOS的GitHub仓库链接 Quick_Start_Guide 快速入门指南官方…