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

66 篇文章 11 订阅

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不愿意做鱼的小鲸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值