From 7293f04d18fb2e882e152f962c3aa1d8fcb1f93e Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Wed, 17 Nov 2021 15:46:35 +0800
Subject: [PATCH] 证书打印信息导出修改

---
 src/main/java/org/springblade/modules/accreditation/controller/AccreditationRecordsController.java |  275 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 274 insertions(+), 1 deletions(-)

diff --git a/src/main/java/org/springblade/modules/accreditation/controller/AccreditationRecordsController.java b/src/main/java/org/springblade/modules/accreditation/controller/AccreditationRecordsController.java
index 4900cc0..4e72d3a 100644
--- a/src/main/java/org/springblade/modules/accreditation/controller/AccreditationRecordsController.java
+++ b/src/main/java/org/springblade/modules/accreditation/controller/AccreditationRecordsController.java
@@ -1,11 +1,20 @@
 package org.springblade.modules.accreditation.controller;
 
 import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.enums.WriteDirectionEnum;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.metadata.fill.FillConfig;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
 import org.apache.commons.codec.Charsets;
+import org.apache.poi.hssf.usermodel.*;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.usermodel.*;
+import org.springblade.common.utils.ConvertUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
@@ -14,15 +23,22 @@
 import org.springblade.modules.FTP.FtpUtil;
 import org.springblade.modules.accreditation.excel.ExportSecurityBookPaperExcel;
 import org.springblade.modules.accreditation.excel.ExportSecurityPaperExcel;
+import org.springblade.modules.accreditation.excel.ExportSecurityPaperExcelVO;
 import org.springblade.modules.system.entity.User;
 import org.springblade.modules.system.service.IUserService;
 import org.springblade.modules.accreditation.entity.AccreditationRecords;
 import org.springblade.modules.accreditation.service.AccreditationRecordsService;
 import org.springblade.modules.accreditation.vo.AccreditationRecordsVo;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
 import org.springframework.web.bind.annotation.*;
 
+import javax.imageio.ImageIO;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
+import java.awt.image.BufferedImage;
+import java.io.*;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -274,4 +290,261 @@
 	}
 
 
