diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java index 3534a47..5fb246a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java @@ -86,16 +86,4 @@ return resultData; } - @GetMapping("/prefixcode/list") - @ResponseBody - public Object getPreFixCodeList() throws Exception{ - Class fixCodeEnumClass = PrefixCodeEnum.class; - Field[] fixCodeEnumFileds = fixCodeEnumClass.getDeclaredFields(); - List fixCodeList=new ArrayList<>(); - for(Field field: fixCodeEnumFileds){ - fixCodeList.add( field.get(PrefixCodeEnum.class).toString()); - } - return ReturnUtil.success(fixCodeList); - } - } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java index 3534a47..5fb246a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java @@ -86,16 +86,4 @@ return resultData; } - @GetMapping("/prefixcode/list") - @ResponseBody - public Object getPreFixCodeList() throws Exception{ - Class fixCodeEnumClass = PrefixCodeEnum.class; - Field[] fixCodeEnumFileds = fixCodeEnumClass.getDeclaredFields(); - List fixCodeList=new ArrayList<>(); - for(Field field: fixCodeEnumFileds){ - fixCodeList.add( field.get(PrefixCodeEnum.class).toString()); - } - return ReturnUtil.success(fixCodeList); - } - } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java index 68334d8..21e34ae 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.system.*; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.system.SystemNotice; @@ -30,6 +31,8 @@ import javax.validation.Valid; import java.io.IOException; +import java.lang.reflect.Field; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -277,4 +280,17 @@ } return noticeService.noticeRead(noticeReadRequest); } + + @ApiOperation("获取业务编号前缀列表") + @PostMapping("/prefixcode/list") + @ResponseBody + public Object getPreFixCodeList() throws Exception{ + Class fixCodeEnumClass = PrefixCodeEnum.class; + Field[] fixCodeEnumFileds = fixCodeEnumClass.getDeclaredFields(); + List fixCodeList=new ArrayList<>(); + for(Field field: fixCodeEnumFileds){ + fixCodeList.add( field.get(PrefixCodeEnum.class).toString()); + } + return ReturnUtil.success(fixCodeList); + } } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java index 3534a47..5fb246a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java @@ -86,16 +86,4 @@ return resultData; } - @GetMapping("/prefixcode/list") - @ResponseBody - public Object getPreFixCodeList() throws Exception{ - Class fixCodeEnumClass = PrefixCodeEnum.class; - Field[] fixCodeEnumFileds = fixCodeEnumClass.getDeclaredFields(); - List fixCodeList=new ArrayList<>(); - for(Field field: fixCodeEnumFileds){ - fixCodeList.add( field.get(PrefixCodeEnum.class).toString()); - } - return ReturnUtil.success(fixCodeList); - } - } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java index 68334d8..21e34ae 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.system.*; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.system.SystemNotice; @@ -30,6 +31,8 @@ import javax.validation.Valid; import java.io.IOException; +import java.lang.reflect.Field; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -277,4 +280,17 @@ } return noticeService.noticeRead(noticeReadRequest); } + + @ApiOperation("获取业务编号前缀列表") + @PostMapping("/prefixcode/list") + @ResponseBody + public Object getPreFixCodeList() throws Exception{ + Class fixCodeEnumClass = PrefixCodeEnum.class; + Field[] fixCodeEnumFileds = fixCodeEnumClass.getDeclaredFields(); + List fixCodeList=new ArrayList<>(); + for(Field field: fixCodeEnumFileds){ + fixCodeList.add( field.get(PrefixCodeEnum.class).toString()); + } + return ReturnUtil.success(fixCodeList); + } } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java index fb6d4cf..5455fae 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java @@ -4,6 +4,8 @@ import cn.afterturn.easypoi.word.WordExportUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import com.casic.missiles.dto.business.certificate.FilePrintRegister; import com.spire.doc.*; import com.spire.doc.documents.*; import com.spire.doc.fields.DocPicture; @@ -15,7 +17,10 @@ import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; +import java.util.ArrayList; import java.util.Map; +import java.util.List; +import java.util.stream.Collectors; /** * @Author:zt @@ -60,12 +65,11 @@ // 加载文档 Document document = new Document(); document.loadFromFile(wordOldUrl); - -// 获取指定段落 + //获取指定段落 Section section = document.getSections().get(0); -// 获取段落总数 + //获取段落总数 int count = section.getParagraphs().getCount(); -// log.info("获取文档内容段落总数{}",count); + //log.info("获取文档内容段落总数{}",count); Paragraph paragraph = section.getParagraphs().get(0); // 判断是否需要替换书签位置文本内容 @@ -97,36 +101,31 @@ } /** + * 将相同关键字的印章添加到同一个位置进行打印 * 1、根据关键词位置添加电子印章 * 2、替换书签名位置文本内容 bookmarkName传参为null,则不进行书签替换操作 * - * @param wordOldUrl word文件路径 - * @param wordNewUrl 新word文件路径 - * @param stampImgUrl 电子印章图片路径 - * @param keyWord 关键字 (自定义) - * @param keyWordIndex 关键字索引 (-1) - * @param horizontal 电子印章水平位置 (260f) - * @param vertical 电子印章垂直位置 (-55f) - * @param stampWidth 电子印章宽度 (推荐120) - * @param stampHeight 电子印章高度(推荐120) + * @param wordOldUrl word文件路径 + * @param wordNewUrl 新word文件路径 + * @param electronicSealList 电子印章信息 */ - public static void addKeyWordStamp(String wordOldUrl, String wordNewUrl, String stampImgUrl, String stampImgUrl1, - String keyWord, Integer keyWordIndex, Float horizontal, - Float vertical, Float stampWidth, Float stampHeight) { + public static void addSameKeyWordStamp(String wordOldUrl, String wordNewUrl, List electronicSealList) throws RuntimeException { // 加载文档 Document document = new Document(); document.loadFromFile(wordOldUrl); + //获取关键字位置 - TextSelection[] textSelections = document.findAllString(keyWord, false, false); - //加签章照片 - if (ObjectUtils.isNotEmpty(textSelections) && StringUtils.isNotEmpty(stampImgUrl)) { + TextSelection[] textSelections = document.findAllString(electronicSealList.get(0).getKeyWord(), false, false); + for (ElectronicImage electronicSeal : electronicSealList) { + //加签章照片 + if (ObjectUtils.isEmpty(textSelections) || StringUtils.isEmpty(electronicSeal.getElectronicSealImgeUrl())) { + throw new RuntimeException("image url is empty or key word not exist in the word template ..."); + } Paragraph paragraph = textSelections[keyWordIndex > -1 ? 0 : textSelections.length - 1].getAsOneRange().getOwnerParagraph(); //添加公司印章 - DocPicture docPicture = paragraph.appendPicture(stampImgUrl); - + DocPicture docPicture = paragraph.appendPicture(electronicSeal.getElectronicSealImgeUrl()); //设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); - //指定电子章位置 //水平位置 docPicture.setHorizontalPosition(horizontal); @@ -136,28 +135,10 @@ docPicture.setWidth(stampWidth); docPicture.setHeight(stampHeight); } - - //加签名照片 - if (ObjectUtils.isNotEmpty(textSelections) && StringUtils.isNotEmpty(stampImgUrl1)) { - Paragraph paragraph = textSelections[keyWordIndex > -1 ? 0 : textSelections.length - 1].getAsOneRange().getOwnerParagraph(); - // 添加电子印章 - DocPicture docPicture = paragraph.appendPicture(stampImgUrl1); - //设置图片位于文字顶层 - docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); - - //指定电子章位置 - //水平位置 - docPicture.setHorizontalPosition(horizontal); - //垂直位置 - docPicture.setVerticalPosition(vertical); - //设置电子章大小 - docPicture.setWidth(stampWidth); - docPicture.setHeight(stampHeight); - } - //保存添加电子章的Word文档 document.saveToFile(wordNewUrl); document.dispose(); + } /** @@ -316,7 +297,7 @@ document.loadFromFile(wordNewUrl); document.saveToFile(pdfNewUrl, FileFormat.PDF); document.dispose(); -// log.info("文档转换结束,新PDF文档地址:{}",pdfNewUrl); +// log.info("文档转换结束,新PDF文档地址:{}",pdfNewUrl); } @@ -405,77 +386,84 @@ } /** - * 按照模板 填充数据生成word 只支持docx - * - * @param templatePath 模板文件路径 - * @param temDir 生成文件的目录 - * @param fileName 生成文件名 - * @param params 填充参数 + * @param filePrintParam 标准文件注册表 */ - public static void generateReport(String templatePath, String temDir, - String fileName, Map params, - String stampImgUrl, String stampImgUrl1, - String wordNewUrl, String keyWord, - Integer keyWordIndex, Float horizontal, - Float vertical, Float stampWidth, - Float stampHeight, String pdfNewUrl) { + public static void filePrintGenerate(FilePrintRegister filePrintParam) throws RuntimeException { //1、按照模板填充数据,并导出word - String wordOldUrl = exportWord(templatePath, temDir, fileName, params); - //2、照片背景透明设置 - //2.1签章背景透明设置 - BufferedImage bi = file2img(stampImgUrl); - BufferedImage bii = img_alpha(bi, alpha); - String newPngPath = stampImgUrl.substring(0, stampImgUrl.length() - 4) + "1.png"; - img2file(bii, "PNG", newPngPath); - //2.2签名背景透明设置 - BufferedImage b = file2img(stampImgUrl1); - BufferedImage b0 = img_alpha(b, alpha); - String newPngPath1 = stampImgUrl.substring(0, stampImgUrl1.length() - 4) + "1.png"; - img2file(b0, "PNG", newPngPath1); + String wordOldUrl = exportWord(filePrintParam.getTemplatePath(), filePrintParam.getTemDir(), filePrintParam.getFileName(), filePrintParam.getParams()); + //设置透明属性 1、获取照片 2、签章背景透明设置 3、设置照片路径和照片类型进行图片保存 + for (ElectronicImage electronicSeal : filePrintParam.getElectronicImageList()) { + BufferedImage bi = file2img(electronicSeal.getElectronicSealImgeUrl()); + BufferedImage electronSealImage = img_alpha(bi, electronicSeal.getDiaphaneity()); + String stampImgUrl = electronicSeal.getElectronicSealImgeUrl(); + String imagePath = stampImgUrl.substring(0, stampImgUrl.length() - 4) + "1.png"; + String[] imageCutOffContents = stampImgUrl.split("."); + electronicSeal.setElectronicSealImgeUrl(imagePath); + img2file(electronSealImage, imageCutOffContents[imageCutOffContents.length - 1], imagePath); + } - //3、添加签章和签名 - addKeyWordStamp(wordOldUrl, wordNewUrl, newPngPath, newPngPath1, keyWord, keyWordIndex, - horizontal, vertical, stampWidth, stampHeight); + Map> sameKeySealMaps = filePrintParam.getElectronicImageList().stream().collect( + Collectors.groupingBy(ElectronicImage::getKeyWord) + ); + //3、根据关键字进行添加签章和签字 + for (Map.Entry> entry : sameKeySealMaps.entrySet()) { + String mapKey = entry.getKey(); + List electronicSeals = entry.getValue(); + addSameKeyWordStamp(wordOldUrl, filePrintParam.getWordNewUrl(), electronicSeals); + } // 4、将新word转化为pdf文件 - wordToPdf(wordNewUrl, pdfNewUrl); + wordToPdf(filePrintParam.getWordNewUrl(), filePrintParam.getPdfNewUrl()); } - public static void main(String[] args) { + public static void main(String[] args) throws RuntimeException { + + String pathUrl = "D:\\cz\\upload"; //文件与BufferedImage间的转换 //读取图片 - BufferedImage bi = file2img("C:\\upload\\word\\sign.png"); + BufferedImage bi = file2img(pathUrl + "\\sign1.png"); BufferedImage bii = img_alpha(bi, alpha); //生成透明背景图片 - img2file(bii, "PNG", "C:\\upload\\word\\sign1.png"); + img2file(bii, "PNG", pathUrl + "\\sign3.png"); //文件与BufferedImage间的转换 //读取图片 - BufferedImage b = file2img("C:\\upload\\word\\name.png"); + BufferedImage b = file2img(pathUrl + "\\name1.png"); BufferedImage b0 = img_alpha(b, alpha); //生成透明背景图片 - img2file(b0, "PNG", "C:\\upload\\word\\name1.png"); + img2file(b0, "PNG", pathUrl + "\\name3.png"); // 目标文件地址 - String wordOldUrl = "C:\\upload\\word\\wordExport.docx"; + String wordOldUrl = pathUrl + "\\wordExport.docx"; + // 添加电子印章后文件存放地址 - String wordNewUrl = "C:\\upload\\word\\tem2.docx"; + String wordNewUrl = pathUrl + "\\tem.docx"; //WORD转PDF存放位置 - String pdfNewUrl = "C:\\upload\\word\\tem2.pdf"; + String pdfNewUrl = pathUrl + "\\tem.pdf"; //电子印章图片地址 - String stampImgUrl = "C:\\upload\\word\\sign1.png"; + String stampImgUrl = pathUrl + "\\sign3.png"; //电子签名图片地址 - String stampImgUrl1 = "C:\\upload\\word\\name1.png"; + String stampImgUrl1 = pathUrl + "\\name3.png"; // word文档内容关键字 String keyWord = "盖章"; StampUtils addStampUtils = new StampUtils(); - //获取关键字位置并加盖印章并替换书签名位置文本内容 - addStampUtils.addKeyWordStamp(wordOldUrl, wordNewUrl, - stampImgUrl, stampImgUrl1, - keyWord, keyWordIndex, - horizontal, vertical, - stampWidth, stampHeight); + List electronicSealList = new ArrayList(11); + int count = 0; + for (; count < 2; count++) { + ElectronicImage electronicSeal = new ElectronicImage(); + String tempStampImgUrl = count == 0 ? stampImgUrl : stampImgUrl1; + electronicSeal.setElectronicSealImgeUrl(tempStampImgUrl); + electronicSeal.setMereFlag(count == 1); + electronicSeal.setKeyWord(keyWord); + electronicSeal.setKeyWordIndex(keyWordIndex); + electronicSeal.setHorizontal(horizontal); + electronicSeal.setVertical(vertical); + electronicSeal.setStampHeight(stampHeight); + electronicSeal.setStampWidth(stampWidth); + electronicSealList.add(electronicSeal); + } +// addStampUtils.addKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java index 3534a47..5fb246a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java @@ -86,16 +86,4 @@ return resultData; } - @GetMapping("/prefixcode/list") - @ResponseBody - public Object getPreFixCodeList() throws Exception{ - Class fixCodeEnumClass = PrefixCodeEnum.class; - Field[] fixCodeEnumFileds = fixCodeEnumClass.getDeclaredFields(); - List fixCodeList=new ArrayList<>(); - for(Field field: fixCodeEnumFileds){ - fixCodeList.add( field.get(PrefixCodeEnum.class).toString()); - } - return ReturnUtil.success(fixCodeList); - } - } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java index 68334d8..21e34ae 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.system.*; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.system.SystemNotice; @@ -30,6 +31,8 @@ import javax.validation.Valid; import java.io.IOException; +import java.lang.reflect.Field; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -277,4 +280,17 @@ } return noticeService.noticeRead(noticeReadRequest); } + + @ApiOperation("获取业务编号前缀列表") + @PostMapping("/prefixcode/list") + @ResponseBody + public Object getPreFixCodeList() throws Exception{ + Class fixCodeEnumClass = PrefixCodeEnum.class; + Field[] fixCodeEnumFileds = fixCodeEnumClass.getDeclaredFields(); + List fixCodeList=new ArrayList<>(); + for(Field field: fixCodeEnumFileds){ + fixCodeList.add( field.get(PrefixCodeEnum.class).toString()); + } + return ReturnUtil.success(fixCodeList); + } } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java index fb6d4cf..5455fae 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java @@ -4,6 +4,8 @@ import cn.afterturn.easypoi.word.WordExportUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import com.casic.missiles.dto.business.certificate.FilePrintRegister; import com.spire.doc.*; import com.spire.doc.documents.*; import com.spire.doc.fields.DocPicture; @@ -15,7 +17,10 @@ import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; +import java.util.ArrayList; import java.util.Map; +import java.util.List; +import java.util.stream.Collectors; /** * @Author:zt @@ -60,12 +65,11 @@ // 加载文档 Document document = new Document(); document.loadFromFile(wordOldUrl); - -// 获取指定段落 + //获取指定段落 Section section = document.getSections().get(0); -// 获取段落总数 + //获取段落总数 int count = section.getParagraphs().getCount(); -// log.info("获取文档内容段落总数{}",count); + //log.info("获取文档内容段落总数{}",count); Paragraph paragraph = section.getParagraphs().get(0); // 判断是否需要替换书签位置文本内容 @@ -97,36 +101,31 @@ } /** + * 将相同关键字的印章添加到同一个位置进行打印 * 1、根据关键词位置添加电子印章 * 2、替换书签名位置文本内容 bookmarkName传参为null,则不进行书签替换操作 * - * @param wordOldUrl word文件路径 - * @param wordNewUrl 新word文件路径 - * @param stampImgUrl 电子印章图片路径 - * @param keyWord 关键字 (自定义) - * @param keyWordIndex 关键字索引 (-1) - * @param horizontal 电子印章水平位置 (260f) - * @param vertical 电子印章垂直位置 (-55f) - * @param stampWidth 电子印章宽度 (推荐120) - * @param stampHeight 电子印章高度(推荐120) + * @param wordOldUrl word文件路径 + * @param wordNewUrl 新word文件路径 + * @param electronicSealList 电子印章信息 */ - public static void addKeyWordStamp(String wordOldUrl, String wordNewUrl, String stampImgUrl, String stampImgUrl1, - String keyWord, Integer keyWordIndex, Float horizontal, - Float vertical, Float stampWidth, Float stampHeight) { + public static void addSameKeyWordStamp(String wordOldUrl, String wordNewUrl, List electronicSealList) throws RuntimeException { // 加载文档 Document document = new Document(); document.loadFromFile(wordOldUrl); + //获取关键字位置 - TextSelection[] textSelections = document.findAllString(keyWord, false, false); - //加签章照片 - if (ObjectUtils.isNotEmpty(textSelections) && StringUtils.isNotEmpty(stampImgUrl)) { + TextSelection[] textSelections = document.findAllString(electronicSealList.get(0).getKeyWord(), false, false); + for (ElectronicImage electronicSeal : electronicSealList) { + //加签章照片 + if (ObjectUtils.isEmpty(textSelections) || StringUtils.isEmpty(electronicSeal.getElectronicSealImgeUrl())) { + throw new RuntimeException("image url is empty or key word not exist in the word template ..."); + } Paragraph paragraph = textSelections[keyWordIndex > -1 ? 0 : textSelections.length - 1].getAsOneRange().getOwnerParagraph(); //添加公司印章 - DocPicture docPicture = paragraph.appendPicture(stampImgUrl); - + DocPicture docPicture = paragraph.appendPicture(electronicSeal.getElectronicSealImgeUrl()); //设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); - //指定电子章位置 //水平位置 docPicture.setHorizontalPosition(horizontal); @@ -136,28 +135,10 @@ docPicture.setWidth(stampWidth); docPicture.setHeight(stampHeight); } - - //加签名照片 - if (ObjectUtils.isNotEmpty(textSelections) && StringUtils.isNotEmpty(stampImgUrl1)) { - Paragraph paragraph = textSelections[keyWordIndex > -1 ? 0 : textSelections.length - 1].getAsOneRange().getOwnerParagraph(); - // 添加电子印章 - DocPicture docPicture = paragraph.appendPicture(stampImgUrl1); - //设置图片位于文字顶层 - docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); - - //指定电子章位置 - //水平位置 - docPicture.setHorizontalPosition(horizontal); - //垂直位置 - docPicture.setVerticalPosition(vertical); - //设置电子章大小 - docPicture.setWidth(stampWidth); - docPicture.setHeight(stampHeight); - } - //保存添加电子章的Word文档 document.saveToFile(wordNewUrl); document.dispose(); + } /** @@ -316,7 +297,7 @@ document.loadFromFile(wordNewUrl); document.saveToFile(pdfNewUrl, FileFormat.PDF); document.dispose(); -// log.info("文档转换结束,新PDF文档地址:{}",pdfNewUrl); +// log.info("文档转换结束,新PDF文档地址:{}",pdfNewUrl); } @@ -405,77 +386,84 @@ } /** - * 按照模板 填充数据生成word 只支持docx - * - * @param templatePath 模板文件路径 - * @param temDir 生成文件的目录 - * @param fileName 生成文件名 - * @param params 填充参数 + * @param filePrintParam 标准文件注册表 */ - public static void generateReport(String templatePath, String temDir, - String fileName, Map params, - String stampImgUrl, String stampImgUrl1, - String wordNewUrl, String keyWord, - Integer keyWordIndex, Float horizontal, - Float vertical, Float stampWidth, - Float stampHeight, String pdfNewUrl) { + public static void filePrintGenerate(FilePrintRegister filePrintParam) throws RuntimeException { //1、按照模板填充数据,并导出word - String wordOldUrl = exportWord(templatePath, temDir, fileName, params); - //2、照片背景透明设置 - //2.1签章背景透明设置 - BufferedImage bi = file2img(stampImgUrl); - BufferedImage bii = img_alpha(bi, alpha); - String newPngPath = stampImgUrl.substring(0, stampImgUrl.length() - 4) + "1.png"; - img2file(bii, "PNG", newPngPath); - //2.2签名背景透明设置 - BufferedImage b = file2img(stampImgUrl1); - BufferedImage b0 = img_alpha(b, alpha); - String newPngPath1 = stampImgUrl.substring(0, stampImgUrl1.length() - 4) + "1.png"; - img2file(b0, "PNG", newPngPath1); + String wordOldUrl = exportWord(filePrintParam.getTemplatePath(), filePrintParam.getTemDir(), filePrintParam.getFileName(), filePrintParam.getParams()); + //设置透明属性 1、获取照片 2、签章背景透明设置 3、设置照片路径和照片类型进行图片保存 + for (ElectronicImage electronicSeal : filePrintParam.getElectronicImageList()) { + BufferedImage bi = file2img(electronicSeal.getElectronicSealImgeUrl()); + BufferedImage electronSealImage = img_alpha(bi, electronicSeal.getDiaphaneity()); + String stampImgUrl = electronicSeal.getElectronicSealImgeUrl(); + String imagePath = stampImgUrl.substring(0, stampImgUrl.length() - 4) + "1.png"; + String[] imageCutOffContents = stampImgUrl.split("."); + electronicSeal.setElectronicSealImgeUrl(imagePath); + img2file(electronSealImage, imageCutOffContents[imageCutOffContents.length - 1], imagePath); + } - //3、添加签章和签名 - addKeyWordStamp(wordOldUrl, wordNewUrl, newPngPath, newPngPath1, keyWord, keyWordIndex, - horizontal, vertical, stampWidth, stampHeight); + Map> sameKeySealMaps = filePrintParam.getElectronicImageList().stream().collect( + Collectors.groupingBy(ElectronicImage::getKeyWord) + ); + //3、根据关键字进行添加签章和签字 + for (Map.Entry> entry : sameKeySealMaps.entrySet()) { + String mapKey = entry.getKey(); + List electronicSeals = entry.getValue(); + addSameKeyWordStamp(wordOldUrl, filePrintParam.getWordNewUrl(), electronicSeals); + } // 4、将新word转化为pdf文件 - wordToPdf(wordNewUrl, pdfNewUrl); + wordToPdf(filePrintParam.getWordNewUrl(), filePrintParam.getPdfNewUrl()); } - public static void main(String[] args) { + public static void main(String[] args) throws RuntimeException { + + String pathUrl = "D:\\cz\\upload"; //文件与BufferedImage间的转换 //读取图片 - BufferedImage bi = file2img("C:\\upload\\word\\sign.png"); + BufferedImage bi = file2img(pathUrl + "\\sign1.png"); BufferedImage bii = img_alpha(bi, alpha); //生成透明背景图片 - img2file(bii, "PNG", "C:\\upload\\word\\sign1.png"); + img2file(bii, "PNG", pathUrl + "\\sign3.png"); //文件与BufferedImage间的转换 //读取图片 - BufferedImage b = file2img("C:\\upload\\word\\name.png"); + BufferedImage b = file2img(pathUrl + "\\name1.png"); BufferedImage b0 = img_alpha(b, alpha); //生成透明背景图片 - img2file(b0, "PNG", "C:\\upload\\word\\name1.png"); + img2file(b0, "PNG", pathUrl + "\\name3.png"); // 目标文件地址 - String wordOldUrl = "C:\\upload\\word\\wordExport.docx"; + String wordOldUrl = pathUrl + "\\wordExport.docx"; + // 添加电子印章后文件存放地址 - String wordNewUrl = "C:\\upload\\word\\tem2.docx"; + String wordNewUrl = pathUrl + "\\tem.docx"; //WORD转PDF存放位置 - String pdfNewUrl = "C:\\upload\\word\\tem2.pdf"; + String pdfNewUrl = pathUrl + "\\tem.pdf"; //电子印章图片地址 - String stampImgUrl = "C:\\upload\\word\\sign1.png"; + String stampImgUrl = pathUrl + "\\sign3.png"; //电子签名图片地址 - String stampImgUrl1 = "C:\\upload\\word\\name1.png"; + String stampImgUrl1 = pathUrl + "\\name3.png"; // word文档内容关键字 String keyWord = "盖章"; StampUtils addStampUtils = new StampUtils(); - //获取关键字位置并加盖印章并替换书签名位置文本内容 - addStampUtils.addKeyWordStamp(wordOldUrl, wordNewUrl, - stampImgUrl, stampImgUrl1, - keyWord, keyWordIndex, - horizontal, vertical, - stampWidth, stampHeight); + List electronicSealList = new ArrayList(11); + int count = 0; + for (; count < 2; count++) { + ElectronicImage electronicSeal = new ElectronicImage(); + String tempStampImgUrl = count == 0 ? stampImgUrl : stampImgUrl1; + electronicSeal.setElectronicSealImgeUrl(tempStampImgUrl); + electronicSeal.setMereFlag(count == 1); + electronicSeal.setKeyWord(keyWord); + electronicSeal.setKeyWordIndex(keyWordIndex); + electronicSeal.setHorizontal(horizontal); + electronicSeal.setVertical(vertical); + electronicSeal.setStampHeight(stampHeight); + electronicSeal.setStampWidth(stampWidth); + electronicSealList.add(electronicSeal); + } +// addStampUtils.addKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/ElectronicImage.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/ElectronicImage.java new file mode 100644 index 0000000..1253d35 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/ElectronicImage.java @@ -0,0 +1,63 @@ +package com.casic.missiles.dto.business.certificate; + +import lombok.Data; + +/** + * 电子签名 + */ +@Data +public class ElectronicImage { + + + /** + * 电子签章资源路径 + */ + private String electronicSealImgeUrl; + + /** + * 透明度 + */ + private Integer diaphaneity; + + /** + * 透明度 + */ + private Boolean mereFlag; + + /** + * 电子印章水平位置 (当前文件推荐260f) + */ + private Float horizontal; + /** + * 关键字 + */ + private String keyWord; + /** + * 关键字索引 + */ + private Integer keyWordIndex; + /** + * 电子印章垂直位置 (当前推荐455f) + */ + private Float vertical; + /** + * 电子印章宽度(推荐120) + */ + private Float stampWidth; + + /** + * 电子印章高度(推荐120) + */ + private Float stampHeight; + + /** + * 书签名,通过名称寻找书签文本所在位置 + */ + private String bookmarkName; + + /** + * 替换的文本新内容 + */ + private String newBookmarkText; + +} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java index 3534a47..5fb246a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java @@ -86,16 +86,4 @@ return resultData; } - @GetMapping("/prefixcode/list") - @ResponseBody - public Object getPreFixCodeList() throws Exception{ - Class fixCodeEnumClass = PrefixCodeEnum.class; - Field[] fixCodeEnumFileds = fixCodeEnumClass.getDeclaredFields(); - List fixCodeList=new ArrayList<>(); - for(Field field: fixCodeEnumFileds){ - fixCodeList.add( field.get(PrefixCodeEnum.class).toString()); - } - return ReturnUtil.success(fixCodeList); - } - } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java index 68334d8..21e34ae 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.system.*; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.system.SystemNotice; @@ -30,6 +31,8 @@ import javax.validation.Valid; import java.io.IOException; +import java.lang.reflect.Field; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -277,4 +280,17 @@ } return noticeService.noticeRead(noticeReadRequest); } + + @ApiOperation("获取业务编号前缀列表") + @PostMapping("/prefixcode/list") + @ResponseBody + public Object getPreFixCodeList() throws Exception{ + Class fixCodeEnumClass = PrefixCodeEnum.class; + Field[] fixCodeEnumFileds = fixCodeEnumClass.getDeclaredFields(); + List fixCodeList=new ArrayList<>(); + for(Field field: fixCodeEnumFileds){ + fixCodeList.add( field.get(PrefixCodeEnum.class).toString()); + } + return ReturnUtil.success(fixCodeList); + } } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java index fb6d4cf..5455fae 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java @@ -4,6 +4,8 @@ import cn.afterturn.easypoi.word.WordExportUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import com.casic.missiles.dto.business.certificate.FilePrintRegister; import com.spire.doc.*; import com.spire.doc.documents.*; import com.spire.doc.fields.DocPicture; @@ -15,7 +17,10 @@ import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; +import java.util.ArrayList; import java.util.Map; +import java.util.List; +import java.util.stream.Collectors; /** * @Author:zt @@ -60,12 +65,11 @@ // 加载文档 Document document = new Document(); document.loadFromFile(wordOldUrl); - -// 获取指定段落 + //获取指定段落 Section section = document.getSections().get(0); -// 获取段落总数 + //获取段落总数 int count = section.getParagraphs().getCount(); -// log.info("获取文档内容段落总数{}",count); + //log.info("获取文档内容段落总数{}",count); Paragraph paragraph = section.getParagraphs().get(0); // 判断是否需要替换书签位置文本内容 @@ -97,36 +101,31 @@ } /** + * 将相同关键字的印章添加到同一个位置进行打印 * 1、根据关键词位置添加电子印章 * 2、替换书签名位置文本内容 bookmarkName传参为null,则不进行书签替换操作 * - * @param wordOldUrl word文件路径 - * @param wordNewUrl 新word文件路径 - * @param stampImgUrl 电子印章图片路径 - * @param keyWord 关键字 (自定义) - * @param keyWordIndex 关键字索引 (-1) - * @param horizontal 电子印章水平位置 (260f) - * @param vertical 电子印章垂直位置 (-55f) - * @param stampWidth 电子印章宽度 (推荐120) - * @param stampHeight 电子印章高度(推荐120) + * @param wordOldUrl word文件路径 + * @param wordNewUrl 新word文件路径 + * @param electronicSealList 电子印章信息 */ - public static void addKeyWordStamp(String wordOldUrl, String wordNewUrl, String stampImgUrl, String stampImgUrl1, - String keyWord, Integer keyWordIndex, Float horizontal, - Float vertical, Float stampWidth, Float stampHeight) { + public static void addSameKeyWordStamp(String wordOldUrl, String wordNewUrl, List electronicSealList) throws RuntimeException { // 加载文档 Document document = new Document(); document.loadFromFile(wordOldUrl); + //获取关键字位置 - TextSelection[] textSelections = document.findAllString(keyWord, false, false); - //加签章照片 - if (ObjectUtils.isNotEmpty(textSelections) && StringUtils.isNotEmpty(stampImgUrl)) { + TextSelection[] textSelections = document.findAllString(electronicSealList.get(0).getKeyWord(), false, false); + for (ElectronicImage electronicSeal : electronicSealList) { + //加签章照片 + if (ObjectUtils.isEmpty(textSelections) || StringUtils.isEmpty(electronicSeal.getElectronicSealImgeUrl())) { + throw new RuntimeException("image url is empty or key word not exist in the word template ..."); + } Paragraph paragraph = textSelections[keyWordIndex > -1 ? 0 : textSelections.length - 1].getAsOneRange().getOwnerParagraph(); //添加公司印章 - DocPicture docPicture = paragraph.appendPicture(stampImgUrl); - + DocPicture docPicture = paragraph.appendPicture(electronicSeal.getElectronicSealImgeUrl()); //设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); - //指定电子章位置 //水平位置 docPicture.setHorizontalPosition(horizontal); @@ -136,28 +135,10 @@ docPicture.setWidth(stampWidth); docPicture.setHeight(stampHeight); } - - //加签名照片 - if (ObjectUtils.isNotEmpty(textSelections) && StringUtils.isNotEmpty(stampImgUrl1)) { - Paragraph paragraph = textSelections[keyWordIndex > -1 ? 0 : textSelections.length - 1].getAsOneRange().getOwnerParagraph(); - // 添加电子印章 - DocPicture docPicture = paragraph.appendPicture(stampImgUrl1); - //设置图片位于文字顶层 - docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); - - //指定电子章位置 - //水平位置 - docPicture.setHorizontalPosition(horizontal); - //垂直位置 - docPicture.setVerticalPosition(vertical); - //设置电子章大小 - docPicture.setWidth(stampWidth); - docPicture.setHeight(stampHeight); - } - //保存添加电子章的Word文档 document.saveToFile(wordNewUrl); document.dispose(); + } /** @@ -316,7 +297,7 @@ document.loadFromFile(wordNewUrl); document.saveToFile(pdfNewUrl, FileFormat.PDF); document.dispose(); -// log.info("文档转换结束,新PDF文档地址:{}",pdfNewUrl); +// log.info("文档转换结束,新PDF文档地址:{}",pdfNewUrl); } @@ -405,77 +386,84 @@ } /** - * 按照模板 填充数据生成word 只支持docx - * - * @param templatePath 模板文件路径 - * @param temDir 生成文件的目录 - * @param fileName 生成文件名 - * @param params 填充参数 + * @param filePrintParam 标准文件注册表 */ - public static void generateReport(String templatePath, String temDir, - String fileName, Map params, - String stampImgUrl, String stampImgUrl1, - String wordNewUrl, String keyWord, - Integer keyWordIndex, Float horizontal, - Float vertical, Float stampWidth, - Float stampHeight, String pdfNewUrl) { + public static void filePrintGenerate(FilePrintRegister filePrintParam) throws RuntimeException { //1、按照模板填充数据,并导出word - String wordOldUrl = exportWord(templatePath, temDir, fileName, params); - //2、照片背景透明设置 - //2.1签章背景透明设置 - BufferedImage bi = file2img(stampImgUrl); - BufferedImage bii = img_alpha(bi, alpha); - String newPngPath = stampImgUrl.substring(0, stampImgUrl.length() - 4) + "1.png"; - img2file(bii, "PNG", newPngPath); - //2.2签名背景透明设置 - BufferedImage b = file2img(stampImgUrl1); - BufferedImage b0 = img_alpha(b, alpha); - String newPngPath1 = stampImgUrl.substring(0, stampImgUrl1.length() - 4) + "1.png"; - img2file(b0, "PNG", newPngPath1); + String wordOldUrl = exportWord(filePrintParam.getTemplatePath(), filePrintParam.getTemDir(), filePrintParam.getFileName(), filePrintParam.getParams()); + //设置透明属性 1、获取照片 2、签章背景透明设置 3、设置照片路径和照片类型进行图片保存 + for (ElectronicImage electronicSeal : filePrintParam.getElectronicImageList()) { + BufferedImage bi = file2img(electronicSeal.getElectronicSealImgeUrl()); + BufferedImage electronSealImage = img_alpha(bi, electronicSeal.getDiaphaneity()); + String stampImgUrl = electronicSeal.getElectronicSealImgeUrl(); + String imagePath = stampImgUrl.substring(0, stampImgUrl.length() - 4) + "1.png"; + String[] imageCutOffContents = stampImgUrl.split("."); + electronicSeal.setElectronicSealImgeUrl(imagePath); + img2file(electronSealImage, imageCutOffContents[imageCutOffContents.length - 1], imagePath); + } - //3、添加签章和签名 - addKeyWordStamp(wordOldUrl, wordNewUrl, newPngPath, newPngPath1, keyWord, keyWordIndex, - horizontal, vertical, stampWidth, stampHeight); + Map> sameKeySealMaps = filePrintParam.getElectronicImageList().stream().collect( + Collectors.groupingBy(ElectronicImage::getKeyWord) + ); + //3、根据关键字进行添加签章和签字 + for (Map.Entry> entry : sameKeySealMaps.entrySet()) { + String mapKey = entry.getKey(); + List electronicSeals = entry.getValue(); + addSameKeyWordStamp(wordOldUrl, filePrintParam.getWordNewUrl(), electronicSeals); + } // 4、将新word转化为pdf文件 - wordToPdf(wordNewUrl, pdfNewUrl); + wordToPdf(filePrintParam.getWordNewUrl(), filePrintParam.getPdfNewUrl()); } - public static void main(String[] args) { + public static void main(String[] args) throws RuntimeException { + + String pathUrl = "D:\\cz\\upload"; //文件与BufferedImage间的转换 //读取图片 - BufferedImage bi = file2img("C:\\upload\\word\\sign.png"); + BufferedImage bi = file2img(pathUrl + "\\sign1.png"); BufferedImage bii = img_alpha(bi, alpha); //生成透明背景图片 - img2file(bii, "PNG", "C:\\upload\\word\\sign1.png"); + img2file(bii, "PNG", pathUrl + "\\sign3.png"); //文件与BufferedImage间的转换 //读取图片 - BufferedImage b = file2img("C:\\upload\\word\\name.png"); + BufferedImage b = file2img(pathUrl + "\\name1.png"); BufferedImage b0 = img_alpha(b, alpha); //生成透明背景图片 - img2file(b0, "PNG", "C:\\upload\\word\\name1.png"); + img2file(b0, "PNG", pathUrl + "\\name3.png"); // 目标文件地址 - String wordOldUrl = "C:\\upload\\word\\wordExport.docx"; + String wordOldUrl = pathUrl + "\\wordExport.docx"; + // 添加电子印章后文件存放地址 - String wordNewUrl = "C:\\upload\\word\\tem2.docx"; + String wordNewUrl = pathUrl + "\\tem.docx"; //WORD转PDF存放位置 - String pdfNewUrl = "C:\\upload\\word\\tem2.pdf"; + String pdfNewUrl = pathUrl + "\\tem.pdf"; //电子印章图片地址 - String stampImgUrl = "C:\\upload\\word\\sign1.png"; + String stampImgUrl = pathUrl + "\\sign3.png"; //电子签名图片地址 - String stampImgUrl1 = "C:\\upload\\word\\name1.png"; + String stampImgUrl1 = pathUrl + "\\name3.png"; // word文档内容关键字 String keyWord = "盖章"; StampUtils addStampUtils = new StampUtils(); - //获取关键字位置并加盖印章并替换书签名位置文本内容 - addStampUtils.addKeyWordStamp(wordOldUrl, wordNewUrl, - stampImgUrl, stampImgUrl1, - keyWord, keyWordIndex, - horizontal, vertical, - stampWidth, stampHeight); + List electronicSealList = new ArrayList(11); + int count = 0; + for (; count < 2; count++) { + ElectronicImage electronicSeal = new ElectronicImage(); + String tempStampImgUrl = count == 0 ? stampImgUrl : stampImgUrl1; + electronicSeal.setElectronicSealImgeUrl(tempStampImgUrl); + electronicSeal.setMereFlag(count == 1); + electronicSeal.setKeyWord(keyWord); + electronicSeal.setKeyWordIndex(keyWordIndex); + electronicSeal.setHorizontal(horizontal); + electronicSeal.setVertical(vertical); + electronicSeal.setStampHeight(stampHeight); + electronicSeal.setStampWidth(stampWidth); + electronicSealList.add(electronicSeal); + } +// addStampUtils.addKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/ElectronicImage.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/ElectronicImage.java new file mode 100644 index 0000000..1253d35 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/ElectronicImage.java @@ -0,0 +1,63 @@ +package com.casic.missiles.dto.business.certificate; + +import lombok.Data; + +/** + * 电子签名 + */ +@Data +public class ElectronicImage { + + + /** + * 电子签章资源路径 + */ + private String electronicSealImgeUrl; + + /** + * 透明度 + */ + private Integer diaphaneity; + + /** + * 透明度 + */ + private Boolean mereFlag; + + /** + * 电子印章水平位置 (当前文件推荐260f) + */ + private Float horizontal; + /** + * 关键字 + */ + private String keyWord; + /** + * 关键字索引 + */ + private Integer keyWordIndex; + /** + * 电子印章垂直位置 (当前推荐455f) + */ + private Float vertical; + /** + * 电子印章宽度(推荐120) + */ + private Float stampWidth; + + /** + * 电子印章高度(推荐120) + */ + private Float stampHeight; + + /** + * 书签名,通过名称寻找书签文本所在位置 + */ + private String bookmarkName; + + /** + * 替换的文本新内容 + */ + private String newBookmarkText; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/FilePrintRegister.java new file mode 100644 index 0000000..618929c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/FilePrintRegister.java @@ -0,0 +1,43 @@ +package com.casic.missiles.dto.business.certificate; + +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + * @author cz + * 打印图片注册表信息 + */ +@Data +public class FilePrintRegister { + + /** + * 模板文件的目录 + */ + private String templatePath; + /** + * + */ + private String temDir; + /** + * 生成文件名 + */ + private String fileName; + /** + * 模板参数 + */ + private Map params; + /** + * 生成 word文件名 + */ + private String wordNewUrl; + /** + * 生成pdf文件名 + */ + private String pdfNewUrl; + /** + * electronicSealList 填充的电子图片信息 + */ + List electronicImageList; +} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java index 3534a47..5fb246a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java @@ -86,16 +86,4 @@ return resultData; } - @GetMapping("/prefixcode/list") - @ResponseBody - public Object getPreFixCodeList() throws Exception{ - Class fixCodeEnumClass = PrefixCodeEnum.class; - Field[] fixCodeEnumFileds = fixCodeEnumClass.getDeclaredFields(); - List fixCodeList=new ArrayList<>(); - for(Field field: fixCodeEnumFileds){ - fixCodeList.add( field.get(PrefixCodeEnum.class).toString()); - } - return ReturnUtil.success(fixCodeList); - } - } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java index 68334d8..21e34ae 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.system.*; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.system.SystemNotice; @@ -30,6 +31,8 @@ import javax.validation.Valid; import java.io.IOException; +import java.lang.reflect.Field; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -277,4 +280,17 @@ } return noticeService.noticeRead(noticeReadRequest); } + + @ApiOperation("获取业务编号前缀列表") + @PostMapping("/prefixcode/list") + @ResponseBody + public Object getPreFixCodeList() throws Exception{ + Class fixCodeEnumClass = PrefixCodeEnum.class; + Field[] fixCodeEnumFileds = fixCodeEnumClass.getDeclaredFields(); + List fixCodeList=new ArrayList<>(); + for(Field field: fixCodeEnumFileds){ + fixCodeList.add( field.get(PrefixCodeEnum.class).toString()); + } + return ReturnUtil.success(fixCodeList); + } } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java index fb6d4cf..5455fae 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java @@ -4,6 +4,8 @@ import cn.afterturn.easypoi.word.WordExportUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import com.casic.missiles.dto.business.certificate.FilePrintRegister; import com.spire.doc.*; import com.spire.doc.documents.*; import com.spire.doc.fields.DocPicture; @@ -15,7 +17,10 @@ import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; +import java.util.ArrayList; import java.util.Map; +import java.util.List; +import java.util.stream.Collectors; /** * @Author:zt @@ -60,12 +65,11 @@ // 加载文档 Document document = new Document(); document.loadFromFile(wordOldUrl); - -// 获取指定段落 + //获取指定段落 Section section = document.getSections().get(0); -// 获取段落总数 + //获取段落总数 int count = section.getParagraphs().getCount(); -// log.info("获取文档内容段落总数{}",count); + //log.info("获取文档内容段落总数{}",count); Paragraph paragraph = section.getParagraphs().get(0); // 判断是否需要替换书签位置文本内容 @@ -97,36 +101,31 @@ } /** + * 将相同关键字的印章添加到同一个位置进行打印 * 1、根据关键词位置添加电子印章 * 2、替换书签名位置文本内容 bookmarkName传参为null,则不进行书签替换操作 * - * @param wordOldUrl word文件路径 - * @param wordNewUrl 新word文件路径 - * @param stampImgUrl 电子印章图片路径 - * @param keyWord 关键字 (自定义) - * @param keyWordIndex 关键字索引 (-1) - * @param horizontal 电子印章水平位置 (260f) - * @param vertical 电子印章垂直位置 (-55f) - * @param stampWidth 电子印章宽度 (推荐120) - * @param stampHeight 电子印章高度(推荐120) + * @param wordOldUrl word文件路径 + * @param wordNewUrl 新word文件路径 + * @param electronicSealList 电子印章信息 */ - public static void addKeyWordStamp(String wordOldUrl, String wordNewUrl, String stampImgUrl, String stampImgUrl1, - String keyWord, Integer keyWordIndex, Float horizontal, - Float vertical, Float stampWidth, Float stampHeight) { + public static void addSameKeyWordStamp(String wordOldUrl, String wordNewUrl, List electronicSealList) throws RuntimeException { // 加载文档 Document document = new Document(); document.loadFromFile(wordOldUrl); + //获取关键字位置 - TextSelection[] textSelections = document.findAllString(keyWord, false, false); - //加签章照片 - if (ObjectUtils.isNotEmpty(textSelections) && StringUtils.isNotEmpty(stampImgUrl)) { + TextSelection[] textSelections = document.findAllString(electronicSealList.get(0).getKeyWord(), false, false); + for (ElectronicImage electronicSeal : electronicSealList) { + //加签章照片 + if (ObjectUtils.isEmpty(textSelections) || StringUtils.isEmpty(electronicSeal.getElectronicSealImgeUrl())) { + throw new RuntimeException("image url is empty or key word not exist in the word template ..."); + } Paragraph paragraph = textSelections[keyWordIndex > -1 ? 0 : textSelections.length - 1].getAsOneRange().getOwnerParagraph(); //添加公司印章 - DocPicture docPicture = paragraph.appendPicture(stampImgUrl); - + DocPicture docPicture = paragraph.appendPicture(electronicSeal.getElectronicSealImgeUrl()); //设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); - //指定电子章位置 //水平位置 docPicture.setHorizontalPosition(horizontal); @@ -136,28 +135,10 @@ docPicture.setWidth(stampWidth); docPicture.setHeight(stampHeight); } - - //加签名照片 - if (ObjectUtils.isNotEmpty(textSelections) && StringUtils.isNotEmpty(stampImgUrl1)) { - Paragraph paragraph = textSelections[keyWordIndex > -1 ? 0 : textSelections.length - 1].getAsOneRange().getOwnerParagraph(); - // 添加电子印章 - DocPicture docPicture = paragraph.appendPicture(stampImgUrl1); - //设置图片位于文字顶层 - docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); - - //指定电子章位置 - //水平位置 - docPicture.setHorizontalPosition(horizontal); - //垂直位置 - docPicture.setVerticalPosition(vertical); - //设置电子章大小 - docPicture.setWidth(stampWidth); - docPicture.setHeight(stampHeight); - } - //保存添加电子章的Word文档 document.saveToFile(wordNewUrl); document.dispose(); + } /** @@ -316,7 +297,7 @@ document.loadFromFile(wordNewUrl); document.saveToFile(pdfNewUrl, FileFormat.PDF); document.dispose(); -// log.info("文档转换结束,新PDF文档地址:{}",pdfNewUrl); +// log.info("文档转换结束,新PDF文档地址:{}",pdfNewUrl); } @@ -405,77 +386,84 @@ } /** - * 按照模板 填充数据生成word 只支持docx - * - * @param templatePath 模板文件路径 - * @param temDir 生成文件的目录 - * @param fileName 生成文件名 - * @param params 填充参数 + * @param filePrintParam 标准文件注册表 */ - public static void generateReport(String templatePath, String temDir, - String fileName, Map params, - String stampImgUrl, String stampImgUrl1, - String wordNewUrl, String keyWord, - Integer keyWordIndex, Float horizontal, - Float vertical, Float stampWidth, - Float stampHeight, String pdfNewUrl) { + public static void filePrintGenerate(FilePrintRegister filePrintParam) throws RuntimeException { //1、按照模板填充数据,并导出word - String wordOldUrl = exportWord(templatePath, temDir, fileName, params); - //2、照片背景透明设置 - //2.1签章背景透明设置 - BufferedImage bi = file2img(stampImgUrl); - BufferedImage bii = img_alpha(bi, alpha); - String newPngPath = stampImgUrl.substring(0, stampImgUrl.length() - 4) + "1.png"; - img2file(bii, "PNG", newPngPath); - //2.2签名背景透明设置 - BufferedImage b = file2img(stampImgUrl1); - BufferedImage b0 = img_alpha(b, alpha); - String newPngPath1 = stampImgUrl.substring(0, stampImgUrl1.length() - 4) + "1.png"; - img2file(b0, "PNG", newPngPath1); + String wordOldUrl = exportWord(filePrintParam.getTemplatePath(), filePrintParam.getTemDir(), filePrintParam.getFileName(), filePrintParam.getParams()); + //设置透明属性 1、获取照片 2、签章背景透明设置 3、设置照片路径和照片类型进行图片保存 + for (ElectronicImage electronicSeal : filePrintParam.getElectronicImageList()) { + BufferedImage bi = file2img(electronicSeal.getElectronicSealImgeUrl()); + BufferedImage electronSealImage = img_alpha(bi, electronicSeal.getDiaphaneity()); + String stampImgUrl = electronicSeal.getElectronicSealImgeUrl(); + String imagePath = stampImgUrl.substring(0, stampImgUrl.length() - 4) + "1.png"; + String[] imageCutOffContents = stampImgUrl.split("."); + electronicSeal.setElectronicSealImgeUrl(imagePath); + img2file(electronSealImage, imageCutOffContents[imageCutOffContents.length - 1], imagePath); + } - //3、添加签章和签名 - addKeyWordStamp(wordOldUrl, wordNewUrl, newPngPath, newPngPath1, keyWord, keyWordIndex, - horizontal, vertical, stampWidth, stampHeight); + Map> sameKeySealMaps = filePrintParam.getElectronicImageList().stream().collect( + Collectors.groupingBy(ElectronicImage::getKeyWord) + ); + //3、根据关键字进行添加签章和签字 + for (Map.Entry> entry : sameKeySealMaps.entrySet()) { + String mapKey = entry.getKey(); + List electronicSeals = entry.getValue(); + addSameKeyWordStamp(wordOldUrl, filePrintParam.getWordNewUrl(), electronicSeals); + } // 4、将新word转化为pdf文件 - wordToPdf(wordNewUrl, pdfNewUrl); + wordToPdf(filePrintParam.getWordNewUrl(), filePrintParam.getPdfNewUrl()); } - public static void main(String[] args) { + public static void main(String[] args) throws RuntimeException { + + String pathUrl = "D:\\cz\\upload"; //文件与BufferedImage间的转换 //读取图片 - BufferedImage bi = file2img("C:\\upload\\word\\sign.png"); + BufferedImage bi = file2img(pathUrl + "\\sign1.png"); BufferedImage bii = img_alpha(bi, alpha); //生成透明背景图片 - img2file(bii, "PNG", "C:\\upload\\word\\sign1.png"); + img2file(bii, "PNG", pathUrl + "\\sign3.png"); //文件与BufferedImage间的转换 //读取图片 - BufferedImage b = file2img("C:\\upload\\word\\name.png"); + BufferedImage b = file2img(pathUrl + "\\name1.png"); BufferedImage b0 = img_alpha(b, alpha); //生成透明背景图片 - img2file(b0, "PNG", "C:\\upload\\word\\name1.png"); + img2file(b0, "PNG", pathUrl + "\\name3.png"); // 目标文件地址 - String wordOldUrl = "C:\\upload\\word\\wordExport.docx"; + String wordOldUrl = pathUrl + "\\wordExport.docx"; + // 添加电子印章后文件存放地址 - String wordNewUrl = "C:\\upload\\word\\tem2.docx"; + String wordNewUrl = pathUrl + "\\tem.docx"; //WORD转PDF存放位置 - String pdfNewUrl = "C:\\upload\\word\\tem2.pdf"; + String pdfNewUrl = pathUrl + "\\tem.pdf"; //电子印章图片地址 - String stampImgUrl = "C:\\upload\\word\\sign1.png"; + String stampImgUrl = pathUrl + "\\sign3.png"; //电子签名图片地址 - String stampImgUrl1 = "C:\\upload\\word\\name1.png"; + String stampImgUrl1 = pathUrl + "\\name3.png"; // word文档内容关键字 String keyWord = "盖章"; StampUtils addStampUtils = new StampUtils(); - //获取关键字位置并加盖印章并替换书签名位置文本内容 - addStampUtils.addKeyWordStamp(wordOldUrl, wordNewUrl, - stampImgUrl, stampImgUrl1, - keyWord, keyWordIndex, - horizontal, vertical, - stampWidth, stampHeight); + List electronicSealList = new ArrayList(11); + int count = 0; + for (; count < 2; count++) { + ElectronicImage electronicSeal = new ElectronicImage(); + String tempStampImgUrl = count == 0 ? stampImgUrl : stampImgUrl1; + electronicSeal.setElectronicSealImgeUrl(tempStampImgUrl); + electronicSeal.setMereFlag(count == 1); + electronicSeal.setKeyWord(keyWord); + electronicSeal.setKeyWordIndex(keyWordIndex); + electronicSeal.setHorizontal(horizontal); + electronicSeal.setVertical(vertical); + electronicSeal.setStampHeight(stampHeight); + electronicSeal.setStampWidth(stampWidth); + electronicSealList.add(electronicSeal); + } +// addStampUtils.addKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/ElectronicImage.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/ElectronicImage.java new file mode 100644 index 0000000..1253d35 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/ElectronicImage.java @@ -0,0 +1,63 @@ +package com.casic.missiles.dto.business.certificate; + +import lombok.Data; + +/** + * 电子签名 + */ +@Data +public class ElectronicImage { + + + /** + * 电子签章资源路径 + */ + private String electronicSealImgeUrl; + + /** + * 透明度 + */ + private Integer diaphaneity; + + /** + * 透明度 + */ + private Boolean mereFlag; + + /** + * 电子印章水平位置 (当前文件推荐260f) + */ + private Float horizontal; + /** + * 关键字 + */ + private String keyWord; + /** + * 关键字索引 + */ + private Integer keyWordIndex; + /** + * 电子印章垂直位置 (当前推荐455f) + */ + private Float vertical; + /** + * 电子印章宽度(推荐120) + */ + private Float stampWidth; + + /** + * 电子印章高度(推荐120) + */ + private Float stampHeight; + + /** + * 书签名,通过名称寻找书签文本所在位置 + */ + private String bookmarkName; + + /** + * 替换的文本新内容 + */ + private String newBookmarkText; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/FilePrintRegister.java new file mode 100644 index 0000000..618929c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/FilePrintRegister.java @@ -0,0 +1,43 @@ +package com.casic.missiles.dto.business.certificate; + +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + * @author cz + * 打印图片注册表信息 + */ +@Data +public class FilePrintRegister { + + /** + * 模板文件的目录 + */ + private String templatePath; + /** + * + */ + private String temDir; + /** + * 生成文件名 + */ + private String fileName; + /** + * 模板参数 + */ + private Map params; + /** + * 生成 word文件名 + */ + private String wordNewUrl; + /** + * 生成pdf文件名 + */ + private String pdfNewUrl; + /** + * electronicSealList 填充的电子图片信息 + */ + List electronicImageList; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java index ab5978d..c4ac101 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java @@ -149,6 +149,7 @@ this.doSampleListPopulation(businessOrder); for (CustomerSampleInfo sampleInfo : businessOrder.getCustomerSampleInfoList()) { sampleInfo.setDeliverer(businessOrder.getDeliverer()); + sampleInfo.setCustomerNo(businessOrder.getCustomerNo()); sampleInfo.setDelivererTel(businessOrder.getDelivererTel()); if ("0".equals(sampleInfo.getIsExistSample())) { ReturnDTO returnDTO = customerSampleService.addSample(sampleInfo); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java index 3534a47..5fb246a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java @@ -86,16 +86,4 @@ return resultData; } - @GetMapping("/prefixcode/list") - @ResponseBody - public Object getPreFixCodeList() throws Exception{ - Class fixCodeEnumClass = PrefixCodeEnum.class; - Field[] fixCodeEnumFileds = fixCodeEnumClass.getDeclaredFields(); - List fixCodeList=new ArrayList<>(); - for(Field field: fixCodeEnumFileds){ - fixCodeList.add( field.get(PrefixCodeEnum.class).toString()); - } - return ReturnUtil.success(fixCodeList); - } - } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java index 68334d8..21e34ae 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.system.*; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.system.SystemNotice; @@ -30,6 +31,8 @@ import javax.validation.Valid; import java.io.IOException; +import java.lang.reflect.Field; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -277,4 +280,17 @@ } return noticeService.noticeRead(noticeReadRequest); } + + @ApiOperation("获取业务编号前缀列表") + @PostMapping("/prefixcode/list") + @ResponseBody + public Object getPreFixCodeList() throws Exception{ + Class fixCodeEnumClass = PrefixCodeEnum.class; + Field[] fixCodeEnumFileds = fixCodeEnumClass.getDeclaredFields(); + List fixCodeList=new ArrayList<>(); + for(Field field: fixCodeEnumFileds){ + fixCodeList.add( field.get(PrefixCodeEnum.class).toString()); + } + return ReturnUtil.success(fixCodeList); + } } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java index fb6d4cf..5455fae 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java @@ -4,6 +4,8 @@ import cn.afterturn.easypoi.word.WordExportUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import com.casic.missiles.dto.business.certificate.FilePrintRegister; import com.spire.doc.*; import com.spire.doc.documents.*; import com.spire.doc.fields.DocPicture; @@ -15,7 +17,10 @@ import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; +import java.util.ArrayList; import java.util.Map; +import java.util.List; +import java.util.stream.Collectors; /** * @Author:zt @@ -60,12 +65,11 @@ // 加载文档 Document document = new Document(); document.loadFromFile(wordOldUrl); - -// 获取指定段落 + //获取指定段落 Section section = document.getSections().get(0); -// 获取段落总数 + //获取段落总数 int count = section.getParagraphs().getCount(); -// log.info("获取文档内容段落总数{}",count); + //log.info("获取文档内容段落总数{}",count); Paragraph paragraph = section.getParagraphs().get(0); // 判断是否需要替换书签位置文本内容 @@ -97,36 +101,31 @@ } /** + * 将相同关键字的印章添加到同一个位置进行打印 * 1、根据关键词位置添加电子印章 * 2、替换书签名位置文本内容 bookmarkName传参为null,则不进行书签替换操作 * - * @param wordOldUrl word文件路径 - * @param wordNewUrl 新word文件路径 - * @param stampImgUrl 电子印章图片路径 - * @param keyWord 关键字 (自定义) - * @param keyWordIndex 关键字索引 (-1) - * @param horizontal 电子印章水平位置 (260f) - * @param vertical 电子印章垂直位置 (-55f) - * @param stampWidth 电子印章宽度 (推荐120) - * @param stampHeight 电子印章高度(推荐120) + * @param wordOldUrl word文件路径 + * @param wordNewUrl 新word文件路径 + * @param electronicSealList 电子印章信息 */ - public static void addKeyWordStamp(String wordOldUrl, String wordNewUrl, String stampImgUrl, String stampImgUrl1, - String keyWord, Integer keyWordIndex, Float horizontal, - Float vertical, Float stampWidth, Float stampHeight) { + public static void addSameKeyWordStamp(String wordOldUrl, String wordNewUrl, List electronicSealList) throws RuntimeException { // 加载文档 Document document = new Document(); document.loadFromFile(wordOldUrl); + //获取关键字位置 - TextSelection[] textSelections = document.findAllString(keyWord, false, false); - //加签章照片 - if (ObjectUtils.isNotEmpty(textSelections) && StringUtils.isNotEmpty(stampImgUrl)) { + TextSelection[] textSelections = document.findAllString(electronicSealList.get(0).getKeyWord(), false, false); + for (ElectronicImage electronicSeal : electronicSealList) { + //加签章照片 + if (ObjectUtils.isEmpty(textSelections) || StringUtils.isEmpty(electronicSeal.getElectronicSealImgeUrl())) { + throw new RuntimeException("image url is empty or key word not exist in the word template ..."); + } Paragraph paragraph = textSelections[keyWordIndex > -1 ? 0 : textSelections.length - 1].getAsOneRange().getOwnerParagraph(); //添加公司印章 - DocPicture docPicture = paragraph.appendPicture(stampImgUrl); - + DocPicture docPicture = paragraph.appendPicture(electronicSeal.getElectronicSealImgeUrl()); //设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); - //指定电子章位置 //水平位置 docPicture.setHorizontalPosition(horizontal); @@ -136,28 +135,10 @@ docPicture.setWidth(stampWidth); docPicture.setHeight(stampHeight); } - - //加签名照片 - if (ObjectUtils.isNotEmpty(textSelections) && StringUtils.isNotEmpty(stampImgUrl1)) { - Paragraph paragraph = textSelections[keyWordIndex > -1 ? 0 : textSelections.length - 1].getAsOneRange().getOwnerParagraph(); - // 添加电子印章 - DocPicture docPicture = paragraph.appendPicture(stampImgUrl1); - //设置图片位于文字顶层 - docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); - - //指定电子章位置 - //水平位置 - docPicture.setHorizontalPosition(horizontal); - //垂直位置 - docPicture.setVerticalPosition(vertical); - //设置电子章大小 - docPicture.setWidth(stampWidth); - docPicture.setHeight(stampHeight); - } - //保存添加电子章的Word文档 document.saveToFile(wordNewUrl); document.dispose(); + } /** @@ -316,7 +297,7 @@ document.loadFromFile(wordNewUrl); document.saveToFile(pdfNewUrl, FileFormat.PDF); document.dispose(); -// log.info("文档转换结束,新PDF文档地址:{}",pdfNewUrl); +// log.info("文档转换结束,新PDF文档地址:{}",pdfNewUrl); } @@ -405,77 +386,84 @@ } /** - * 按照模板 填充数据生成word 只支持docx - * - * @param templatePath 模板文件路径 - * @param temDir 生成文件的目录 - * @param fileName 生成文件名 - * @param params 填充参数 + * @param filePrintParam 标准文件注册表 */ - public static void generateReport(String templatePath, String temDir, - String fileName, Map params, - String stampImgUrl, String stampImgUrl1, - String wordNewUrl, String keyWord, - Integer keyWordIndex, Float horizontal, - Float vertical, Float stampWidth, - Float stampHeight, String pdfNewUrl) { + public static void filePrintGenerate(FilePrintRegister filePrintParam) throws RuntimeException { //1、按照模板填充数据,并导出word - String wordOldUrl = exportWord(templatePath, temDir, fileName, params); - //2、照片背景透明设置 - //2.1签章背景透明设置 - BufferedImage bi = file2img(stampImgUrl); - BufferedImage bii = img_alpha(bi, alpha); - String newPngPath = stampImgUrl.substring(0, stampImgUrl.length() - 4) + "1.png"; - img2file(bii, "PNG", newPngPath); - //2.2签名背景透明设置 - BufferedImage b = file2img(stampImgUrl1); - BufferedImage b0 = img_alpha(b, alpha); - String newPngPath1 = stampImgUrl.substring(0, stampImgUrl1.length() - 4) + "1.png"; - img2file(b0, "PNG", newPngPath1); + String wordOldUrl = exportWord(filePrintParam.getTemplatePath(), filePrintParam.getTemDir(), filePrintParam.getFileName(), filePrintParam.getParams()); + //设置透明属性 1、获取照片 2、签章背景透明设置 3、设置照片路径和照片类型进行图片保存 + for (ElectronicImage electronicSeal : filePrintParam.getElectronicImageList()) { + BufferedImage bi = file2img(electronicSeal.getElectronicSealImgeUrl()); + BufferedImage electronSealImage = img_alpha(bi, electronicSeal.getDiaphaneity()); + String stampImgUrl = electronicSeal.getElectronicSealImgeUrl(); + String imagePath = stampImgUrl.substring(0, stampImgUrl.length() - 4) + "1.png"; + String[] imageCutOffContents = stampImgUrl.split("."); + electronicSeal.setElectronicSealImgeUrl(imagePath); + img2file(electronSealImage, imageCutOffContents[imageCutOffContents.length - 1], imagePath); + } - //3、添加签章和签名 - addKeyWordStamp(wordOldUrl, wordNewUrl, newPngPath, newPngPath1, keyWord, keyWordIndex, - horizontal, vertical, stampWidth, stampHeight); + Map> sameKeySealMaps = filePrintParam.getElectronicImageList().stream().collect( + Collectors.groupingBy(ElectronicImage::getKeyWord) + ); + //3、根据关键字进行添加签章和签字 + for (Map.Entry> entry : sameKeySealMaps.entrySet()) { + String mapKey = entry.getKey(); + List electronicSeals = entry.getValue(); + addSameKeyWordStamp(wordOldUrl, filePrintParam.getWordNewUrl(), electronicSeals); + } // 4、将新word转化为pdf文件 - wordToPdf(wordNewUrl, pdfNewUrl); + wordToPdf(filePrintParam.getWordNewUrl(), filePrintParam.getPdfNewUrl()); } - public static void main(String[] args) { + public static void main(String[] args) throws RuntimeException { + + String pathUrl = "D:\\cz\\upload"; //文件与BufferedImage间的转换 //读取图片 - BufferedImage bi = file2img("C:\\upload\\word\\sign.png"); + BufferedImage bi = file2img(pathUrl + "\\sign1.png"); BufferedImage bii = img_alpha(bi, alpha); //生成透明背景图片 - img2file(bii, "PNG", "C:\\upload\\word\\sign1.png"); + img2file(bii, "PNG", pathUrl + "\\sign3.png"); //文件与BufferedImage间的转换 //读取图片 - BufferedImage b = file2img("C:\\upload\\word\\name.png"); + BufferedImage b = file2img(pathUrl + "\\name1.png"); BufferedImage b0 = img_alpha(b, alpha); //生成透明背景图片 - img2file(b0, "PNG", "C:\\upload\\word\\name1.png"); + img2file(b0, "PNG", pathUrl + "\\name3.png"); // 目标文件地址 - String wordOldUrl = "C:\\upload\\word\\wordExport.docx"; + String wordOldUrl = pathUrl + "\\wordExport.docx"; + // 添加电子印章后文件存放地址 - String wordNewUrl = "C:\\upload\\word\\tem2.docx"; + String wordNewUrl = pathUrl + "\\tem.docx"; //WORD转PDF存放位置 - String pdfNewUrl = "C:\\upload\\word\\tem2.pdf"; + String pdfNewUrl = pathUrl + "\\tem.pdf"; //电子印章图片地址 - String stampImgUrl = "C:\\upload\\word\\sign1.png"; + String stampImgUrl = pathUrl + "\\sign3.png"; //电子签名图片地址 - String stampImgUrl1 = "C:\\upload\\word\\name1.png"; + String stampImgUrl1 = pathUrl + "\\name3.png"; // word文档内容关键字 String keyWord = "盖章"; StampUtils addStampUtils = new StampUtils(); - //获取关键字位置并加盖印章并替换书签名位置文本内容 - addStampUtils.addKeyWordStamp(wordOldUrl, wordNewUrl, - stampImgUrl, stampImgUrl1, - keyWord, keyWordIndex, - horizontal, vertical, - stampWidth, stampHeight); + List electronicSealList = new ArrayList(11); + int count = 0; + for (; count < 2; count++) { + ElectronicImage electronicSeal = new ElectronicImage(); + String tempStampImgUrl = count == 0 ? stampImgUrl : stampImgUrl1; + electronicSeal.setElectronicSealImgeUrl(tempStampImgUrl); + electronicSeal.setMereFlag(count == 1); + electronicSeal.setKeyWord(keyWord); + electronicSeal.setKeyWordIndex(keyWordIndex); + electronicSeal.setHorizontal(horizontal); + electronicSeal.setVertical(vertical); + electronicSeal.setStampHeight(stampHeight); + electronicSeal.setStampWidth(stampWidth); + electronicSealList.add(electronicSeal); + } +// addStampUtils.addKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/ElectronicImage.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/ElectronicImage.java new file mode 100644 index 0000000..1253d35 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/ElectronicImage.java @@ -0,0 +1,63 @@ +package com.casic.missiles.dto.business.certificate; + +import lombok.Data; + +/** + * 电子签名 + */ +@Data +public class ElectronicImage { + + + /** + * 电子签章资源路径 + */ + private String electronicSealImgeUrl; + + /** + * 透明度 + */ + private Integer diaphaneity; + + /** + * 透明度 + */ + private Boolean mereFlag; + + /** + * 电子印章水平位置 (当前文件推荐260f) + */ + private Float horizontal; + /** + * 关键字 + */ + private String keyWord; + /** + * 关键字索引 + */ + private Integer keyWordIndex; + /** + * 电子印章垂直位置 (当前推荐455f) + */ + private Float vertical; + /** + * 电子印章宽度(推荐120) + */ + private Float stampWidth; + + /** + * 电子印章高度(推荐120) + */ + private Float stampHeight; + + /** + * 书签名,通过名称寻找书签文本所在位置 + */ + private String bookmarkName; + + /** + * 替换的文本新内容 + */ + private String newBookmarkText; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/FilePrintRegister.java new file mode 100644 index 0000000..618929c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/FilePrintRegister.java @@ -0,0 +1,43 @@ +package com.casic.missiles.dto.business.certificate; + +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + * @author cz + * 打印图片注册表信息 + */ +@Data +public class FilePrintRegister { + + /** + * 模板文件的目录 + */ + private String templatePath; + /** + * + */ + private String temDir; + /** + * 生成文件名 + */ + private String fileName; + /** + * 模板参数 + */ + private Map params; + /** + * 生成 word文件名 + */ + private String wordNewUrl; + /** + * 生成pdf文件名 + */ + private String pdfNewUrl; + /** + * electronicSealList 填充的电子图片信息 + */ + List electronicImageList; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java index ab5978d..c4ac101 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java @@ -149,6 +149,7 @@ this.doSampleListPopulation(businessOrder); for (CustomerSampleInfo sampleInfo : businessOrder.getCustomerSampleInfoList()) { sampleInfo.setDeliverer(businessOrder.getDeliverer()); + sampleInfo.setCustomerNo(businessOrder.getCustomerNo()); sampleInfo.setDelivererTel(businessOrder.getDelivererTel()); if ("0".equals(sampleInfo.getIsExistSample())) { ReturnDTO returnDTO = customerSampleService.addSample(sampleInfo); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java index 8e41658..17d7a86 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java @@ -201,8 +201,9 @@ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("sample_id", deviceStatusChangeDTO.getSampleId()); queryWrapper.eq("order_id", deviceStatusChangeDTO.getOrderId()); - queryWrapper.and(wrapper -> wrapper.eq("sample_status", TO_HANDOUT).or() - .eq("sample_status", IN_MEASURE)); + queryWrapper.and(QueryWrapper -> QueryWrapper.eq("measure_status", MeasureStatusEnum.TO_ALLOCATE) + .or().eq("measure_status", MeasureStatusEnum.TO_MEASURE) + .or().eq("measure_status", MeasureStatusEnum.IN_MEASURE)); BusinessLabExecutiveInfo businessLabExecutiveInfo = new BusinessLabExecutiveInfo(); businessLabExecutiveInfo.setMeasureStatus(measureStatus); businessLabExecutiveInfo.setRemark(deviceStatusChangeDTO.getReason()); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java index 3534a47..5fb246a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java @@ -86,16 +86,4 @@ return resultData; } - @GetMapping("/prefixcode/list") - @ResponseBody - public Object getPreFixCodeList() throws Exception{ - Class fixCodeEnumClass = PrefixCodeEnum.class; - Field[] fixCodeEnumFileds = fixCodeEnumClass.getDeclaredFields(); - List fixCodeList=new ArrayList<>(); - for(Field field: fixCodeEnumFileds){ - fixCodeList.add( field.get(PrefixCodeEnum.class).toString()); - } - return ReturnUtil.success(fixCodeList); - } - } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java index 68334d8..21e34ae 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/SystemController.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.system.*; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; +import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.system.SystemNotice; @@ -30,6 +31,8 @@ import javax.validation.Valid; import java.io.IOException; +import java.lang.reflect.Field; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -277,4 +280,17 @@ } return noticeService.noticeRead(noticeReadRequest); } + + @ApiOperation("获取业务编号前缀列表") + @PostMapping("/prefixcode/list") + @ResponseBody + public Object getPreFixCodeList() throws Exception{ + Class fixCodeEnumClass = PrefixCodeEnum.class; + Field[] fixCodeEnumFileds = fixCodeEnumClass.getDeclaredFields(); + List fixCodeList=new ArrayList<>(); + for(Field field: fixCodeEnumFileds){ + fixCodeList.add( field.get(PrefixCodeEnum.class).toString()); + } + return ReturnUtil.success(fixCodeList); + } } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java index fb6d4cf..5455fae 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/StampUtils.java @@ -4,6 +4,8 @@ import cn.afterturn.easypoi.word.WordExportUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import com.casic.missiles.dto.business.certificate.FilePrintRegister; import com.spire.doc.*; import com.spire.doc.documents.*; import com.spire.doc.fields.DocPicture; @@ -15,7 +17,10 @@ import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; +import java.util.ArrayList; import java.util.Map; +import java.util.List; +import java.util.stream.Collectors; /** * @Author:zt @@ -60,12 +65,11 @@ // 加载文档 Document document = new Document(); document.loadFromFile(wordOldUrl); - -// 获取指定段落 + //获取指定段落 Section section = document.getSections().get(0); -// 获取段落总数 + //获取段落总数 int count = section.getParagraphs().getCount(); -// log.info("获取文档内容段落总数{}",count); + //log.info("获取文档内容段落总数{}",count); Paragraph paragraph = section.getParagraphs().get(0); // 判断是否需要替换书签位置文本内容 @@ -97,36 +101,31 @@ } /** + * 将相同关键字的印章添加到同一个位置进行打印 * 1、根据关键词位置添加电子印章 * 2、替换书签名位置文本内容 bookmarkName传参为null,则不进行书签替换操作 * - * @param wordOldUrl word文件路径 - * @param wordNewUrl 新word文件路径 - * @param stampImgUrl 电子印章图片路径 - * @param keyWord 关键字 (自定义) - * @param keyWordIndex 关键字索引 (-1) - * @param horizontal 电子印章水平位置 (260f) - * @param vertical 电子印章垂直位置 (-55f) - * @param stampWidth 电子印章宽度 (推荐120) - * @param stampHeight 电子印章高度(推荐120) + * @param wordOldUrl word文件路径 + * @param wordNewUrl 新word文件路径 + * @param electronicSealList 电子印章信息 */ - public static void addKeyWordStamp(String wordOldUrl, String wordNewUrl, String stampImgUrl, String stampImgUrl1, - String keyWord, Integer keyWordIndex, Float horizontal, - Float vertical, Float stampWidth, Float stampHeight) { + public static void addSameKeyWordStamp(String wordOldUrl, String wordNewUrl, List electronicSealList) throws RuntimeException { // 加载文档 Document document = new Document(); document.loadFromFile(wordOldUrl); + //获取关键字位置 - TextSelection[] textSelections = document.findAllString(keyWord, false, false); - //加签章照片 - if (ObjectUtils.isNotEmpty(textSelections) && StringUtils.isNotEmpty(stampImgUrl)) { + TextSelection[] textSelections = document.findAllString(electronicSealList.get(0).getKeyWord(), false, false); + for (ElectronicImage electronicSeal : electronicSealList) { + //加签章照片 + if (ObjectUtils.isEmpty(textSelections) || StringUtils.isEmpty(electronicSeal.getElectronicSealImgeUrl())) { + throw new RuntimeException("image url is empty or key word not exist in the word template ..."); + } Paragraph paragraph = textSelections[keyWordIndex > -1 ? 0 : textSelections.length - 1].getAsOneRange().getOwnerParagraph(); //添加公司印章 - DocPicture docPicture = paragraph.appendPicture(stampImgUrl); - + DocPicture docPicture = paragraph.appendPicture(electronicSeal.getElectronicSealImgeUrl()); //设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); - //指定电子章位置 //水平位置 docPicture.setHorizontalPosition(horizontal); @@ -136,28 +135,10 @@ docPicture.setWidth(stampWidth); docPicture.setHeight(stampHeight); } - - //加签名照片 - if (ObjectUtils.isNotEmpty(textSelections) && StringUtils.isNotEmpty(stampImgUrl1)) { - Paragraph paragraph = textSelections[keyWordIndex > -1 ? 0 : textSelections.length - 1].getAsOneRange().getOwnerParagraph(); - // 添加电子印章 - DocPicture docPicture = paragraph.appendPicture(stampImgUrl1); - //设置图片位于文字顶层 - docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); - - //指定电子章位置 - //水平位置 - docPicture.setHorizontalPosition(horizontal); - //垂直位置 - docPicture.setVerticalPosition(vertical); - //设置电子章大小 - docPicture.setWidth(stampWidth); - docPicture.setHeight(stampHeight); - } - //保存添加电子章的Word文档 document.saveToFile(wordNewUrl); document.dispose(); + } /** @@ -316,7 +297,7 @@ document.loadFromFile(wordNewUrl); document.saveToFile(pdfNewUrl, FileFormat.PDF); document.dispose(); -// log.info("文档转换结束,新PDF文档地址:{}",pdfNewUrl); +// log.info("文档转换结束,新PDF文档地址:{}",pdfNewUrl); } @@ -405,77 +386,84 @@ } /** - * 按照模板 填充数据生成word 只支持docx - * - * @param templatePath 模板文件路径 - * @param temDir 生成文件的目录 - * @param fileName 生成文件名 - * @param params 填充参数 + * @param filePrintParam 标准文件注册表 */ - public static void generateReport(String templatePath, String temDir, - String fileName, Map params, - String stampImgUrl, String stampImgUrl1, - String wordNewUrl, String keyWord, - Integer keyWordIndex, Float horizontal, - Float vertical, Float stampWidth, - Float stampHeight, String pdfNewUrl) { + public static void filePrintGenerate(FilePrintRegister filePrintParam) throws RuntimeException { //1、按照模板填充数据,并导出word - String wordOldUrl = exportWord(templatePath, temDir, fileName, params); - //2、照片背景透明设置 - //2.1签章背景透明设置 - BufferedImage bi = file2img(stampImgUrl); - BufferedImage bii = img_alpha(bi, alpha); - String newPngPath = stampImgUrl.substring(0, stampImgUrl.length() - 4) + "1.png"; - img2file(bii, "PNG", newPngPath); - //2.2签名背景透明设置 - BufferedImage b = file2img(stampImgUrl1); - BufferedImage b0 = img_alpha(b, alpha); - String newPngPath1 = stampImgUrl.substring(0, stampImgUrl1.length() - 4) + "1.png"; - img2file(b0, "PNG", newPngPath1); + String wordOldUrl = exportWord(filePrintParam.getTemplatePath(), filePrintParam.getTemDir(), filePrintParam.getFileName(), filePrintParam.getParams()); + //设置透明属性 1、获取照片 2、签章背景透明设置 3、设置照片路径和照片类型进行图片保存 + for (ElectronicImage electronicSeal : filePrintParam.getElectronicImageList()) { + BufferedImage bi = file2img(electronicSeal.getElectronicSealImgeUrl()); + BufferedImage electronSealImage = img_alpha(bi, electronicSeal.getDiaphaneity()); + String stampImgUrl = electronicSeal.getElectronicSealImgeUrl(); + String imagePath = stampImgUrl.substring(0, stampImgUrl.length() - 4) + "1.png"; + String[] imageCutOffContents = stampImgUrl.split("."); + electronicSeal.setElectronicSealImgeUrl(imagePath); + img2file(electronSealImage, imageCutOffContents[imageCutOffContents.length - 1], imagePath); + } - //3、添加签章和签名 - addKeyWordStamp(wordOldUrl, wordNewUrl, newPngPath, newPngPath1, keyWord, keyWordIndex, - horizontal, vertical, stampWidth, stampHeight); + Map> sameKeySealMaps = filePrintParam.getElectronicImageList().stream().collect( + Collectors.groupingBy(ElectronicImage::getKeyWord) + ); + //3、根据关键字进行添加签章和签字 + for (Map.Entry> entry : sameKeySealMaps.entrySet()) { + String mapKey = entry.getKey(); + List electronicSeals = entry.getValue(); + addSameKeyWordStamp(wordOldUrl, filePrintParam.getWordNewUrl(), electronicSeals); + } // 4、将新word转化为pdf文件 - wordToPdf(wordNewUrl, pdfNewUrl); + wordToPdf(filePrintParam.getWordNewUrl(), filePrintParam.getPdfNewUrl()); } - public static void main(String[] args) { + public static void main(String[] args) throws RuntimeException { + + String pathUrl = "D:\\cz\\upload"; //文件与BufferedImage间的转换 //读取图片 - BufferedImage bi = file2img("C:\\upload\\word\\sign.png"); + BufferedImage bi = file2img(pathUrl + "\\sign1.png"); BufferedImage bii = img_alpha(bi, alpha); //生成透明背景图片 - img2file(bii, "PNG", "C:\\upload\\word\\sign1.png"); + img2file(bii, "PNG", pathUrl + "\\sign3.png"); //文件与BufferedImage间的转换 //读取图片 - BufferedImage b = file2img("C:\\upload\\word\\name.png"); + BufferedImage b = file2img(pathUrl + "\\name1.png"); BufferedImage b0 = img_alpha(b, alpha); //生成透明背景图片 - img2file(b0, "PNG", "C:\\upload\\word\\name1.png"); + img2file(b0, "PNG", pathUrl + "\\name3.png"); // 目标文件地址 - String wordOldUrl = "C:\\upload\\word\\wordExport.docx"; + String wordOldUrl = pathUrl + "\\wordExport.docx"; + // 添加电子印章后文件存放地址 - String wordNewUrl = "C:\\upload\\word\\tem2.docx"; + String wordNewUrl = pathUrl + "\\tem.docx"; //WORD转PDF存放位置 - String pdfNewUrl = "C:\\upload\\word\\tem2.pdf"; + String pdfNewUrl = pathUrl + "\\tem.pdf"; //电子印章图片地址 - String stampImgUrl = "C:\\upload\\word\\sign1.png"; + String stampImgUrl = pathUrl + "\\sign3.png"; //电子签名图片地址 - String stampImgUrl1 = "C:\\upload\\word\\name1.png"; + String stampImgUrl1 = pathUrl + "\\name3.png"; // word文档内容关键字 String keyWord = "盖章"; StampUtils addStampUtils = new StampUtils(); - //获取关键字位置并加盖印章并替换书签名位置文本内容 - addStampUtils.addKeyWordStamp(wordOldUrl, wordNewUrl, - stampImgUrl, stampImgUrl1, - keyWord, keyWordIndex, - horizontal, vertical, - stampWidth, stampHeight); + List electronicSealList = new ArrayList(11); + int count = 0; + for (; count < 2; count++) { + ElectronicImage electronicSeal = new ElectronicImage(); + String tempStampImgUrl = count == 0 ? stampImgUrl : stampImgUrl1; + electronicSeal.setElectronicSealImgeUrl(tempStampImgUrl); + electronicSeal.setMereFlag(count == 1); + electronicSeal.setKeyWord(keyWord); + electronicSeal.setKeyWordIndex(keyWordIndex); + electronicSeal.setHorizontal(horizontal); + electronicSeal.setVertical(vertical); + electronicSeal.setStampHeight(stampHeight); + electronicSeal.setStampWidth(stampWidth); + electronicSealList.add(electronicSeal); + } +// addStampUtils.addKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/ElectronicImage.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/ElectronicImage.java new file mode 100644 index 0000000..1253d35 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/ElectronicImage.java @@ -0,0 +1,63 @@ +package com.casic.missiles.dto.business.certificate; + +import lombok.Data; + +/** + * 电子签名 + */ +@Data +public class ElectronicImage { + + + /** + * 电子签章资源路径 + */ + private String electronicSealImgeUrl; + + /** + * 透明度 + */ + private Integer diaphaneity; + + /** + * 透明度 + */ + private Boolean mereFlag; + + /** + * 电子印章水平位置 (当前文件推荐260f) + */ + private Float horizontal; + /** + * 关键字 + */ + private String keyWord; + /** + * 关键字索引 + */ + private Integer keyWordIndex; + /** + * 电子印章垂直位置 (当前推荐455f) + */ + private Float vertical; + /** + * 电子印章宽度(推荐120) + */ + private Float stampWidth; + + /** + * 电子印章高度(推荐120) + */ + private Float stampHeight; + + /** + * 书签名,通过名称寻找书签文本所在位置 + */ + private String bookmarkName; + + /** + * 替换的文本新内容 + */ + private String newBookmarkText; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/FilePrintRegister.java new file mode 100644 index 0000000..618929c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/certificate/FilePrintRegister.java @@ -0,0 +1,43 @@ +package com.casic.missiles.dto.business.certificate; + +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + * @author cz + * 打印图片注册表信息 + */ +@Data +public class FilePrintRegister { + + /** + * 模板文件的目录 + */ + private String templatePath; + /** + * + */ + private String temDir; + /** + * 生成文件名 + */ + private String fileName; + /** + * 模板参数 + */ + private Map params; + /** + * 生成 word文件名 + */ + private String wordNewUrl; + /** + * 生成pdf文件名 + */ + private String pdfNewUrl; + /** + * electronicSealList 填充的电子图片信息 + */ + List electronicImageList; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java index ab5978d..c4ac101 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOrderServiceImpl.java @@ -149,6 +149,7 @@ this.doSampleListPopulation(businessOrder); for (CustomerSampleInfo sampleInfo : businessOrder.getCustomerSampleInfoList()) { sampleInfo.setDeliverer(businessOrder.getDeliverer()); + sampleInfo.setCustomerNo(businessOrder.getCustomerNo()); sampleInfo.setDelivererTel(businessOrder.getDelivererTel()); if ("0".equals(sampleInfo.getIsExistSample())) { ReturnDTO returnDTO = customerSampleService.addSample(sampleInfo); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java index 8e41658..17d7a86 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java @@ -201,8 +201,9 @@ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("sample_id", deviceStatusChangeDTO.getSampleId()); queryWrapper.eq("order_id", deviceStatusChangeDTO.getOrderId()); - queryWrapper.and(wrapper -> wrapper.eq("sample_status", TO_HANDOUT).or() - .eq("sample_status", IN_MEASURE)); + queryWrapper.and(QueryWrapper -> QueryWrapper.eq("measure_status", MeasureStatusEnum.TO_ALLOCATE) + .or().eq("measure_status", MeasureStatusEnum.TO_MEASURE) + .or().eq("measure_status", MeasureStatusEnum.IN_MEASURE)); BusinessLabExecutiveInfo businessLabExecutiveInfo = new BusinessLabExecutiveInfo(); businessLabExecutiveInfo.setMeasureStatus(measureStatus); businessLabExecutiveInfo.setRemark(deviceStatusChangeDTO.getReason()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java index 9fa94f8..4babf96 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java @@ -204,7 +204,6 @@ queryWrapper.like(StringUtils.isNotBlank(request.getCustomerNo()), "customer_no", request.getCustomerNo()); if (!StringUtils.isEmpty(request.getOvertimeStatus())) { queryWrapper.apply("1".equals(request.getOvertimeStatus()), - "sysdate() > DATE_FORMAT(valid_deadline,'%Y-%m-%d')"); queryWrapper.apply("0".equals(request.getOvertimeStatus()), "sysdate() <= DATE_FORMAT(valid_deadline,'%Y-%m-%d')");