奔跑的蜗牛119 发表于 2020-12-1 17:47

工作证,java实现

本帖最后由 奔跑的蜗牛119 于 2020-12-1 22:53 编辑

### 日常在论坛摸鱼,看到了好玩的帖子[打工人苦,有女朋友的打工人更苦!要替女朋友做几百个工作证!没有python真的不行!](https://www.52pojie.cn/forum.php?mod=viewthread&tid=1309176&extra=&highlight=%C5%AE%C5%F3%D3%D1&page=1),闲来无事,尝试下用Java hutool 工具包来实现一下。
### 导入主要依赖
```
      <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-poi</artifactId>
            <version>5.5.1</version>
      </dependency>
```
### 上代码(对excel表格标题做了下处理,改成了英文 name、depart、job。)
```
package com.sun;

import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;

import java.awt.*;
import java.io.File;
import java.util.Arrays;
import java.util.List;

/**
* @ClassName: image
*/
public class Iimage {
    private static void addText(File copyFile, String text, int y){
      ImgUtil.pressText(
                copyFile,
                copyFile,
                text, Color.black,
                //字体
                new Font("黑体", Font.BOLD, 50),
                //x坐标修正值。 默认在中间,偏移量相对于中间偏移
                50,
                //y坐标修正值。 默认在中间,偏移量相对于中间偏移
                y,
                //透明度:alpha 必须是范围 之内(包含边界值)的一个浮点数字
                1f
      );
    }
    private static void addPic(File copyFile, File file){
      ImgUtil.pressImage(
                copyFile,
                copyFile,
                //水印图片
                ImgUtil.read(file),
                //x坐标修正值。 默认在中间,偏移量相对于中间偏移
                5,
                //y坐标修正值。 默认在中间,偏移量相对于中间偏移
                -220,
                1f
      );
    }

    public static void main(String[] args) {
      //读取照片列表
      List<File> files = Arrays.asList(FileUtil.ls("D:\\idm下载\\Compressed\\photos\\工作证照片"));
      //读取人员信息
      ExcelReader reader = ExcelUtil.getReader("D:\\idm下载\\Compressed\\photos\\工作证信息.xlsx");
      List<ExcelEmp> excelEmp = reader.readAll(ExcelEmp.class);
      //填充数据
      for (int i = 0; i < excelEmp.size(); i++) {
            ExcelEmp emp = excelEmp.get(i);
            File copyFile = FileUtil.copy("D:\\idm下载\\Compressed\\photos\\工作证.png", "D:\\idm下载\\Compressed\\photos\\" + emp.getName() + ".png", false);
            // 姓名
            addText(copyFile,emp.getName(),30);
            // 部门
            addText(copyFile,emp.getDepart(),130);
            // 工作
            addText(copyFile,emp.getJob(),220);
            // 照片
            addPic(copyFile,files.get(i));
      }
    }
}
class ExcelEmp{
    private String name;
    private String depart;
    private String job;

    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }

    public String getDepart() {
      return depart;
    }

    public void setDepart(String depart) {
      this.depart = depart;
    }

    public String getJob() {
      return job;
    }

    public void setJob(String job) {
      this.job = job;
    }
}
```
### 后续优化:将照片文件存入map集合,通过get(姓名)方式获取图片

Canon 发表于 2020-12-1 18:19

如果能保证照片名称与excel里面的人名一致的话,可以把files处理为一个Map<String, File>,然后for里面根据人名在Map里面get

gaoyonggang66 发表于 2020-12-1 19:36

&#128514;必须顶顶,为了女朋友

sqzh 发表于 2020-12-1 19:42

专业啊,非专业看不懂

shengli917520 发表于 2020-12-1 19:43

为了女朋友学会很多技能

两只老虎 发表于 2020-12-1 19:46

爱情的力量是伟大的

huyifan311 发表于 2020-12-1 20:05

太专业了,小白看不懂啊{:1_925:}

风逝998 发表于 2020-12-1 20:11

谢谢分享

wysyz 发表于 2020-12-1 20:17

非专业看不懂

Coptis2020 发表于 2020-12-1 20:55

顶起来,给需要的人!
页: [1] 2
查看完整版本: 工作证,java实现