+	/**
+	 * 导出证书制证信息(包含照片)
+	 */
+	@GetMapping("export-security-book-papers")
+	public void exportSecurityBookPapers(AccreditationRecordsVo accreditationRecords, HttpServletResponse response) throws Exception {
+		//按条件查询成绩数据
+		List<AccreditationRecordsVo> excels = accreditationRecordsService.exportSecurityBookPapers(accreditationRecords);
+		List<ExportSecurityPaperExcelVO> list = new ArrayList<>();
+		//数据转换封装
+		excels.forEach(accreditationRecordsVo -> {
+			ExportSecurityPaperExcelVO exportSecurityPaperExcelVO = new ExportSecurityPaperExcelVO();
+			//如果头像有
+			if (null != accreditationRecordsVo.getAvatar() && accreditationRecordsVo.getAvatar() != "") {
+				exportSecurityPaperExcelVO.setAvatar(accreditationRecordsVo.getAvatar());
+			}
+			exportSecurityPaperExcelVO.setName(accreditationRecordsVo.getRealName()+accreditationRecordsVo.getIdCardNo());
+			//封装
+			list.add(exportSecurityPaperExcelVO);
+		});
+		// 声明一个工作薄
+		HSSFWorkbook workBook = new HSSFWorkbook();
+		// 生成一个表格
+		HSSFSheet sheet = workBook.createSheet();
+		//首行锁定
+//		sheet.createFreezePane(0, 1, 0, 1);
+		workBook.setSheetName(0, "证书打印信息");
+		CellStyle style = workBook.createCellStyle();
+		Font font = workBook.getFontAt((short) 0);
+		font.setCharSet(HSSFFont.DEFAULT_CHARSET);
+		//更改默认字体大小
+		font.setFontHeightInPoints((short) 12);
+		font.setFontName("宋体");
+		style.setFont(font);
+		// 上下居中
+		style.setVerticalAlignment(VerticalAlignment.CENTER);
+		//默认宽高
+		sheet.setDefaultColumnWidth((short)11);
+
+		// 创建表格标题行 第一行
+//		HSSFRow titleRow = sheet.createRow(0);
+//		titleRow.setHeight((short) 300);
+//		titleRow.createCell(0).setCellValue("员工姓名");
+//		titleRow.createCell(1).setCellValue("员工照片");
+		HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
+		//如果总数小于等于7
+		if (list.size()<=7){
+			HSSFRow row = sheet.createRow(0);
+			row.setHeight((short) 1980);
+			HSSFRow row1 = sheet.createRow(1);
+			row1.setHeight((short) 300);
+			for (int i = 0; i < list.size(); i++) {
+				ExportSecurityPaperExcelVO checkWorkVo = list.get(i);
+				row1.createCell(i).setCellValue(checkWorkVo.getName());
+				//如果头像有
+				if (null != list.get(i).getAvatar() && list.get(i).getAvatar() != "") {
+					if (list.get(i).getAvatar().contains("http:")) {
+						//画图的顶级管理器,一个sheet只能获取一个(一定要注意这点)
+						BufferedImage bufferImg = null;
+						//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
+						ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
+						try {
+							bufferImg = ImageIO.read(new URL(list.get(i).getAvatar()));
+						} catch (IOException e) {
+							e.printStackTrace();
+						}
+						try {
+							ImageIO.write(bufferImg, "jpg", byteArrayOut);
+						} catch (IOException e) {
+							e.printStackTrace();
+						}
+						//anchor主要用于设置图片的属性
+						HSSFClientAnchor anchor =
+							new HSSFClientAnchor
+								(        0, //x缩放
+									0, // y缩放
+									1023, //最大1023
+									255, //最大255
+									(short) i,  //宽度占几格 0开始
+									0, //在第几行
+									(short) i, //宽度占几格 0开始
+									0 //第几列
+								);
+						//插入图片
+						patriarch.createPicture(anchor, workBook.addPicture(byteArrayOut.toByteArray(), XSSFWorkbook.PICTURE_TYPE_JPEG));
+					}
+				}
+			}
+		}else {
+			//总数大于7
+			List<ExportSecurityPaperExcelVO> excelList = new ArrayList<>();
+			//标记行,初始为0
+			int rowNum = -2;
+			for (int i = 0; i < list.size(); i++) {
+				//每次从集合中读取7个对象,求余数
+				if (i != 0 && (i + 1) % 7 == 0) {
+					excelList.add(list.get(i));
+					rowNum = rowNum + 2;
+					//写入表格
+					writeBookForEach(excelList,rowNum,workBook,sheet,patriarch);
+					//清空集合
+					excelList.clear();
+				} else {
+					excelList.add(list.get(i));
+				}
+			}
+			//判断余下的
+			if (excelList.size()>0){
+				rowNum++;
+				//写入表格
+				writeBookForEach(excelList,rowNum,workBook,sheet,patriarch);
+			}
+		}
+		//导出数据
+		response.setContentType("application/vnd.ms-excel; charset=UTF-8");
+		response.setHeader("Content-Disposition", "attachment;filename=" + "证书打印信息导出"+DateUtil.time() + ".xlsx");
+		workBook.write(response.getOutputStream());
+	}
+
+	/**
+	 * 循环写入表格
+	 * @param list 每行需要插入的数据
+	 * @param rowNum 行标记
+	 * @param workBook book
+	 * @param sheet sheet
+	 * @param patriarch 画图对象
+	 */
+	private void writeBookForEach(List<ExportSecurityPaperExcelVO> list, int rowNum, HSSFWorkbook workBook, HSSFSheet sheet, HSSFPatriarch patriarch) {
+		HSSFRow row = sheet.createRow(rowNum);
+		row.setHeight((short) 1980);
+		HSSFRow row1 = sheet.createRow(rowNum+1);
+		row1.setHeight((short) 300);
+		for (int i = 0; i < list.size(); i++) {
+			ExportSecurityPaperExcelVO checkWorkVo = list.get(i);
+			row1.createCell(i).setCellValue(checkWorkVo.getName());
+			//如果头像有
+			if (null != list.get(i).getAvatar() && list.get(i).getAvatar() != "") {
+				if (list.get(i).getAvatar().contains("http:")) {
+					//画图的顶级管理器,一个sheet只能获取一个(一定要注意这点)
+					BufferedImage bufferImg = null;
+					//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
+					ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
+					try {
+						bufferImg = ImageIO.read(new URL(list.get(i).getAvatar()));
+					} catch (IOException e) {
+						e.printStackTrace();
+					}
+					try {
+						ImageIO.write(bufferImg, "jpg", byteArrayOut);
+					} catch (IOException e) {
+						e.printStackTrace();
+					}
+					//anchor主要用于设置图片的属性
+					HSSFClientAnchor anchor =
+						new HSSFClientAnchor
+							(        0, //x缩放
+								0, // y缩放
+								1023, //最大1023
+								255, //最大255
+								(short) i,  //宽度占几格 0开始
+								rowNum, //在第几行
+								(short) i, //宽度占几格 0开始
+								rowNum //第几列
+							);
+					//插入图片
+					patriarch.createPicture(anchor, workBook.addPicture(byteArrayOut.toByteArray(), XSSFWorkbook.PICTURE_TYPE_JPEG));
+				}
+			}
+		}
+	}
+
+
+//	/**
+//	 * 导出证书制证信息(包含照片)  easyExcel 填充
+//	 */
+//	@GetMapping("export-security-book-papers")
+//	public void exportSecurityBookPapers(AccreditationRecordsVo accreditationRecords, HttpServletResponse response) throws Exception {
+//		//按条件查询成绩数据
+//		List<AccreditationRecordsVo> excels = accreditationRecordsService.exportSecurityBookPapers(accreditationRecords);
+//		List<ExportSecurityPaperExcelVO> list = new ArrayList<>();
+//		excels.forEach(accreditationRecordsVo -> {
+//			ExportSecurityPaperExcelVO exportSecurityPaperExcelVO = new ExportSecurityPaperExcelVO();
+//			//如果头像有
+//			if (null != accreditationRecordsVo.getAvatar() && accreditationRecordsVo.getAvatar() != "") {
+//				try {
+//					if (accreditationRecordsVo.getAvatar().contains("http:")) {
+//						exportSecurityPaperExcelVO.setAvatar(new URL(accreditationRecordsVo.getAvatar()));
+//					}
+//				} catch (MalformedURLException e) {
+//					e.printStackTrace();
+//				}
+//			}
+//			exportSecurityPaperExcelVO.setName(accreditationRecordsVo.getRealName()+accreditationRecordsVo.getIdCardNo());
+//			//封装
+//			list.add(exportSecurityPaperExcelVO);
+//		});
+//		String fileName = null;
+//		try {
+//			response.setContentType("application/vnd.ms-excel");
+//			response.setCharacterEncoding(org.apache.commons.codec.Charsets.UTF_8.name());
+//			fileName = URLEncoder.encode("证书制证数据"+ DateUtil.time(), Charsets.UTF_8.name());
+////			response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+//			//修改单元格格式为文本格式
+////			EasyExcel.write(response.getOutputStream(), AccreditationRecordsVo.class)
+////				.sheet("证书制证数据表")
+////				.doWrite(excels);
+//			// 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替
+//			// {} 代表普通变量 {.} 代表是list的变量securityPaper.xlsx
+//			String templateFileName = "xls" + File.separator + "securityPaper.xlsx";
+////			Resource resource = new ClassPathResource("xls" + File.separator + "securityPaper.xlsx");
+////			InputStream is = resource.getInputStream();
+////			ByteArrayOutputStream os = ConvertUtil.parse(is);
+//////			ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build();
+////			ExcelWriter excelWriter = EasyExcel.write().file(os).withTemplate(templateFileName).build();
+//
+//			ExcelWriter excelWriter = null;
+//			try {
+//				excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate
+//					(new ClassPathResource(templateFileName).getInputStream()).build();
+//			} catch (IOException e) {
+//			}
+//
+//			//设置横向填充
+//			FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();
+//			WriteSheet writeSheet = EasyExcel.writerSheet().build();
+//			excelWriter.fill(list, fillConfig, writeSheet);
+////			//如果总数小于等于8
+////			if (list.size()<=8){
+////				WriteSheet writeSheet = EasyExcel.writerSheet().build();
+////				excelWriter.fill(list, fillConfig, writeSheet);
+////			}else {
+////				//总数大于8
+////				List<ExportSecurityPaperExcelVO> excelList = new ArrayList<>();
+////				for (int i = 0; i < list.size(); i++) {
+////					//每次从集合中读取8个对象
+////					if (i != 0 && (i + 1) / 8 == 0) {
+////						WriteSheet writeSheet = EasyExcel.writerSheet().build();
+////						excelWriter.fill(excelList, fillConfig, writeSheet);
+////						//清空集合
+////						excelList.clear();
+////					} else {
+////						excelList.add(list.get(i));
+////					}
+////				}
+////				//判断余下的
+////				if (excelList.size()>0){
+////					WriteSheet writeSheet = EasyExcel.writerSheet().build();
+////					excelWriter.fill(excelList, fillConfig, writeSheet);
+////				}
+////			}
+//			// 别忘记关闭流
+//			excelWriter.finish();
+//		} catch (Throwable var6) {
+//			throw var6;
+//		}
+//	}
+
+
 }

--
Gitblit v1.9.3