diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java index f4fd746..4ff0b77 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -2,6 +2,11 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.TemplateExportParams; +import cn.afterturn.easypoi.word.parse.excel.ExcelMapParse; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillConfig; import com.casic.missiles.service.listeners.util.PdfUtils; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; @@ -22,10 +27,14 @@ import com.spire.doc.documents.ShapeLineStyle; import com.spire.doc.documents.ShapeType; import com.spire.doc.fields.ShapeObject; -import org.apache.poi.ss.usermodel.Workbook; +import com.spire.xls.*; +import org.apache.commons.lang3.StringUtils; +import javax.imageio.ImageIO; +import javax.swing.*; import java.awt.*; import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; import java.io.*; import java.util.ArrayList; import java.util.HashMap; @@ -99,55 +108,156 @@ } private void sheetPage() { - // 加载模板 - TemplateExportParams params = new TemplateExportParams( - "D:\\casic\\cut\\航天检定证书模板.xls"); - Map>> sheetsMap = new HashMap<>(); - // ****** 准备数据 ******* - // 日期 - - for (int i = 0; i < 2; i++) { - List> list = new ArrayList(); - Map dateMap = new HashMap(); - dateMap.put("customerName", "2020-03-16"); - dateMap.put("sampleName", "1000"); - dateMap.put("sampleModelName", "100"); - dateMap.put("manufacturingNo", "50"); - dateMap.put("manufacturer", "100"); - dateMap.put("sheetName", "sheet名称" + (i + 1)); - List MapList = new ArrayList<>(); - for (int j = 0; j < 2; j++) { - Map map = new HashMap(); - map.put("model", "123" + j); - map.put("manufacturingNo", "12345"); - map.put("range", "12345"); - map.put("grade", "12345"); - map.put("certificateNo", "12345"); - map.put("validDate", "2024/3/12"); - MapList.add(map); - } - // **** 准备数据结束**** - dateMap.put("mapList", MapList); - list.add(dateMap); - sheetsMap.put(i, list); - } - try { - Workbook workbook = ExcelExportUtil.exportExcelClone(sheetsMap, params); - FileOutputStream fos = new FileOutputStream("D:\\casic\\cut\\test2.xls"); - workbook.write(fos); - fos.close(); - } catch (IOException ioe) { - System.out.println(""); - } +// // 加载模板 +// TemplateExportParams params = new TemplateExportParams( +// "D:\\casic\\cut\\航天检定证书模板.xls"); +// Map>> sheetsMap = new HashMap<>(); +// // ****** 准备数据 ******* +// // 日期 +// +// for (int i = 0; i < 2; i++) { +// List> list = new ArrayList(); +// Map dateMap = new HashMap(); +// dateMap.put("customerName", "2020-03-16"); +// dateMap.put("sampleName", "1000"); +// dateMap.put("sampleModelName", "100"); +// dateMap.put("manufacturingNo", "50"); +// dateMap.put("manufacturer", "100"); +// dateMap.put("sheetName", "sheet名称" + (i + 1)); +// List MapList = new ArrayList<>(); +// for (int j = 0; j < 2; j++) { +// Map map = new HashMap(); +// map.put("model", "123" + j); +// map.put("manufacturingNo", "12345"); +// map.put("range", "12345"); +// map.put("grade", "12345"); +// map.put("certificateNo", "12345"); +// map.put("validDate", "2024/3/12"); +// MapList.add(map); +// } +// // **** 准备数据结束**** +// dateMap.put("mapList", MapList); +// list.add(dateMap); +// sheetsMap.put(i, list); +// } +// try { +// Workbook workbook = ExcelExportUtil.exportExcelClone(sheetsMap, params); +// FileOutputStream fos = new FileOutputStream("D:\\casic\\cut\\test2.xls"); +// workbook.write(fos); +// fos.close(); +// } catch (IOException ioe) { +// System.out.println(""); +// } } - public static void main(String[] args) { + public static void main(String[] args) throws Exception { String path = "D:\\casic\\cut\\"; - String wordPath = path + "证书审批.docx"; - String pdfPath = path + "证书审批.pdf"; - PdfUtils.doc2pdf(wordPath,pdfPath); + String filePath = path + "1.xlsx"; + String image = path + "test.png"; + write("{qr}", image, filePath,path+"2.xls"); } + + public static void write(String val, String imgpath, String filePath, String outPath) throws Exception { + if (!StringUtils.isEmpty(val) && !val.equals("{qr}") && !val.equals("{qr}")) { + System.out.println("进来了 不匹配 跳出"); + return; + } + //载Excel示例文档 + Workbook workbook = new Workbook(); + workbook.loadFromFile(filePath); + //获取第一张工作表 + Worksheet worksheet = workbook.getWorksheets().get(0); + if (!StringUtils.isEmpty(val) && val.equals("{qr}")) { + //查找文档中的字符串“图片” + CellRange[] ranges = worksheet.findAllString(val, false, false); + for (int i = 0; i < ranges.length; i++) { + //重置文本为空 + ranges[0].setText(""); + //获取单元格所在的行列 + int row = ranges[0].getRow(); + int column = ranges[0].getColumn(); + double width = (ranges[0].getColumnWidth() * 7) * 5; + double height = ranges[0].getRowHeight() * 1.3; + //透明背景 + transferAlpha2File(imgpath, imgpath); +// 添加图片到获取的单元格 + ExcelPicture picture = worksheet.getPictures().add(row, column, imgpath); + picture.setTopRowOffset(5);//设置填充图片后的单元格 内边距 + picture.setLeftColumnOffset(10); +// 保存文档 + workbook.saveToFile(outPath, ExcelVersion.Version2013); + return; + } + return; + } + if (!StringUtils.isEmpty(val) && val.equals("{qr}")) { + CellRange[] ranges = worksheet.findAllString(val, false, false); + for (int i = 0; i < ranges.length; i++) { + //重置文本为空 + ranges[0].setText(""); + //获取单元格所在的行列 + int row = ranges[0].getRow(); + int column = ranges[0].getColumn(); + transferAlpha2File(imgpath, imgpath); + ExcelPicture picture = worksheet.getPictures().add(row, column, imgpath); + //保存文档 + workbook.saveToFile(outPath, ExcelVersion.Version2013); + return; + } + return; + } + } + /** + * @param imgSrc 原图片地址 + * @param imgTarget 新图片地址 + * @return 转换结果ture or false + */ + public static boolean transferAlpha2File(String imgSrc, String imgTarget) { + File file = new File(imgSrc); + InputStream is = null; + boolean result = false; + try { + is = new FileInputStream(file); + // 如果是MultipartFile类型,那么自身也有转换成流的方法:is = file.getInputStream(); + BufferedImage bi = ImageIO.read(is); + Image image = (Image) bi; + ImageIcon imageIcon = new ImageIcon(image); + BufferedImage bufferedImage = new BufferedImage(imageIcon.getIconWidth(), imageIcon.getIconHeight(), BufferedImage.TYPE_4BYTE_ABGR); + Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics(); + g2D.drawImage(imageIcon.getImage(), 0, 0, imageIcon.getImageObserver()); + int alpha = 0; + for (int j1 = bufferedImage.getMinY(); j1 < bufferedImage.getHeight(); j1++) { + for (int j2 = bufferedImage.getMinX(); j2 < bufferedImage.getWidth(); j2++) { + int rgb = bufferedImage.getRGB(j2, j1); + int R = (rgb & 0xff0000) >> 16; + int G = (rgb & 0xff00) >> 8; + int B = (rgb & 0xff); + if (((255 - R) < 30) && ((255 - G) < 30) && ((255 - B) < 30)) { + rgb = ((alpha + 1) << 24) | (rgb & 0x00ffffff); + } + bufferedImage.setRGB(j2, j1, rgb); + } + } + g2D.drawImage(bufferedImage, 0, 0, imageIcon.getImageObserver()); + result = ImageIO.write(bufferedImage, "png", new File(imgTarget));// 直接输出文件 +// result = ImageIO.write(bufferedImage, "jpg", new File(imgTarget));// 直接输出文件 + } catch (Exception e) { + e.printStackTrace(); + result = false; + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + } + } + } + return result; + } + + public static void mainss(String[] args) throws IOException, DocumentException { // 读取原始 PDF 文件 PdfReader reader = new PdfReader("file:///D:/casic/cut/1.pdf"); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java index f4fd746..4ff0b77 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -2,6 +2,11 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.TemplateExportParams; +import cn.afterturn.easypoi.word.parse.excel.ExcelMapParse; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillConfig; import com.casic.missiles.service.listeners.util.PdfUtils; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; @@ -22,10 +27,14 @@ import com.spire.doc.documents.ShapeLineStyle; import com.spire.doc.documents.ShapeType; import com.spire.doc.fields.ShapeObject; -import org.apache.poi.ss.usermodel.Workbook; +import com.spire.xls.*; +import org.apache.commons.lang3.StringUtils; +import javax.imageio.ImageIO; +import javax.swing.*; import java.awt.*; import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; import java.io.*; import java.util.ArrayList; import java.util.HashMap; @@ -99,55 +108,156 @@ } private void sheetPage() { - // 加载模板 - TemplateExportParams params = new TemplateExportParams( - "D:\\casic\\cut\\航天检定证书模板.xls"); - Map>> sheetsMap = new HashMap<>(); - // ****** 准备数据 ******* - // 日期 - - for (int i = 0; i < 2; i++) { - List> list = new ArrayList(); - Map dateMap = new HashMap(); - dateMap.put("customerName", "2020-03-16"); - dateMap.put("sampleName", "1000"); - dateMap.put("sampleModelName", "100"); - dateMap.put("manufacturingNo", "50"); - dateMap.put("manufacturer", "100"); - dateMap.put("sheetName", "sheet名称" + (i + 1)); - List MapList = new ArrayList<>(); - for (int j = 0; j < 2; j++) { - Map map = new HashMap(); - map.put("model", "123" + j); - map.put("manufacturingNo", "12345"); - map.put("range", "12345"); - map.put("grade", "12345"); - map.put("certificateNo", "12345"); - map.put("validDate", "2024/3/12"); - MapList.add(map); - } - // **** 准备数据结束**** - dateMap.put("mapList", MapList); - list.add(dateMap); - sheetsMap.put(i, list); - } - try { - Workbook workbook = ExcelExportUtil.exportExcelClone(sheetsMap, params); - FileOutputStream fos = new FileOutputStream("D:\\casic\\cut\\test2.xls"); - workbook.write(fos); - fos.close(); - } catch (IOException ioe) { - System.out.println(""); - } +// // 加载模板 +// TemplateExportParams params = new TemplateExportParams( +// "D:\\casic\\cut\\航天检定证书模板.xls"); +// Map>> sheetsMap = new HashMap<>(); +// // ****** 准备数据 ******* +// // 日期 +// +// for (int i = 0; i < 2; i++) { +// List> list = new ArrayList(); +// Map dateMap = new HashMap(); +// dateMap.put("customerName", "2020-03-16"); +// dateMap.put("sampleName", "1000"); +// dateMap.put("sampleModelName", "100"); +// dateMap.put("manufacturingNo", "50"); +// dateMap.put("manufacturer", "100"); +// dateMap.put("sheetName", "sheet名称" + (i + 1)); +// List MapList = new ArrayList<>(); +// for (int j = 0; j < 2; j++) { +// Map map = new HashMap(); +// map.put("model", "123" + j); +// map.put("manufacturingNo", "12345"); +// map.put("range", "12345"); +// map.put("grade", "12345"); +// map.put("certificateNo", "12345"); +// map.put("validDate", "2024/3/12"); +// MapList.add(map); +// } +// // **** 准备数据结束**** +// dateMap.put("mapList", MapList); +// list.add(dateMap); +// sheetsMap.put(i, list); +// } +// try { +// Workbook workbook = ExcelExportUtil.exportExcelClone(sheetsMap, params); +// FileOutputStream fos = new FileOutputStream("D:\\casic\\cut\\test2.xls"); +// workbook.write(fos); +// fos.close(); +// } catch (IOException ioe) { +// System.out.println(""); +// } } - public static void main(String[] args) { + public static void main(String[] args) throws Exception { String path = "D:\\casic\\cut\\"; - String wordPath = path + "证书审批.docx"; - String pdfPath = path + "证书审批.pdf"; - PdfUtils.doc2pdf(wordPath,pdfPath); + String filePath = path + "1.xlsx"; + String image = path + "test.png"; + write("{qr}", image, filePath,path+"2.xls"); } + + public static void write(String val, String imgpath, String filePath, String outPath) throws Exception { + if (!StringUtils.isEmpty(val) && !val.equals("{qr}") && !val.equals("{qr}")) { + System.out.println("进来了 不匹配 跳出"); + return; + } + //载Excel示例文档 + Workbook workbook = new Workbook(); + workbook.loadFromFile(filePath); + //获取第一张工作表 + Worksheet worksheet = workbook.getWorksheets().get(0); + if (!StringUtils.isEmpty(val) && val.equals("{qr}")) { + //查找文档中的字符串“图片” + CellRange[] ranges = worksheet.findAllString(val, false, false); + for (int i = 0; i < ranges.length; i++) { + //重置文本为空 + ranges[0].setText(""); + //获取单元格所在的行列 + int row = ranges[0].getRow(); + int column = ranges[0].getColumn(); + double width = (ranges[0].getColumnWidth() * 7) * 5; + double height = ranges[0].getRowHeight() * 1.3; + //透明背景 + transferAlpha2File(imgpath, imgpath); +// 添加图片到获取的单元格 + ExcelPicture picture = worksheet.getPictures().add(row, column, imgpath); + picture.setTopRowOffset(5);//设置填充图片后的单元格 内边距 + picture.setLeftColumnOffset(10); +// 保存文档 + workbook.saveToFile(outPath, ExcelVersion.Version2013); + return; + } + return; + } + if (!StringUtils.isEmpty(val) && val.equals("{qr}")) { + CellRange[] ranges = worksheet.findAllString(val, false, false); + for (int i = 0; i < ranges.length; i++) { + //重置文本为空 + ranges[0].setText(""); + //获取单元格所在的行列 + int row = ranges[0].getRow(); + int column = ranges[0].getColumn(); + transferAlpha2File(imgpath, imgpath); + ExcelPicture picture = worksheet.getPictures().add(row, column, imgpath); + //保存文档 + workbook.saveToFile(outPath, ExcelVersion.Version2013); + return; + } + return; + } + } + /** + * @param imgSrc 原图片地址 + * @param imgTarget 新图片地址 + * @return 转换结果ture or false + */ + public static boolean transferAlpha2File(String imgSrc, String imgTarget) { + File file = new File(imgSrc); + InputStream is = null; + boolean result = false; + try { + is = new FileInputStream(file); + // 如果是MultipartFile类型,那么自身也有转换成流的方法:is = file.getInputStream(); + BufferedImage bi = ImageIO.read(is); + Image image = (Image) bi; + ImageIcon imageIcon = new ImageIcon(image); + BufferedImage bufferedImage = new BufferedImage(imageIcon.getIconWidth(), imageIcon.getIconHeight(), BufferedImage.TYPE_4BYTE_ABGR); + Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics(); + g2D.drawImage(imageIcon.getImage(), 0, 0, imageIcon.getImageObserver()); + int alpha = 0; + for (int j1 = bufferedImage.getMinY(); j1 < bufferedImage.getHeight(); j1++) { + for (int j2 = bufferedImage.getMinX(); j2 < bufferedImage.getWidth(); j2++) { + int rgb = bufferedImage.getRGB(j2, j1); + int R = (rgb & 0xff0000) >> 16; + int G = (rgb & 0xff00) >> 8; + int B = (rgb & 0xff); + if (((255 - R) < 30) && ((255 - G) < 30) && ((255 - B) < 30)) { + rgb = ((alpha + 1) << 24) | (rgb & 0x00ffffff); + } + bufferedImage.setRGB(j2, j1, rgb); + } + } + g2D.drawImage(bufferedImage, 0, 0, imageIcon.getImageObserver()); + result = ImageIO.write(bufferedImage, "png", new File(imgTarget));// 直接输出文件 +// result = ImageIO.write(bufferedImage, "jpg", new File(imgTarget));// 直接输出文件 + } catch (Exception e) { + e.printStackTrace(); + result = false; + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + } + } + } + return result; + } + + public static void mainss(String[] args) throws IOException, DocumentException { // 读取原始 PDF 文件 PdfReader reader = new PdfReader("file:///D:/casic/cut/1.pdf"); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java index 0db1dd9..1b79dd5 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java @@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.docx4j.wml.R; import java.awt.*; import java.awt.image.BufferedImage; @@ -94,6 +95,9 @@ } private static void getQrCode(String tempDir, String customFileName, String wordOldUrl, FilePrintRegister filePrintRegister) throws IOException { + if(StringUtils.isEmpty(filePrintRegister.getQrCode())){ + return; + } String urlPath = StringUtils.isNotEmpty(customFileName) ? customFileName + ".jpg" : "检测.jpg"; String[] split = wordOldUrl.split("\\."); String content=""; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java index f4fd746..4ff0b77 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -2,6 +2,11 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.TemplateExportParams; +import cn.afterturn.easypoi.word.parse.excel.ExcelMapParse; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillConfig; import com.casic.missiles.service.listeners.util.PdfUtils; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; @@ -22,10 +27,14 @@ import com.spire.doc.documents.ShapeLineStyle; import com.spire.doc.documents.ShapeType; import com.spire.doc.fields.ShapeObject; -import org.apache.poi.ss.usermodel.Workbook; +import com.spire.xls.*; +import org.apache.commons.lang3.StringUtils; +import javax.imageio.ImageIO; +import javax.swing.*; import java.awt.*; import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; import java.io.*; import java.util.ArrayList; import java.util.HashMap; @@ -99,55 +108,156 @@ } private void sheetPage() { - // 加载模板 - TemplateExportParams params = new TemplateExportParams( - "D:\\casic\\cut\\航天检定证书模板.xls"); - Map>> sheetsMap = new HashMap<>(); - // ****** 准备数据 ******* - // 日期 - - for (int i = 0; i < 2; i++) { - List> list = new ArrayList(); - Map dateMap = new HashMap(); - dateMap.put("customerName", "2020-03-16"); - dateMap.put("sampleName", "1000"); - dateMap.put("sampleModelName", "100"); - dateMap.put("manufacturingNo", "50"); - dateMap.put("manufacturer", "100"); - dateMap.put("sheetName", "sheet名称" + (i + 1)); - List MapList = new ArrayList<>(); - for (int j = 0; j < 2; j++) { - Map map = new HashMap(); - map.put("model", "123" + j); - map.put("manufacturingNo", "12345"); - map.put("range", "12345"); - map.put("grade", "12345"); - map.put("certificateNo", "12345"); - map.put("validDate", "2024/3/12"); - MapList.add(map); - } - // **** 准备数据结束**** - dateMap.put("mapList", MapList); - list.add(dateMap); - sheetsMap.put(i, list); - } - try { - Workbook workbook = ExcelExportUtil.exportExcelClone(sheetsMap, params); - FileOutputStream fos = new FileOutputStream("D:\\casic\\cut\\test2.xls"); - workbook.write(fos); - fos.close(); - } catch (IOException ioe) { - System.out.println(""); - } +// // 加载模板 +// TemplateExportParams params = new TemplateExportParams( +// "D:\\casic\\cut\\航天检定证书模板.xls"); +// Map>> sheetsMap = new HashMap<>(); +// // ****** 准备数据 ******* +// // 日期 +// +// for (int i = 0; i < 2; i++) { +// List> list = new ArrayList(); +// Map dateMap = new HashMap(); +// dateMap.put("customerName", "2020-03-16"); +// dateMap.put("sampleName", "1000"); +// dateMap.put("sampleModelName", "100"); +// dateMap.put("manufacturingNo", "50"); +// dateMap.put("manufacturer", "100"); +// dateMap.put("sheetName", "sheet名称" + (i + 1)); +// List MapList = new ArrayList<>(); +// for (int j = 0; j < 2; j++) { +// Map map = new HashMap(); +// map.put("model", "123" + j); +// map.put("manufacturingNo", "12345"); +// map.put("range", "12345"); +// map.put("grade", "12345"); +// map.put("certificateNo", "12345"); +// map.put("validDate", "2024/3/12"); +// MapList.add(map); +// } +// // **** 准备数据结束**** +// dateMap.put("mapList", MapList); +// list.add(dateMap); +// sheetsMap.put(i, list); +// } +// try { +// Workbook workbook = ExcelExportUtil.exportExcelClone(sheetsMap, params); +// FileOutputStream fos = new FileOutputStream("D:\\casic\\cut\\test2.xls"); +// workbook.write(fos); +// fos.close(); +// } catch (IOException ioe) { +// System.out.println(""); +// } } - public static void main(String[] args) { + public static void main(String[] args) throws Exception { String path = "D:\\casic\\cut\\"; - String wordPath = path + "证书审批.docx"; - String pdfPath = path + "证书审批.pdf"; - PdfUtils.doc2pdf(wordPath,pdfPath); + String filePath = path + "1.xlsx"; + String image = path + "test.png"; + write("{qr}", image, filePath,path+"2.xls"); } + + public static void write(String val, String imgpath, String filePath, String outPath) throws Exception { + if (!StringUtils.isEmpty(val) && !val.equals("{qr}") && !val.equals("{qr}")) { + System.out.println("进来了 不匹配 跳出"); + return; + } + //载Excel示例文档 + Workbook workbook = new Workbook(); + workbook.loadFromFile(filePath); + //获取第一张工作表 + Worksheet worksheet = workbook.getWorksheets().get(0); + if (!StringUtils.isEmpty(val) && val.equals("{qr}")) { + //查找文档中的字符串“图片” + CellRange[] ranges = worksheet.findAllString(val, false, false); + for (int i = 0; i < ranges.length; i++) { + //重置文本为空 + ranges[0].setText(""); + //获取单元格所在的行列 + int row = ranges[0].getRow(); + int column = ranges[0].getColumn(); + double width = (ranges[0].getColumnWidth() * 7) * 5; + double height = ranges[0].getRowHeight() * 1.3; + //透明背景 + transferAlpha2File(imgpath, imgpath); +// 添加图片到获取的单元格 + ExcelPicture picture = worksheet.getPictures().add(row, column, imgpath); + picture.setTopRowOffset(5);//设置填充图片后的单元格 内边距 + picture.setLeftColumnOffset(10); +// 保存文档 + workbook.saveToFile(outPath, ExcelVersion.Version2013); + return; + } + return; + } + if (!StringUtils.isEmpty(val) && val.equals("{qr}")) { + CellRange[] ranges = worksheet.findAllString(val, false, false); + for (int i = 0; i < ranges.length; i++) { + //重置文本为空 + ranges[0].setText(""); + //获取单元格所在的行列 + int row = ranges[0].getRow(); + int column = ranges[0].getColumn(); + transferAlpha2File(imgpath, imgpath); + ExcelPicture picture = worksheet.getPictures().add(row, column, imgpath); + //保存文档 + workbook.saveToFile(outPath, ExcelVersion.Version2013); + return; + } + return; + } + } + /** + * @param imgSrc 原图片地址 + * @param imgTarget 新图片地址 + * @return 转换结果ture or false + */ + public static boolean transferAlpha2File(String imgSrc, String imgTarget) { + File file = new File(imgSrc); + InputStream is = null; + boolean result = false; + try { + is = new FileInputStream(file); + // 如果是MultipartFile类型,那么自身也有转换成流的方法:is = file.getInputStream(); + BufferedImage bi = ImageIO.read(is); + Image image = (Image) bi; + ImageIcon imageIcon = new ImageIcon(image); + BufferedImage bufferedImage = new BufferedImage(imageIcon.getIconWidth(), imageIcon.getIconHeight(), BufferedImage.TYPE_4BYTE_ABGR); + Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics(); + g2D.drawImage(imageIcon.getImage(), 0, 0, imageIcon.getImageObserver()); + int alpha = 0; + for (int j1 = bufferedImage.getMinY(); j1 < bufferedImage.getHeight(); j1++) { + for (int j2 = bufferedImage.getMinX(); j2 < bufferedImage.getWidth(); j2++) { + int rgb = bufferedImage.getRGB(j2, j1); + int R = (rgb & 0xff0000) >> 16; + int G = (rgb & 0xff00) >> 8; + int B = (rgb & 0xff); + if (((255 - R) < 30) && ((255 - G) < 30) && ((255 - B) < 30)) { + rgb = ((alpha + 1) << 24) | (rgb & 0x00ffffff); + } + bufferedImage.setRGB(j2, j1, rgb); + } + } + g2D.drawImage(bufferedImage, 0, 0, imageIcon.getImageObserver()); + result = ImageIO.write(bufferedImage, "png", new File(imgTarget));// 直接输出文件 +// result = ImageIO.write(bufferedImage, "jpg", new File(imgTarget));// 直接输出文件 + } catch (Exception e) { + e.printStackTrace(); + result = false; + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + } + } + } + return result; + } + + public static void mainss(String[] args) throws IOException, DocumentException { // 读取原始 PDF 文件 PdfReader reader = new PdfReader("file:///D:/casic/cut/1.pdf"); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java index 0db1dd9..1b79dd5 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java @@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.docx4j.wml.R; import java.awt.*; import java.awt.image.BufferedImage; @@ -94,6 +95,9 @@ } private static void getQrCode(String tempDir, String customFileName, String wordOldUrl, FilePrintRegister filePrintRegister) throws IOException { + if(StringUtils.isEmpty(filePrintRegister.getQrCode())){ + return; + } String urlPath = StringUtils.isNotEmpty(customFileName) ? customFileName + ".jpg" : "检测.jpg"; String[] split = wordOldUrl.split("\\."); String content=""; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index 02ab1bf..034dd94 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -9,14 +9,12 @@ import com.casic.missiles.enums.business.FilePrintEnum; import com.casic.missiles.enums.notifyevent.AwareFilePrintTypeEnum; import com.casic.missiles.service.listeners.register.data.PrintFileDataGeneric; -import com.casic.missiles.utils.MinioUtil; +import com.casic.missiles.service.listeners.util.ExcelPrintUtils; import com.casic.missiles.utils.QRCodeUtil; import com.casic.missiles.utils.SpringContextUtil; -import io.minio.MinioClient; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Workbook; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -85,7 +83,7 @@ } else { printDocUrl = populateExcelPrintFile(tempLocalFileDir, filePrintRegister, registerParameters.getCustomFileName()); } - if (registerParameters.getPdf() && printDocUrl.contains(WORD_SUFFIX)){ + if (registerParameters.getPdf() && printDocUrl.contains(WORD_SUFFIX)) { //默认转为docx,只需要进行docx的替换即可 String pdfNewUrl = printDocUrl.replaceAll(WORD_SUFFIX, PDF_SUFFIX); FilePrintRegisterUtils.wordToPdf(printDocUrl, pdfNewUrl); @@ -133,22 +131,7 @@ * @throws Exception */ private String populateExcelPrintFile(String tempLocalFileDir, FilePrintRegister filePrintRegister, String customFileName) throws Exception { - OutputStream output = new FileOutputStream("D:\\casic\\cut\\test.png"); - //二维码生成和添加 - QRCodeUtil.getQRCode(tempLocalFileDir + filePrintRegister.getFileName(), output); - // 加载模板 - TemplateExportParams params = new TemplateExportParams( - customFileName + ".xlsx"); - Map>> sheetsMap = new HashMap<>(); - try { - Workbook workbook = ExcelExportUtil.exportExcel(params, filePrintRegister.getParams()); - FileOutputStream fos = new FileOutputStream("D:\\casic\\cut\\test2.xlsx"); - workbook.write(fos); - fos.close(); - } catch (IOException ioe) { - log.error("excel 填充出现异常,异常信息为{}", ioe); - } - return tempLocalFileDir + customFileName + ".xlsx"; + return ExcelPrintUtils.filePrintGenerate(tempLocalFileDir, filePrintRegister, customFileName); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java index f4fd746..4ff0b77 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -2,6 +2,11 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.TemplateExportParams; +import cn.afterturn.easypoi.word.parse.excel.ExcelMapParse; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillConfig; import com.casic.missiles.service.listeners.util.PdfUtils; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; @@ -22,10 +27,14 @@ import com.spire.doc.documents.ShapeLineStyle; import com.spire.doc.documents.ShapeType; import com.spire.doc.fields.ShapeObject; -import org.apache.poi.ss.usermodel.Workbook; +import com.spire.xls.*; +import org.apache.commons.lang3.StringUtils; +import javax.imageio.ImageIO; +import javax.swing.*; import java.awt.*; import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; import java.io.*; import java.util.ArrayList; import java.util.HashMap; @@ -99,55 +108,156 @@ } private void sheetPage() { - // 加载模板 - TemplateExportParams params = new TemplateExportParams( - "D:\\casic\\cut\\航天检定证书模板.xls"); - Map>> sheetsMap = new HashMap<>(); - // ****** 准备数据 ******* - // 日期 - - for (int i = 0; i < 2; i++) { - List> list = new ArrayList(); - Map dateMap = new HashMap(); - dateMap.put("customerName", "2020-03-16"); - dateMap.put("sampleName", "1000"); - dateMap.put("sampleModelName", "100"); - dateMap.put("manufacturingNo", "50"); - dateMap.put("manufacturer", "100"); - dateMap.put("sheetName", "sheet名称" + (i + 1)); - List MapList = new ArrayList<>(); - for (int j = 0; j < 2; j++) { - Map map = new HashMap(); - map.put("model", "123" + j); - map.put("manufacturingNo", "12345"); - map.put("range", "12345"); - map.put("grade", "12345"); - map.put("certificateNo", "12345"); - map.put("validDate", "2024/3/12"); - MapList.add(map); - } - // **** 准备数据结束**** - dateMap.put("mapList", MapList); - list.add(dateMap); - sheetsMap.put(i, list); - } - try { - Workbook workbook = ExcelExportUtil.exportExcelClone(sheetsMap, params); - FileOutputStream fos = new FileOutputStream("D:\\casic\\cut\\test2.xls"); - workbook.write(fos); - fos.close(); - } catch (IOException ioe) { - System.out.println(""); - } +// // 加载模板 +// TemplateExportParams params = new TemplateExportParams( +// "D:\\casic\\cut\\航天检定证书模板.xls"); +// Map>> sheetsMap = new HashMap<>(); +// // ****** 准备数据 ******* +// // 日期 +// +// for (int i = 0; i < 2; i++) { +// List> list = new ArrayList(); +// Map dateMap = new HashMap(); +// dateMap.put("customerName", "2020-03-16"); +// dateMap.put("sampleName", "1000"); +// dateMap.put("sampleModelName", "100"); +// dateMap.put("manufacturingNo", "50"); +// dateMap.put("manufacturer", "100"); +// dateMap.put("sheetName", "sheet名称" + (i + 1)); +// List MapList = new ArrayList<>(); +// for (int j = 0; j < 2; j++) { +// Map map = new HashMap(); +// map.put("model", "123" + j); +// map.put("manufacturingNo", "12345"); +// map.put("range", "12345"); +// map.put("grade", "12345"); +// map.put("certificateNo", "12345"); +// map.put("validDate", "2024/3/12"); +// MapList.add(map); +// } +// // **** 准备数据结束**** +// dateMap.put("mapList", MapList); +// list.add(dateMap); +// sheetsMap.put(i, list); +// } +// try { +// Workbook workbook = ExcelExportUtil.exportExcelClone(sheetsMap, params); +// FileOutputStream fos = new FileOutputStream("D:\\casic\\cut\\test2.xls"); +// workbook.write(fos); +// fos.close(); +// } catch (IOException ioe) { +// System.out.println(""); +// } } - public static void main(String[] args) { + public static void main(String[] args) throws Exception { String path = "D:\\casic\\cut\\"; - String wordPath = path + "证书审批.docx"; - String pdfPath = path + "证书审批.pdf"; - PdfUtils.doc2pdf(wordPath,pdfPath); + String filePath = path + "1.xlsx"; + String image = path + "test.png"; + write("{qr}", image, filePath,path+"2.xls"); } + + public static void write(String val, String imgpath, String filePath, String outPath) throws Exception { + if (!StringUtils.isEmpty(val) && !val.equals("{qr}") && !val.equals("{qr}")) { + System.out.println("进来了 不匹配 跳出"); + return; + } + //载Excel示例文档 + Workbook workbook = new Workbook(); + workbook.loadFromFile(filePath); + //获取第一张工作表 + Worksheet worksheet = workbook.getWorksheets().get(0); + if (!StringUtils.isEmpty(val) && val.equals("{qr}")) { + //查找文档中的字符串“图片” + CellRange[] ranges = worksheet.findAllString(val, false, false); + for (int i = 0; i < ranges.length; i++) { + //重置文本为空 + ranges[0].setText(""); + //获取单元格所在的行列 + int row = ranges[0].getRow(); + int column = ranges[0].getColumn(); + double width = (ranges[0].getColumnWidth() * 7) * 5; + double height = ranges[0].getRowHeight() * 1.3; + //透明背景 + transferAlpha2File(imgpath, imgpath); +// 添加图片到获取的单元格 + ExcelPicture picture = worksheet.getPictures().add(row, column, imgpath); + picture.setTopRowOffset(5);//设置填充图片后的单元格 内边距 + picture.setLeftColumnOffset(10); +// 保存文档 + workbook.saveToFile(outPath, ExcelVersion.Version2013); + return; + } + return; + } + if (!StringUtils.isEmpty(val) && val.equals("{qr}")) { + CellRange[] ranges = worksheet.findAllString(val, false, false); + for (int i = 0; i < ranges.length; i++) { + //重置文本为空 + ranges[0].setText(""); + //获取单元格所在的行列 + int row = ranges[0].getRow(); + int column = ranges[0].getColumn(); + transferAlpha2File(imgpath, imgpath); + ExcelPicture picture = worksheet.getPictures().add(row, column, imgpath); + //保存文档 + workbook.saveToFile(outPath, ExcelVersion.Version2013); + return; + } + return; + } + } + /** + * @param imgSrc 原图片地址 + * @param imgTarget 新图片地址 + * @return 转换结果ture or false + */ + public static boolean transferAlpha2File(String imgSrc, String imgTarget) { + File file = new File(imgSrc); + InputStream is = null; + boolean result = false; + try { + is = new FileInputStream(file); + // 如果是MultipartFile类型,那么自身也有转换成流的方法:is = file.getInputStream(); + BufferedImage bi = ImageIO.read(is); + Image image = (Image) bi; + ImageIcon imageIcon = new ImageIcon(image); + BufferedImage bufferedImage = new BufferedImage(imageIcon.getIconWidth(), imageIcon.getIconHeight(), BufferedImage.TYPE_4BYTE_ABGR); + Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics(); + g2D.drawImage(imageIcon.getImage(), 0, 0, imageIcon.getImageObserver()); + int alpha = 0; + for (int j1 = bufferedImage.getMinY(); j1 < bufferedImage.getHeight(); j1++) { + for (int j2 = bufferedImage.getMinX(); j2 < bufferedImage.getWidth(); j2++) { + int rgb = bufferedImage.getRGB(j2, j1); + int R = (rgb & 0xff0000) >> 16; + int G = (rgb & 0xff00) >> 8; + int B = (rgb & 0xff); + if (((255 - R) < 30) && ((255 - G) < 30) && ((255 - B) < 30)) { + rgb = ((alpha + 1) << 24) | (rgb & 0x00ffffff); + } + bufferedImage.setRGB(j2, j1, rgb); + } + } + g2D.drawImage(bufferedImage, 0, 0, imageIcon.getImageObserver()); + result = ImageIO.write(bufferedImage, "png", new File(imgTarget));// 直接输出文件 +// result = ImageIO.write(bufferedImage, "jpg", new File(imgTarget));// 直接输出文件 + } catch (Exception e) { + e.printStackTrace(); + result = false; + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + } + } + } + return result; + } + + public static void mainss(String[] args) throws IOException, DocumentException { // 读取原始 PDF 文件 PdfReader reader = new PdfReader("file:///D:/casic/cut/1.pdf"); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java index 0db1dd9..1b79dd5 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java @@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.docx4j.wml.R; import java.awt.*; import java.awt.image.BufferedImage; @@ -94,6 +95,9 @@ } private static void getQrCode(String tempDir, String customFileName, String wordOldUrl, FilePrintRegister filePrintRegister) throws IOException { + if(StringUtils.isEmpty(filePrintRegister.getQrCode())){ + return; + } String urlPath = StringUtils.isNotEmpty(customFileName) ? customFileName + ".jpg" : "检测.jpg"; String[] split = wordOldUrl.split("\\."); String content=""; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index 02ab1bf..034dd94 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -9,14 +9,12 @@ import com.casic.missiles.enums.business.FilePrintEnum; import com.casic.missiles.enums.notifyevent.AwareFilePrintTypeEnum; import com.casic.missiles.service.listeners.register.data.PrintFileDataGeneric; -import com.casic.missiles.utils.MinioUtil; +import com.casic.missiles.service.listeners.util.ExcelPrintUtils; import com.casic.missiles.utils.QRCodeUtil; import com.casic.missiles.utils.SpringContextUtil; -import io.minio.MinioClient; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Workbook; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -85,7 +83,7 @@ } else { printDocUrl = populateExcelPrintFile(tempLocalFileDir, filePrintRegister, registerParameters.getCustomFileName()); } - if (registerParameters.getPdf() && printDocUrl.contains(WORD_SUFFIX)){ + if (registerParameters.getPdf() && printDocUrl.contains(WORD_SUFFIX)) { //默认转为docx,只需要进行docx的替换即可 String pdfNewUrl = printDocUrl.replaceAll(WORD_SUFFIX, PDF_SUFFIX); FilePrintRegisterUtils.wordToPdf(printDocUrl, pdfNewUrl); @@ -133,22 +131,7 @@ * @throws Exception */ private String populateExcelPrintFile(String tempLocalFileDir, FilePrintRegister filePrintRegister, String customFileName) throws Exception { - OutputStream output = new FileOutputStream("D:\\casic\\cut\\test.png"); - //二维码生成和添加 - QRCodeUtil.getQRCode(tempLocalFileDir + filePrintRegister.getFileName(), output); - // 加载模板 - TemplateExportParams params = new TemplateExportParams( - customFileName + ".xlsx"); - Map>> sheetsMap = new HashMap<>(); - try { - Workbook workbook = ExcelExportUtil.exportExcel(params, filePrintRegister.getParams()); - FileOutputStream fos = new FileOutputStream("D:\\casic\\cut\\test2.xlsx"); - workbook.write(fos); - fos.close(); - } catch (IOException ioe) { - log.error("excel 填充出现异常,异常信息为{}", ioe); - } - return tempLocalFileDir + customFileName + ".xlsx"; + return ExcelPrintUtils.filePrintGenerate(tempLocalFileDir, filePrintRegister, customFileName); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificatePrintFileData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificatePrintFileData.java index de4085c..251b515 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificatePrintFileData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificatePrintFileData.java @@ -48,6 +48,7 @@ } //初始化,生成模板文件 FilePrintRegister filePrintRegister = initialization(templateFileDir, metaData.getId(), getTemplateName(metaData.getTemplateId())); + filePrintRegister.setTemplateWordType(metaData.getCertificateReportTypeName().contains("检测") ? true : false); //填充定制化的参数 filePrintRegister.setParams(certificateFileParamCreator(metaData.getOrderId(), metaData.getSampleId())); //定制化参数开发 @@ -56,7 +57,6 @@ } - /** * 处理定制化的日期 * diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java index f4fd746..4ff0b77 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -2,6 +2,11 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.TemplateExportParams; +import cn.afterturn.easypoi.word.parse.excel.ExcelMapParse; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillConfig; import com.casic.missiles.service.listeners.util.PdfUtils; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; @@ -22,10 +27,14 @@ import com.spire.doc.documents.ShapeLineStyle; import com.spire.doc.documents.ShapeType; import com.spire.doc.fields.ShapeObject; -import org.apache.poi.ss.usermodel.Workbook; +import com.spire.xls.*; +import org.apache.commons.lang3.StringUtils; +import javax.imageio.ImageIO; +import javax.swing.*; import java.awt.*; import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; import java.io.*; import java.util.ArrayList; import java.util.HashMap; @@ -99,55 +108,156 @@ } private void sheetPage() { - // 加载模板 - TemplateExportParams params = new TemplateExportParams( - "D:\\casic\\cut\\航天检定证书模板.xls"); - Map>> sheetsMap = new HashMap<>(); - // ****** 准备数据 ******* - // 日期 - - for (int i = 0; i < 2; i++) { - List> list = new ArrayList(); - Map dateMap = new HashMap(); - dateMap.put("customerName", "2020-03-16"); - dateMap.put("sampleName", "1000"); - dateMap.put("sampleModelName", "100"); - dateMap.put("manufacturingNo", "50"); - dateMap.put("manufacturer", "100"); - dateMap.put("sheetName", "sheet名称" + (i + 1)); - List MapList = new ArrayList<>(); - for (int j = 0; j < 2; j++) { - Map map = new HashMap(); - map.put("model", "123" + j); - map.put("manufacturingNo", "12345"); - map.put("range", "12345"); - map.put("grade", "12345"); - map.put("certificateNo", "12345"); - map.put("validDate", "2024/3/12"); - MapList.add(map); - } - // **** 准备数据结束**** - dateMap.put("mapList", MapList); - list.add(dateMap); - sheetsMap.put(i, list); - } - try { - Workbook workbook = ExcelExportUtil.exportExcelClone(sheetsMap, params); - FileOutputStream fos = new FileOutputStream("D:\\casic\\cut\\test2.xls"); - workbook.write(fos); - fos.close(); - } catch (IOException ioe) { - System.out.println(""); - } +// // 加载模板 +// TemplateExportParams params = new TemplateExportParams( +// "D:\\casic\\cut\\航天检定证书模板.xls"); +// Map>> sheetsMap = new HashMap<>(); +// // ****** 准备数据 ******* +// // 日期 +// +// for (int i = 0; i < 2; i++) { +// List> list = new ArrayList(); +// Map dateMap = new HashMap(); +// dateMap.put("customerName", "2020-03-16"); +// dateMap.put("sampleName", "1000"); +// dateMap.put("sampleModelName", "100"); +// dateMap.put("manufacturingNo", "50"); +// dateMap.put("manufacturer", "100"); +// dateMap.put("sheetName", "sheet名称" + (i + 1)); +// List MapList = new ArrayList<>(); +// for (int j = 0; j < 2; j++) { +// Map map = new HashMap(); +// map.put("model", "123" + j); +// map.put("manufacturingNo", "12345"); +// map.put("range", "12345"); +// map.put("grade", "12345"); +// map.put("certificateNo", "12345"); +// map.put("validDate", "2024/3/12"); +// MapList.add(map); +// } +// // **** 准备数据结束**** +// dateMap.put("mapList", MapList); +// list.add(dateMap); +// sheetsMap.put(i, list); +// } +// try { +// Workbook workbook = ExcelExportUtil.exportExcelClone(sheetsMap, params); +// FileOutputStream fos = new FileOutputStream("D:\\casic\\cut\\test2.xls"); +// workbook.write(fos); +// fos.close(); +// } catch (IOException ioe) { +// System.out.println(""); +// } } - public static void main(String[] args) { + public static void main(String[] args) throws Exception { String path = "D:\\casic\\cut\\"; - String wordPath = path + "证书审批.docx"; - String pdfPath = path + "证书审批.pdf"; - PdfUtils.doc2pdf(wordPath,pdfPath); + String filePath = path + "1.xlsx"; + String image = path + "test.png"; + write("{qr}", image, filePath,path+"2.xls"); } + + public static void write(String val, String imgpath, String filePath, String outPath) throws Exception { + if (!StringUtils.isEmpty(val) && !val.equals("{qr}") && !val.equals("{qr}")) { + System.out.println("进来了 不匹配 跳出"); + return; + } + //载Excel示例文档 + Workbook workbook = new Workbook(); + workbook.loadFromFile(filePath); + //获取第一张工作表 + Worksheet worksheet = workbook.getWorksheets().get(0); + if (!StringUtils.isEmpty(val) && val.equals("{qr}")) { + //查找文档中的字符串“图片” + CellRange[] ranges = worksheet.findAllString(val, false, false); + for (int i = 0; i < ranges.length; i++) { + //重置文本为空 + ranges[0].setText(""); + //获取单元格所在的行列 + int row = ranges[0].getRow(); + int column = ranges[0].getColumn(); + double width = (ranges[0].getColumnWidth() * 7) * 5; + double height = ranges[0].getRowHeight() * 1.3; + //透明背景 + transferAlpha2File(imgpath, imgpath); +// 添加图片到获取的单元格 + ExcelPicture picture = worksheet.getPictures().add(row, column, imgpath); + picture.setTopRowOffset(5);//设置填充图片后的单元格 内边距 + picture.setLeftColumnOffset(10); +// 保存文档 + workbook.saveToFile(outPath, ExcelVersion.Version2013); + return; + } + return; + } + if (!StringUtils.isEmpty(val) && val.equals("{qr}")) { + CellRange[] ranges = worksheet.findAllString(val, false, false); + for (int i = 0; i < ranges.length; i++) { + //重置文本为空 + ranges[0].setText(""); + //获取单元格所在的行列 + int row = ranges[0].getRow(); + int column = ranges[0].getColumn(); + transferAlpha2File(imgpath, imgpath); + ExcelPicture picture = worksheet.getPictures().add(row, column, imgpath); + //保存文档 + workbook.saveToFile(outPath, ExcelVersion.Version2013); + return; + } + return; + } + } + /** + * @param imgSrc 原图片地址 + * @param imgTarget 新图片地址 + * @return 转换结果ture or false + */ + public static boolean transferAlpha2File(String imgSrc, String imgTarget) { + File file = new File(imgSrc); + InputStream is = null; + boolean result = false; + try { + is = new FileInputStream(file); + // 如果是MultipartFile类型,那么自身也有转换成流的方法:is = file.getInputStream(); + BufferedImage bi = ImageIO.read(is); + Image image = (Image) bi; + ImageIcon imageIcon = new ImageIcon(image); + BufferedImage bufferedImage = new BufferedImage(imageIcon.getIconWidth(), imageIcon.getIconHeight(), BufferedImage.TYPE_4BYTE_ABGR); + Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics(); + g2D.drawImage(imageIcon.getImage(), 0, 0, imageIcon.getImageObserver()); + int alpha = 0; + for (int j1 = bufferedImage.getMinY(); j1 < bufferedImage.getHeight(); j1++) { + for (int j2 = bufferedImage.getMinX(); j2 < bufferedImage.getWidth(); j2++) { + int rgb = bufferedImage.getRGB(j2, j1); + int R = (rgb & 0xff0000) >> 16; + int G = (rgb & 0xff00) >> 8; + int B = (rgb & 0xff); + if (((255 - R) < 30) && ((255 - G) < 30) && ((255 - B) < 30)) { + rgb = ((alpha + 1) << 24) | (rgb & 0x00ffffff); + } + bufferedImage.setRGB(j2, j1, rgb); + } + } + g2D.drawImage(bufferedImage, 0, 0, imageIcon.getImageObserver()); + result = ImageIO.write(bufferedImage, "png", new File(imgTarget));// 直接输出文件 +// result = ImageIO.write(bufferedImage, "jpg", new File(imgTarget));// 直接输出文件 + } catch (Exception e) { + e.printStackTrace(); + result = false; + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + } + } + } + return result; + } + + public static void mainss(String[] args) throws IOException, DocumentException { // 读取原始 PDF 文件 PdfReader reader = new PdfReader("file:///D:/casic/cut/1.pdf"); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java index 0db1dd9..1b79dd5 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java @@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.docx4j.wml.R; import java.awt.*; import java.awt.image.BufferedImage; @@ -94,6 +95,9 @@ } private static void getQrCode(String tempDir, String customFileName, String wordOldUrl, FilePrintRegister filePrintRegister) throws IOException { + if(StringUtils.isEmpty(filePrintRegister.getQrCode())){ + return; + } String urlPath = StringUtils.isNotEmpty(customFileName) ? customFileName + ".jpg" : "检测.jpg"; String[] split = wordOldUrl.split("\\."); String content=""; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index 02ab1bf..034dd94 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -9,14 +9,12 @@ import com.casic.missiles.enums.business.FilePrintEnum; import com.casic.missiles.enums.notifyevent.AwareFilePrintTypeEnum; import com.casic.missiles.service.listeners.register.data.PrintFileDataGeneric; -import com.casic.missiles.utils.MinioUtil; +import com.casic.missiles.service.listeners.util.ExcelPrintUtils; import com.casic.missiles.utils.QRCodeUtil; import com.casic.missiles.utils.SpringContextUtil; -import io.minio.MinioClient; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Workbook; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -85,7 +83,7 @@ } else { printDocUrl = populateExcelPrintFile(tempLocalFileDir, filePrintRegister, registerParameters.getCustomFileName()); } - if (registerParameters.getPdf() && printDocUrl.contains(WORD_SUFFIX)){ + if (registerParameters.getPdf() && printDocUrl.contains(WORD_SUFFIX)) { //默认转为docx,只需要进行docx的替换即可 String pdfNewUrl = printDocUrl.replaceAll(WORD_SUFFIX, PDF_SUFFIX); FilePrintRegisterUtils.wordToPdf(printDocUrl, pdfNewUrl); @@ -133,22 +131,7 @@ * @throws Exception */ private String populateExcelPrintFile(String tempLocalFileDir, FilePrintRegister filePrintRegister, String customFileName) throws Exception { - OutputStream output = new FileOutputStream("D:\\casic\\cut\\test.png"); - //二维码生成和添加 - QRCodeUtil.getQRCode(tempLocalFileDir + filePrintRegister.getFileName(), output); - // 加载模板 - TemplateExportParams params = new TemplateExportParams( - customFileName + ".xlsx"); - Map>> sheetsMap = new HashMap<>(); - try { - Workbook workbook = ExcelExportUtil.exportExcel(params, filePrintRegister.getParams()); - FileOutputStream fos = new FileOutputStream("D:\\casic\\cut\\test2.xlsx"); - workbook.write(fos); - fos.close(); - } catch (IOException ioe) { - log.error("excel 填充出现异常,异常信息为{}", ioe); - } - return tempLocalFileDir + customFileName + ".xlsx"; + return ExcelPrintUtils.filePrintGenerate(tempLocalFileDir, filePrintRegister, customFileName); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificatePrintFileData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificatePrintFileData.java index de4085c..251b515 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificatePrintFileData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificatePrintFileData.java @@ -48,6 +48,7 @@ } //初始化,生成模板文件 FilePrintRegister filePrintRegister = initialization(templateFileDir, metaData.getId(), getTemplateName(metaData.getTemplateId())); + filePrintRegister.setTemplateWordType(metaData.getCertificateReportTypeName().contains("检测") ? true : false); //填充定制化的参数 filePrintRegister.setParams(certificateFileParamCreator(metaData.getOrderId(), metaData.getSampleId())); //定制化参数开发 @@ -56,7 +57,6 @@ } - /** * 处理定制化的日期 * diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificateReportApprovalData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificateReportApprovalData.java index 6f0152a..d8a36fd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificateReportApprovalData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificateReportApprovalData.java @@ -53,13 +53,14 @@ List approvalImageList = customizedSignNamesParamCreator(); //初始化,生成模板文件 FilePrintRegister filePrintRegister = initialization(templateFileDir, metaData.getId(), metaData.getCertificateReportFile()); + filePrintRegister.setTemplateWordType(metaData.getCertificateReportTypeName().contains("检测") ? true : false); filePrintRegister.setCustomFileName(registerParameters.getCustomFileName()); filePrintRegister.setParams(new HashMap()); //定制化签名开发 List electronicSignList = this.createSignNames(ApprovalLogMap, filePrintRegister, approvalImageList); filePrintRegister.setElectronicImageList(electronicSignList); //新增编制的 - createImageNoApproval(metaData.getSignId(),metaData.getApprovalSignIds(), filePrintRegister); + createImageNoApproval(metaData.getSignId(), metaData.getApprovalSignIds(), filePrintRegister); return filePrintRegister; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java index f4fd746..4ff0b77 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -2,6 +2,11 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.TemplateExportParams; +import cn.afterturn.easypoi.word.parse.excel.ExcelMapParse; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillConfig; import com.casic.missiles.service.listeners.util.PdfUtils; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; @@ -22,10 +27,14 @@ import com.spire.doc.documents.ShapeLineStyle; import com.spire.doc.documents.ShapeType; import com.spire.doc.fields.ShapeObject; -import org.apache.poi.ss.usermodel.Workbook; +import com.spire.xls.*; +import org.apache.commons.lang3.StringUtils; +import javax.imageio.ImageIO; +import javax.swing.*; import java.awt.*; import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; import java.io.*; import java.util.ArrayList; import java.util.HashMap; @@ -99,55 +108,156 @@ } private void sheetPage() { - // 加载模板 - TemplateExportParams params = new TemplateExportParams( - "D:\\casic\\cut\\航天检定证书模板.xls"); - Map>> sheetsMap = new HashMap<>(); - // ****** 准备数据 ******* - // 日期 - - for (int i = 0; i < 2; i++) { - List> list = new ArrayList(); - Map dateMap = new HashMap(); - dateMap.put("customerName", "2020-03-16"); - dateMap.put("sampleName", "1000"); - dateMap.put("sampleModelName", "100"); - dateMap.put("manufacturingNo", "50"); - dateMap.put("manufacturer", "100"); - dateMap.put("sheetName", "sheet名称" + (i + 1)); - List MapList = new ArrayList<>(); - for (int j = 0; j < 2; j++) { - Map map = new HashMap(); - map.put("model", "123" + j); - map.put("manufacturingNo", "12345"); - map.put("range", "12345"); - map.put("grade", "12345"); - map.put("certificateNo", "12345"); - map.put("validDate", "2024/3/12"); - MapList.add(map); - } - // **** 准备数据结束**** - dateMap.put("mapList", MapList); - list.add(dateMap); - sheetsMap.put(i, list); - } - try { - Workbook workbook = ExcelExportUtil.exportExcelClone(sheetsMap, params); - FileOutputStream fos = new FileOutputStream("D:\\casic\\cut\\test2.xls"); - workbook.write(fos); - fos.close(); - } catch (IOException ioe) { - System.out.println(""); - } +// // 加载模板 +// TemplateExportParams params = new TemplateExportParams( +// "D:\\casic\\cut\\航天检定证书模板.xls"); +// Map>> sheetsMap = new HashMap<>(); +// // ****** 准备数据 ******* +// // 日期 +// +// for (int i = 0; i < 2; i++) { +// List> list = new ArrayList(); +// Map dateMap = new HashMap(); +// dateMap.put("customerName", "2020-03-16"); +// dateMap.put("sampleName", "1000"); +// dateMap.put("sampleModelName", "100"); +// dateMap.put("manufacturingNo", "50"); +// dateMap.put("manufacturer", "100"); +// dateMap.put("sheetName", "sheet名称" + (i + 1)); +// List MapList = new ArrayList<>(); +// for (int j = 0; j < 2; j++) { +// Map map = new HashMap(); +// map.put("model", "123" + j); +// map.put("manufacturingNo", "12345"); +// map.put("range", "12345"); +// map.put("grade", "12345"); +// map.put("certificateNo", "12345"); +// map.put("validDate", "2024/3/12"); +// MapList.add(map); +// } +// // **** 准备数据结束**** +// dateMap.put("mapList", MapList); +// list.add(dateMap); +// sheetsMap.put(i, list); +// } +// try { +// Workbook workbook = ExcelExportUtil.exportExcelClone(sheetsMap, params); +// FileOutputStream fos = new FileOutputStream("D:\\casic\\cut\\test2.xls"); +// workbook.write(fos); +// fos.close(); +// } catch (IOException ioe) { +// System.out.println(""); +// } } - public static void main(String[] args) { + public static void main(String[] args) throws Exception { String path = "D:\\casic\\cut\\"; - String wordPath = path + "证书审批.docx"; - String pdfPath = path + "证书审批.pdf"; - PdfUtils.doc2pdf(wordPath,pdfPath); + String filePath = path + "1.xlsx"; + String image = path + "test.png"; + write("{qr}", image, filePath,path+"2.xls"); } + + public static void write(String val, String imgpath, String filePath, String outPath) throws Exception { + if (!StringUtils.isEmpty(val) && !val.equals("{qr}") && !val.equals("{qr}")) { + System.out.println("进来了 不匹配 跳出"); + return; + } + //载Excel示例文档 + Workbook workbook = new Workbook(); + workbook.loadFromFile(filePath); + //获取第一张工作表 + Worksheet worksheet = workbook.getWorksheets().get(0); + if (!StringUtils.isEmpty(val) && val.equals("{qr}")) { + //查找文档中的字符串“图片” + CellRange[] ranges = worksheet.findAllString(val, false, false); + for (int i = 0; i < ranges.length; i++) { + //重置文本为空 + ranges[0].setText(""); + //获取单元格所在的行列 + int row = ranges[0].getRow(); + int column = ranges[0].getColumn(); + double width = (ranges[0].getColumnWidth() * 7) * 5; + double height = ranges[0].getRowHeight() * 1.3; + //透明背景 + transferAlpha2File(imgpath, imgpath); +// 添加图片到获取的单元格 + ExcelPicture picture = worksheet.getPictures().add(row, column, imgpath); + picture.setTopRowOffset(5);//设置填充图片后的单元格 内边距 + picture.setLeftColumnOffset(10); +// 保存文档 + workbook.saveToFile(outPath, ExcelVersion.Version2013); + return; + } + return; + } + if (!StringUtils.isEmpty(val) && val.equals("{qr}")) { + CellRange[] ranges = worksheet.findAllString(val, false, false); + for (int i = 0; i < ranges.length; i++) { + //重置文本为空 + ranges[0].setText(""); + //获取单元格所在的行列 + int row = ranges[0].getRow(); + int column = ranges[0].getColumn(); + transferAlpha2File(imgpath, imgpath); + ExcelPicture picture = worksheet.getPictures().add(row, column, imgpath); + //保存文档 + workbook.saveToFile(outPath, ExcelVersion.Version2013); + return; + } + return; + } + } + /** + * @param imgSrc 原图片地址 + * @param imgTarget 新图片地址 + * @return 转换结果ture or false + */ + public static boolean transferAlpha2File(String imgSrc, String imgTarget) { + File file = new File(imgSrc); + InputStream is = null; + boolean result = false; + try { + is = new FileInputStream(file); + // 如果是MultipartFile类型,那么自身也有转换成流的方法:is = file.getInputStream(); + BufferedImage bi = ImageIO.read(is); + Image image = (Image) bi; + ImageIcon imageIcon = new ImageIcon(image); + BufferedImage bufferedImage = new BufferedImage(imageIcon.getIconWidth(), imageIcon.getIconHeight(), BufferedImage.TYPE_4BYTE_ABGR); + Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics(); + g2D.drawImage(imageIcon.getImage(), 0, 0, imageIcon.getImageObserver()); + int alpha = 0; + for (int j1 = bufferedImage.getMinY(); j1 < bufferedImage.getHeight(); j1++) { + for (int j2 = bufferedImage.getMinX(); j2 < bufferedImage.getWidth(); j2++) { + int rgb = bufferedImage.getRGB(j2, j1); + int R = (rgb & 0xff0000) >> 16; + int G = (rgb & 0xff00) >> 8; + int B = (rgb & 0xff); + if (((255 - R) < 30) && ((255 - G) < 30) && ((255 - B) < 30)) { + rgb = ((alpha + 1) << 24) | (rgb & 0x00ffffff); + } + bufferedImage.setRGB(j2, j1, rgb); + } + } + g2D.drawImage(bufferedImage, 0, 0, imageIcon.getImageObserver()); + result = ImageIO.write(bufferedImage, "png", new File(imgTarget));// 直接输出文件 +// result = ImageIO.write(bufferedImage, "jpg", new File(imgTarget));// 直接输出文件 + } catch (Exception e) { + e.printStackTrace(); + result = false; + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + } + } + } + return result; + } + + public static void mainss(String[] args) throws IOException, DocumentException { // 读取原始 PDF 文件 PdfReader reader = new PdfReader("file:///D:/casic/cut/1.pdf"); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java index 0db1dd9..1b79dd5 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java @@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.docx4j.wml.R; import java.awt.*; import java.awt.image.BufferedImage; @@ -94,6 +95,9 @@ } private static void getQrCode(String tempDir, String customFileName, String wordOldUrl, FilePrintRegister filePrintRegister) throws IOException { + if(StringUtils.isEmpty(filePrintRegister.getQrCode())){ + return; + } String urlPath = StringUtils.isNotEmpty(customFileName) ? customFileName + ".jpg" : "检测.jpg"; String[] split = wordOldUrl.split("\\."); String content=""; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index 02ab1bf..034dd94 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -9,14 +9,12 @@ import com.casic.missiles.enums.business.FilePrintEnum; import com.casic.missiles.enums.notifyevent.AwareFilePrintTypeEnum; import com.casic.missiles.service.listeners.register.data.PrintFileDataGeneric; -import com.casic.missiles.utils.MinioUtil; +import com.casic.missiles.service.listeners.util.ExcelPrintUtils; import com.casic.missiles.utils.QRCodeUtil; import com.casic.missiles.utils.SpringContextUtil; -import io.minio.MinioClient; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Workbook; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -85,7 +83,7 @@ } else { printDocUrl = populateExcelPrintFile(tempLocalFileDir, filePrintRegister, registerParameters.getCustomFileName()); } - if (registerParameters.getPdf() && printDocUrl.contains(WORD_SUFFIX)){ + if (registerParameters.getPdf() && printDocUrl.contains(WORD_SUFFIX)) { //默认转为docx,只需要进行docx的替换即可 String pdfNewUrl = printDocUrl.replaceAll(WORD_SUFFIX, PDF_SUFFIX); FilePrintRegisterUtils.wordToPdf(printDocUrl, pdfNewUrl); @@ -133,22 +131,7 @@ * @throws Exception */ private String populateExcelPrintFile(String tempLocalFileDir, FilePrintRegister filePrintRegister, String customFileName) throws Exception { - OutputStream output = new FileOutputStream("D:\\casic\\cut\\test.png"); - //二维码生成和添加 - QRCodeUtil.getQRCode(tempLocalFileDir + filePrintRegister.getFileName(), output); - // 加载模板 - TemplateExportParams params = new TemplateExportParams( - customFileName + ".xlsx"); - Map>> sheetsMap = new HashMap<>(); - try { - Workbook workbook = ExcelExportUtil.exportExcel(params, filePrintRegister.getParams()); - FileOutputStream fos = new FileOutputStream("D:\\casic\\cut\\test2.xlsx"); - workbook.write(fos); - fos.close(); - } catch (IOException ioe) { - log.error("excel 填充出现异常,异常信息为{}", ioe); - } - return tempLocalFileDir + customFileName + ".xlsx"; + return ExcelPrintUtils.filePrintGenerate(tempLocalFileDir, filePrintRegister, customFileName); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificatePrintFileData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificatePrintFileData.java index de4085c..251b515 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificatePrintFileData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificatePrintFileData.java @@ -48,6 +48,7 @@ } //初始化,生成模板文件 FilePrintRegister filePrintRegister = initialization(templateFileDir, metaData.getId(), getTemplateName(metaData.getTemplateId())); + filePrintRegister.setTemplateWordType(metaData.getCertificateReportTypeName().contains("检测") ? true : false); //填充定制化的参数 filePrintRegister.setParams(certificateFileParamCreator(metaData.getOrderId(), metaData.getSampleId())); //定制化参数开发 @@ -56,7 +57,6 @@ } - /** * 处理定制化的日期 * diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificateReportApprovalData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificateReportApprovalData.java index 6f0152a..d8a36fd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificateReportApprovalData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificateReportApprovalData.java @@ -53,13 +53,14 @@ List approvalImageList = customizedSignNamesParamCreator(); //初始化,生成模板文件 FilePrintRegister filePrintRegister = initialization(templateFileDir, metaData.getId(), metaData.getCertificateReportFile()); + filePrintRegister.setTemplateWordType(metaData.getCertificateReportTypeName().contains("检测") ? true : false); filePrintRegister.setCustomFileName(registerParameters.getCustomFileName()); filePrintRegister.setParams(new HashMap()); //定制化签名开发 List electronicSignList = this.createSignNames(ApprovalLogMap, filePrintRegister, approvalImageList); filePrintRegister.setElectronicImageList(electronicSignList); //新增编制的 - createImageNoApproval(metaData.getSignId(),metaData.getApprovalSignIds(), filePrintRegister); + createImageNoApproval(metaData.getSignId(), metaData.getApprovalSignIds(), filePrintRegister); return filePrintRegister; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/util/ExcelPrintUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/util/ExcelPrintUtils.java new file mode 100644 index 0000000..86b6498 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/util/ExcelPrintUtils.java @@ -0,0 +1,151 @@ +package com.casic.missiles.service.listeners.util; + +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.TemplateExportParams; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import com.casic.missiles.dto.business.file.FilePrintRegister; +import com.casic.missiles.utils.QRCodeUtil; +import com.spire.xls.CellRange; +import com.spire.xls.ExcelPicture; +import com.spire.xls.ExcelVersion; +import com.spire.xls.Worksheet; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.Workbook; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author cz + * @date 2024-03-21 + */ +@Slf4j +public class ExcelPrintUtils { + + public static String filePrintGenerate(String tempLocalFileDir, FilePrintRegister filePrintRegister, String customFileName) throws Exception { + //填充数据 + String wordUrl = exportParam(tempLocalFileDir, filePrintRegister, customFileName); + //生成二维码 + getQrCode(filePrintRegister.getTemDir(), filePrintRegister.getCustomFileName(), wordUrl, filePrintRegister); + Map> sameKeyWordSealMaps = filePrintRegister.getElectronicImageList().stream() + .filter(electronicImage -> StringUtils.isNotEmpty(electronicImage.getKeyWord())) + .collect( + Collectors.groupingBy(ElectronicImage::getKeyWord) + ); + //3、根据关键字进行添加签章和签字 + imageWrite(filePrintRegister.getTemDir() + filePrintRegister.getFileName(), sameKeyWordSealMaps); + return tempLocalFileDir + customFileName; + } + + /** + * 填充参数 + * + * @param tempLocalFileDir + * @param filePrintRegister + * @param customFileName + * @return + * @throws IOException + */ + private static String exportParam(String tempLocalFileDir, FilePrintRegister filePrintRegister, String customFileName) throws IOException { + // 加载模板 + customFileName = StringUtils.isNotEmpty(customFileName) ? customFileName + "xls" : filePrintRegister.getFileName(); + TemplateExportParams params = new TemplateExportParams(tempLocalFileDir + customFileName); + //添加sheet三页的打印 + Map>> sheetsMap = new HashMap<>(); + for (int i = 0; i < params.getDataSheetNum(); i++) { + List> list = new ArrayList(); + list.add(filePrintRegister.getParams()); + sheetsMap.put(i, list); + } + try { + Workbook workbook = ExcelExportUtil.exportExcel(params, filePrintRegister.getParams()); + FileOutputStream fos = new FileOutputStream(tempLocalFileDir + customFileName); + workbook.write(fos); + fos.close(); + } catch (IOException ioe) { + log.error("excel 填充出现异常,异常信息为{}", ioe); + } + return customFileName; + } + + + /** + * 获取二维码 + * + * @param tempDir + * @param customFileName + * @param wordOldUrl + * @param filePrintRegister + * @throws IOException + */ + private static void getQrCode(String tempDir, String customFileName, String wordOldUrl, FilePrintRegister filePrintRegister) throws IOException { + if (StringUtils.isEmpty(filePrintRegister.getQrCode())) { + return; + } + String urlPath = StringUtils.isNotEmpty(customFileName) ? customFileName + ".jpg" : "检测.jpg"; + String[] split = wordOldUrl.split("\\."); + String content = ""; + if (split.length > 1) { + content = split[0] + "_" + System.currentTimeMillis() + ".pdf"; + } else { + content = wordOldUrl + System.currentTimeMillis(); + } + filePrintRegister.setQrCode(content); + // 加载模板 + OutputStream output = new FileOutputStream(tempDir + urlPath); + QRCodeUtil.getQRCode(tempDir + content, output); + } + + /** + * 填充图片 + */ + private static void imageWrite(String filePath, Map> sameKeyWordSealMaps) throws Exception { + if (ObjectUtils.isEmpty(sameKeyWordSealMaps)) { + log.debug("无图片配置填充"); + return; + } + //载Excel示例文档 + com.spire.xls.Workbook workbook = new com.spire.xls.Workbook(); + workbook.loadFromFile(filePath); + //获取第一张工作表 + for (int j = 0; j < workbook.getWorksheets().size(); j++) { + Worksheet worksheet = workbook.getWorksheets().get(j); + for (Map.Entry> entry : sameKeyWordSealMaps.entrySet()) { + List electronicSealList = entry.getValue(); + if (CollectionUtils.isEmpty(electronicSealList)) { + continue; + } + //相同关键字的索引 + for (ElectronicImage electronicSeal : electronicSealList) { + CellRange[] ranges = worksheet.findAllString(entry.getKey(), false, false); + for (int i = 0; i < ranges.length; i++) { + //重置文本为空 + ranges[i].setText(""); + //获取单元格所在的行列 + int row = ranges[i].getRow(); + int column = ranges[i].getColumn(); + // 添加图片到获取的单元格 + ExcelPicture picture = worksheet.getPictures().add(row, column, electronicSeal.getSealImageUrlsDir()); + picture.setTopRowOffset(5);//设置填充图片后的单元格 内边距 + picture.setLeftColumnOffset(10); + } + } + } + } + //保存文档 + workbook.saveToFile(filePath, ExcelVersion.Version2013); + return; + } + + +}