在项目中遇到下载个人简历的需求
在个人证件照粘贴区,下载时需要填充图片到excel表格的指定区域,但是经过尝试,照片区域的合拼单元格无效,但文字区域的可以,没有办法只能自己想办法。
@RequestMapping("/download/{id}")
public void exporExcel(String id ,HttpServletResponse response) throws IOException {
Student student = this.studentService.getById(id);
OutputStream outputStream = response.getOutputStream();
if(student.getPersonnelCategory().equals("HJ")||student.getPersonnelCategory().equals("DY")||student.getPersonnelCategory().equals("GY")){
response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(student.getName()+student.getSerialNumber()+"XX.xlsx", "UTF-8"));
response.setContentType("application/msexcel;charset=UTF-8");//设置类型
response.setHeader("Pragma", "No-cache");//设置头
response.setHeader("Cache-Control", "no-cache");//设置头
response.setDateHeader("Expires", 0);//设置日期头
//本地测试用
ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(ResourceUtils.getFile("src/main/webapp/assets/common/file/XX.xlsx")).build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
//填充普通变量
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", student.getName());
FileAttribute fileAttribute = fileAttributeService.getById(student.getCertificatePic());
if(fileAttribute != null ){
String fileName = fileAttribute.getFileName();
String frontUrl = "file:D:/upload/image/student/"+fileName;
//判断本地是否有此图片
File file = new File("D:/upload/image/student/"+fileName);
WriteCellData writeCellData = new WriteCellData<>();
ImageData imageData = new ImageData();
List<ImageData> imageDataList = new ArrayList<>();
writeCellData.setImageDataList(imageDataList);
imageDataList.add(imageData);
byte[] bytes = File2byte(file);
imageData.setImage(bytes);
imageData.setRelativeFirstRowIndex(0);
imageData.setRelativeFirstColumnIndex(0);
imageData.setRelativeLastRowIndex(2);
imageData.setRelativeLastColumnIndex(0);
if(file.exists()) {
map.put("CertificatePic",writeCellData);
} else {
map.put("CertificatePic","1寸照片粘贴处");
}
}
excelWriter.fill(map, writeSheet);
excelWriter.finish();
outputStream.flush();
response.getOutputStream().close();
}
}