diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java index 4217cc1..e190f9d 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java @@ -16,6 +16,10 @@ private String electronicSealImageUrl; /** + * 电子签章资源路径(列表扩展) + */ + private String electronicSealImageUrls; + /** * 电子签名标记 */ private Boolean isSealImage= false; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java index 4217cc1..e190f9d 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java @@ -16,6 +16,10 @@ private String electronicSealImageUrl; /** + * 电子签章资源路径(列表扩展) + */ + private String electronicSealImageUrls; + /** * 电子签名标记 */ private Boolean isSealImage= false; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java index d40e85f..7d4b3e8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java @@ -86,7 +86,6 @@ lambdaQueryWrapper.eq(BizQualityInternalPlanUser::getPlanId, exportDTO.getId()); //查询组长名称 UserInfo userInfo = userInfoMapper.selectById(bizQualityInternalAuditPlan.getGroupLeader()); - if (ObjectUtil.isEmpty(userInfo)) { throw new BusinessException(16000, String.format("找不到该组长")); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java index 4217cc1..e190f9d 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java @@ -16,6 +16,10 @@ private String electronicSealImageUrl; /** + * 电子签章资源路径(列表扩展) + */ + private String electronicSealImageUrls; + /** * 电子签名标记 */ private Boolean isSealImage= false; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java index d40e85f..7d4b3e8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java @@ -86,7 +86,6 @@ lambdaQueryWrapper.eq(BizQualityInternalPlanUser::getPlanId, exportDTO.getId()); //查询组长名称 UserInfo userInfo = userInfoMapper.selectById(bizQualityInternalAuditPlan.getGroupLeader()); - if (ObjectUtil.isEmpty(userInfo)) { throw new BusinessException(16000, String.format("找不到该组长")); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java index 68c8659..a4a6a80 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.service.Impl.resource; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -22,10 +23,12 @@ import com.casic.missiles.utils.MinioUtil; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -132,7 +135,13 @@ } if (CollectionUtils.isNotEmpty(sealInfoPage.getRecords())) { Map map = new HashMap<>(); - map.put("sealList", sealInfoPage.getRecords()); + sealInfoPage.getRecords().get(0).setMinioFileName(sealInfoPage.getRecords().get(0).getMinioFileName()); + List sealMapList = new ArrayList<>(); + for (BizResourceSealInfo bizResourceSealInfo : sealInfoPage.getRecords()) { + sealMapList.add(BeanUtil.beanToMap(bizResourceSealInfo)); + } + map.put("sealList", sealMapList); + map.put("id", sealInfoPage.getRecords().get(0).getId()); printFileRegister.registerPrintFile(RESOURCE_SEAL_INFO, EXPORT_TEMPLATE, null, map, request.isPdf(), response); } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java index 4217cc1..e190f9d 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java @@ -16,6 +16,10 @@ private String electronicSealImageUrl; /** + * 电子签章资源路径(列表扩展) + */ + private String electronicSealImageUrls; + /** * 电子签名标记 */ private Boolean isSealImage= false; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java index d40e85f..7d4b3e8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java @@ -86,7 +86,6 @@ lambdaQueryWrapper.eq(BizQualityInternalPlanUser::getPlanId, exportDTO.getId()); //查询组长名称 UserInfo userInfo = userInfoMapper.selectById(bizQualityInternalAuditPlan.getGroupLeader()); - if (ObjectUtil.isEmpty(userInfo)) { throw new BusinessException(16000, String.format("找不到该组长")); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java index 68c8659..a4a6a80 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.service.Impl.resource; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -22,10 +23,12 @@ import com.casic.missiles.utils.MinioUtil; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -132,7 +135,13 @@ } if (CollectionUtils.isNotEmpty(sealInfoPage.getRecords())) { Map map = new HashMap<>(); - map.put("sealList", sealInfoPage.getRecords()); + sealInfoPage.getRecords().get(0).setMinioFileName(sealInfoPage.getRecords().get(0).getMinioFileName()); + List sealMapList = new ArrayList<>(); + for (BizResourceSealInfo bizResourceSealInfo : sealInfoPage.getRecords()) { + sealMapList.add(BeanUtil.beanToMap(bizResourceSealInfo)); + } + map.put("sealList", sealMapList); + map.put("id", sealInfoPage.getRecords().get(0).getId()); printFileRegister.registerPrintFile(RESOURCE_SEAL_INFO, EXPORT_TEMPLATE, null, map, request.isPdf(), response); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/DocPictureProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/DocPictureProvider.java index 4e837f2..8547eed 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/DocPictureProvider.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/DocPictureProvider.java @@ -1,21 +1,24 @@ package com.casic.missiles.service.listeners.register; import com.aspose.words.SectionCollection; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.casic.missiles.dto.certificate.CropPicture; import com.casic.missiles.dto.certificate.ElectronicImage; +import com.casic.missiles.model.file.ImageConfig; import com.itextpdf.text.BadElementException; import com.itextpdf.text.Image; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfStamper; -import com.spire.doc.Document; -import com.spire.doc.FieldType; -import com.spire.doc.HeaderFooter; +import com.spire.doc.*; +import com.spire.doc.collections.RowCollection; import com.spire.doc.documents.HorizontalAlignment; import com.spire.doc.documents.Paragraph; +import com.spire.doc.documents.TextSelection; import com.spire.doc.documents.TextWrappingStyle; import com.spire.doc.fields.DocPicture; +import liquibase.pro.packaged.D; import lombok.extern.slf4j.Slf4j; import javax.imageio.ImageIO; @@ -24,6 +27,7 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.util.Iterator; import java.util.List; /** @@ -146,5 +150,82 @@ } } + /** + * 暂时只处理多图片的场景 + * + * @param electronicSeal + * @param document + */ + public static void populateMultiImage(ElectronicImage electronicSeal, Document document) { + ImageConfig imageConfig = electronicSeal.getImageConfig(); + Section section = document.getSections().get(0); + Table table = section.getTables().get(imageConfig.getTableIndex()-1); + RowCollection rows = table.getRows(); + if (ObjectUtils.isNotEmpty(imageConfig) && + (ObjectUtils.isNotEmpty(imageConfig.getTableIndex()) && imageConfig.getTableIndex() != -1) && + (ObjectUtils.isNotEmpty(imageConfig.getColIndex()) && imageConfig.getColIndex() != -1)) { + String[] imageUrls = electronicSeal.getElectronicSealImageUrls().split(","); + for (int i = 1; i < rows.getCount(); i++) { + TableCell cell = rows.get(i).getCells().get(imageConfig.getColIndex()-1); + DocPicture docPicture = cell.getFirstParagraph().appendPicture(electronicSeal.getElectronicSealImageUrl() + imageUrls[i-1]); + //水平位置 + docPicture.setHorizontalAlignment(ShapeHorizontalAlignment.Center); + //垂直位置 + docPicture.setVerticalAlignment(ShapeVerticalAlignment.Center); + //设置电子章大小 //宽度可以计算 + docPicture.setWidth(cell.getWidth()*2); + docPicture.setHeight(rows.get(i).getHeight()); + //合并行列是选填,需要进一步判断 + if (ObjectUtils.isNotEmpty(imageConfig.getRowSpan())) { + docPicture.setHeight(docPicture.getHeight() * imageConfig.getRowSpan()); + } + if (ObjectUtils.isNotEmpty(imageConfig.getColSpan())) { + docPicture.setWidth(docPicture.getWidth() * imageConfig.getColSpan()); + } + } + } + } + + + /** + * 图片填充,分为单个图片或者行列的图片 + * 1、单个图片具体表、行、列位置不可为-1 + * + * @param electronicSeal + * @param keyWordIndex + * @param textSelections + * @param docPicture + */ + public static void populateSingleImage(ElectronicImage electronicSeal, + Integer keyWordIndex, TextSelection[] textSelections, DocPicture docPicture) { + ImageConfig imageConfig = electronicSeal.getImageConfig(); + if (ObjectUtils.isNotEmpty(imageConfig) && + (ObjectUtils.isNotEmpty(imageConfig.getTableIndex()) && imageConfig.getTableIndex() != -1) && + (ObjectUtils.isNotEmpty(imageConfig.getRowIndex()) && imageConfig.getRowIndex() != -1) && + (ObjectUtils.isNotEmpty(imageConfig.getColIndex()) && imageConfig.getColIndex() != -1)) { + //指定电子章位置 + Section section = textSelections[keyWordIndex].getAsOneRange().getDocument().getLastSection(); + //水平位置 + docPicture.setHorizontalAlignment(ShapeHorizontalAlignment.Center); + //垂直位置 + docPicture.setVerticalAlignment(ShapeVerticalAlignment.Center); + //设置电子章大小 //宽度可以计算 + docPicture.setWidth(section.getTables().get(imageConfig.getTableIndex()) + .getRows().get(imageConfig.getRowIndex()).getCells().get(imageConfig.getColIndex()).getWidth()); + docPicture.setHeight(section.getTables().get(imageConfig.getTableIndex()) + .getRows().get(imageConfig.getRowIndex()).getHeight()); + //合并行列是选填,需要进一步判断 + if (ObjectUtils.isNotEmpty(imageConfig.getRowSpan())) { + docPicture.setHeight(docPicture.getHeight() * imageConfig.getRowSpan()); + } + if (ObjectUtils.isNotEmpty(imageConfig.getColSpan())) { + docPicture.setWidth(docPicture.getWidth() * imageConfig.getColSpan()); + } + } else { + docPicture.setVerticalPosition(0f); + docPicture.setWidth(electronicSeal.getStampWidth()); + docPicture.setHeight(electronicSeal.getStampHeight()); + } + } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java index 4217cc1..e190f9d 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java @@ -16,6 +16,10 @@ private String electronicSealImageUrl; /** + * 电子签章资源路径(列表扩展) + */ + private String electronicSealImageUrls; + /** * 电子签名标记 */ private Boolean isSealImage= false; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java index d40e85f..7d4b3e8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java @@ -86,7 +86,6 @@ lambdaQueryWrapper.eq(BizQualityInternalPlanUser::getPlanId, exportDTO.getId()); //查询组长名称 UserInfo userInfo = userInfoMapper.selectById(bizQualityInternalAuditPlan.getGroupLeader()); - if (ObjectUtil.isEmpty(userInfo)) { throw new BusinessException(16000, String.format("找不到该组长")); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java index 68c8659..a4a6a80 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.service.Impl.resource; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -22,10 +23,12 @@ import com.casic.missiles.utils.MinioUtil; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -132,7 +135,13 @@ } if (CollectionUtils.isNotEmpty(sealInfoPage.getRecords())) { Map map = new HashMap<>(); - map.put("sealList", sealInfoPage.getRecords()); + sealInfoPage.getRecords().get(0).setMinioFileName(sealInfoPage.getRecords().get(0).getMinioFileName()); + List sealMapList = new ArrayList<>(); + for (BizResourceSealInfo bizResourceSealInfo : sealInfoPage.getRecords()) { + sealMapList.add(BeanUtil.beanToMap(bizResourceSealInfo)); + } + map.put("sealList", sealMapList); + map.put("id", sealInfoPage.getRecords().get(0).getId()); printFileRegister.registerPrintFile(RESOURCE_SEAL_INFO, EXPORT_TEMPLATE, null, map, request.isPdf(), response); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/DocPictureProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/DocPictureProvider.java index 4e837f2..8547eed 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/DocPictureProvider.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/DocPictureProvider.java @@ -1,21 +1,24 @@ package com.casic.missiles.service.listeners.register; import com.aspose.words.SectionCollection; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.casic.missiles.dto.certificate.CropPicture; import com.casic.missiles.dto.certificate.ElectronicImage; +import com.casic.missiles.model.file.ImageConfig; import com.itextpdf.text.BadElementException; import com.itextpdf.text.Image; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfStamper; -import com.spire.doc.Document; -import com.spire.doc.FieldType; -import com.spire.doc.HeaderFooter; +import com.spire.doc.*; +import com.spire.doc.collections.RowCollection; import com.spire.doc.documents.HorizontalAlignment; import com.spire.doc.documents.Paragraph; +import com.spire.doc.documents.TextSelection; import com.spire.doc.documents.TextWrappingStyle; import com.spire.doc.fields.DocPicture; +import liquibase.pro.packaged.D; import lombok.extern.slf4j.Slf4j; import javax.imageio.ImageIO; @@ -24,6 +27,7 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.util.Iterator; import java.util.List; /** @@ -146,5 +150,82 @@ } } + /** + * 暂时只处理多图片的场景 + * + * @param electronicSeal + * @param document + */ + public static void populateMultiImage(ElectronicImage electronicSeal, Document document) { + ImageConfig imageConfig = electronicSeal.getImageConfig(); + Section section = document.getSections().get(0); + Table table = section.getTables().get(imageConfig.getTableIndex()-1); + RowCollection rows = table.getRows(); + if (ObjectUtils.isNotEmpty(imageConfig) && + (ObjectUtils.isNotEmpty(imageConfig.getTableIndex()) && imageConfig.getTableIndex() != -1) && + (ObjectUtils.isNotEmpty(imageConfig.getColIndex()) && imageConfig.getColIndex() != -1)) { + String[] imageUrls = electronicSeal.getElectronicSealImageUrls().split(","); + for (int i = 1; i < rows.getCount(); i++) { + TableCell cell = rows.get(i).getCells().get(imageConfig.getColIndex()-1); + DocPicture docPicture = cell.getFirstParagraph().appendPicture(electronicSeal.getElectronicSealImageUrl() + imageUrls[i-1]); + //水平位置 + docPicture.setHorizontalAlignment(ShapeHorizontalAlignment.Center); + //垂直位置 + docPicture.setVerticalAlignment(ShapeVerticalAlignment.Center); + //设置电子章大小 //宽度可以计算 + docPicture.setWidth(cell.getWidth()*2); + docPicture.setHeight(rows.get(i).getHeight()); + //合并行列是选填,需要进一步判断 + if (ObjectUtils.isNotEmpty(imageConfig.getRowSpan())) { + docPicture.setHeight(docPicture.getHeight() * imageConfig.getRowSpan()); + } + if (ObjectUtils.isNotEmpty(imageConfig.getColSpan())) { + docPicture.setWidth(docPicture.getWidth() * imageConfig.getColSpan()); + } + } + } + } + + + /** + * 图片填充,分为单个图片或者行列的图片 + * 1、单个图片具体表、行、列位置不可为-1 + * + * @param electronicSeal + * @param keyWordIndex + * @param textSelections + * @param docPicture + */ + public static void populateSingleImage(ElectronicImage electronicSeal, + Integer keyWordIndex, TextSelection[] textSelections, DocPicture docPicture) { + ImageConfig imageConfig = electronicSeal.getImageConfig(); + if (ObjectUtils.isNotEmpty(imageConfig) && + (ObjectUtils.isNotEmpty(imageConfig.getTableIndex()) && imageConfig.getTableIndex() != -1) && + (ObjectUtils.isNotEmpty(imageConfig.getRowIndex()) && imageConfig.getRowIndex() != -1) && + (ObjectUtils.isNotEmpty(imageConfig.getColIndex()) && imageConfig.getColIndex() != -1)) { + //指定电子章位置 + Section section = textSelections[keyWordIndex].getAsOneRange().getDocument().getLastSection(); + //水平位置 + docPicture.setHorizontalAlignment(ShapeHorizontalAlignment.Center); + //垂直位置 + docPicture.setVerticalAlignment(ShapeVerticalAlignment.Center); + //设置电子章大小 //宽度可以计算 + docPicture.setWidth(section.getTables().get(imageConfig.getTableIndex()) + .getRows().get(imageConfig.getRowIndex()).getCells().get(imageConfig.getColIndex()).getWidth()); + docPicture.setHeight(section.getTables().get(imageConfig.getTableIndex()) + .getRows().get(imageConfig.getRowIndex()).getHeight()); + //合并行列是选填,需要进一步判断 + if (ObjectUtils.isNotEmpty(imageConfig.getRowSpan())) { + docPicture.setHeight(docPicture.getHeight() * imageConfig.getRowSpan()); + } + if (ObjectUtils.isNotEmpty(imageConfig.getColSpan())) { + docPicture.setWidth(docPicture.getWidth() * imageConfig.getColSpan()); + } + } else { + docPicture.setVerticalPosition(0f); + docPicture.setWidth(electronicSeal.getStampWidth()); + docPicture.setHeight(electronicSeal.getStampHeight()); + } + } } 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 b1cd772..2cf2437 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 @@ -139,39 +139,11 @@ Paragraph paragraph = textSelections[keyWordIndex].getAsOneRange().getOwnerParagraph(); //添加公司印章 DocPicture docPicture = paragraph.appendPicture(electronicSeal.getElectronicSealImageUrl()); - //表、行、列索引是必填的,兼容之前的代码,之前的代码不用配置 - ImageConfig imageConfig = electronicSeal.getImageConfig(); //设置图片位于文字顶层 if (ObjectUtils.isNotEmpty(electronicSeal.getIsSealImage()) && electronicSeal.getIsSealImage()) { docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); } - if (ObjectUtils.isNotEmpty(imageConfig) && - (ObjectUtils.isNotEmpty(imageConfig.getTableIndex()) && imageConfig.getTableIndex() != -1) && - (ObjectUtils.isNotEmpty(imageConfig.getRowIndex()) && imageConfig.getRowIndex() != -1) && - (ObjectUtils.isNotEmpty(imageConfig.getColIndex()) && imageConfig.getColIndex() != -1)) { - //指定电子章位置 - Section section = textSelections[keyWordIndex].getAsOneRange().getDocument().getLastSection(); - //水平位置 - docPicture.setHorizontalAlignment(ShapeHorizontalAlignment.Center); - //垂直位置 - docPicture.setVerticalAlignment(ShapeVerticalAlignment.Center); - //设置电子章大小 //宽度可以计算 - docPicture.setWidth(section.getTables().get(imageConfig.getTableIndex()) - .getRows().get(imageConfig.getRowIndex()).getCells().get(imageConfig.getColIndex()).getWidth()); - docPicture.setHeight(section.getTables().get(imageConfig.getTableIndex()) - .getRows().get(imageConfig.getRowIndex()).getHeight()); - //合并行列是选填,需要进一步判断 - if (ObjectUtils.isNotEmpty(imageConfig.getRowSpan())) { - docPicture.setHeight(docPicture.getHeight() * imageConfig.getRowSpan()); - } - if (ObjectUtils.isNotEmpty(imageConfig.getColSpan())) { - docPicture.setWidth(docPicture.getWidth() * imageConfig.getColSpan()); - } - } else { - docPicture.setVerticalPosition(0f); - docPicture.setWidth(electronicSeal.getStampWidth()); - docPicture.setHeight(electronicSeal.getStampHeight()); - } + DocPictureProvider.populateSingleImage(electronicSeal, keyWordIndex, textSelections, docPicture); //带有公章的关键字且页数大于2,需要设置骑缝章 if (INSIGNIA_KEYWORD.equals(electronicSeal.getKeyWord()) && document.getPageCount() >= 2) { selectSeal = electronicSeal; @@ -247,6 +219,7 @@ /** * 1、自定义位置添加电子印章 * 2、替换书签名位置文本内容 bookmarkName传参为null,则不进行书签替换操作 + * 3、 * * @param wordOldUrl word文件路径 * @param wordNewUrl 新word文件路径 @@ -256,15 +229,20 @@ Document document = new Document(); document.loadFromFile(wordOldUrl); for (ElectronicImage absolutePathImage : absolutePathImageList) { - //不是骑缝章,就是认定章,获取默认段落信息,进行添加电子印章的信息位置 - Section section = document.getSections().get(DEFAULT_SEAL_INDEX); - Paragraph paragraph = section.getParagraphs().get(DEFAULT_SEAL_INDEX); - //判断是否需要替换书签位置文本内容 - if (StringUtils.isNotEmpty(absolutePathImage.getBookmarkName())) { - replaceBookmarkContent(document, absolutePathImage.getBookmarkName(), absolutePathImage.getNewBookmarkText()); + if (ObjectUtils.isNotEmpty(absolutePathImage.getImageConfig())) { + //列表章处理的方法 + DocPictureProvider.populateMultiImage( absolutePathImage,document); + } else { + //不是骑缝章,就是认定章,获取默认段落信息,进行添加电子印章的信息位置 + Section section = document.getSections().get(DEFAULT_SEAL_INDEX); + Paragraph paragraph = section.getParagraphs().get(DEFAULT_SEAL_INDEX); + //判断是否需要替换书签位置文本内容 + if (StringUtils.isNotEmpty(absolutePathImage.getBookmarkName())) { + replaceBookmarkContent(document, absolutePathImage.getBookmarkName(), absolutePathImage.getNewBookmarkText()); + } + //添加电子印章 + DocPictureProvider.populateDocPicture(paragraph, absolutePathImage); } - //添加电子印章 - DocPictureProvider.populateDocPicture(paragraph, absolutePathImage); } // 保存添加电子章的Word文档 document.saveToFile(wordNewUrl); diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java index 4217cc1..e190f9d 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java @@ -16,6 +16,10 @@ private String electronicSealImageUrl; /** + * 电子签章资源路径(列表扩展) + */ + private String electronicSealImageUrls; + /** * 电子签名标记 */ private Boolean isSealImage= false; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java index d40e85f..7d4b3e8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java @@ -86,7 +86,6 @@ lambdaQueryWrapper.eq(BizQualityInternalPlanUser::getPlanId, exportDTO.getId()); //查询组长名称 UserInfo userInfo = userInfoMapper.selectById(bizQualityInternalAuditPlan.getGroupLeader()); - if (ObjectUtil.isEmpty(userInfo)) { throw new BusinessException(16000, String.format("找不到该组长")); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java index 68c8659..a4a6a80 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.service.Impl.resource; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -22,10 +23,12 @@ import com.casic.missiles.utils.MinioUtil; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -132,7 +135,13 @@ } if (CollectionUtils.isNotEmpty(sealInfoPage.getRecords())) { Map map = new HashMap<>(); - map.put("sealList", sealInfoPage.getRecords()); + sealInfoPage.getRecords().get(0).setMinioFileName(sealInfoPage.getRecords().get(0).getMinioFileName()); + List sealMapList = new ArrayList<>(); + for (BizResourceSealInfo bizResourceSealInfo : sealInfoPage.getRecords()) { + sealMapList.add(BeanUtil.beanToMap(bizResourceSealInfo)); + } + map.put("sealList", sealMapList); + map.put("id", sealInfoPage.getRecords().get(0).getId()); printFileRegister.registerPrintFile(RESOURCE_SEAL_INFO, EXPORT_TEMPLATE, null, map, request.isPdf(), response); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/DocPictureProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/DocPictureProvider.java index 4e837f2..8547eed 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/DocPictureProvider.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/DocPictureProvider.java @@ -1,21 +1,24 @@ package com.casic.missiles.service.listeners.register; import com.aspose.words.SectionCollection; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.casic.missiles.dto.certificate.CropPicture; import com.casic.missiles.dto.certificate.ElectronicImage; +import com.casic.missiles.model.file.ImageConfig; import com.itextpdf.text.BadElementException; import com.itextpdf.text.Image; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfStamper; -import com.spire.doc.Document; -import com.spire.doc.FieldType; -import com.spire.doc.HeaderFooter; +import com.spire.doc.*; +import com.spire.doc.collections.RowCollection; import com.spire.doc.documents.HorizontalAlignment; import com.spire.doc.documents.Paragraph; +import com.spire.doc.documents.TextSelection; import com.spire.doc.documents.TextWrappingStyle; import com.spire.doc.fields.DocPicture; +import liquibase.pro.packaged.D; import lombok.extern.slf4j.Slf4j; import javax.imageio.ImageIO; @@ -24,6 +27,7 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.util.Iterator; import java.util.List; /** @@ -146,5 +150,82 @@ } } + /** + * 暂时只处理多图片的场景 + * + * @param electronicSeal + * @param document + */ + public static void populateMultiImage(ElectronicImage electronicSeal, Document document) { + ImageConfig imageConfig = electronicSeal.getImageConfig(); + Section section = document.getSections().get(0); + Table table = section.getTables().get(imageConfig.getTableIndex()-1); + RowCollection rows = table.getRows(); + if (ObjectUtils.isNotEmpty(imageConfig) && + (ObjectUtils.isNotEmpty(imageConfig.getTableIndex()) && imageConfig.getTableIndex() != -1) && + (ObjectUtils.isNotEmpty(imageConfig.getColIndex()) && imageConfig.getColIndex() != -1)) { + String[] imageUrls = electronicSeal.getElectronicSealImageUrls().split(","); + for (int i = 1; i < rows.getCount(); i++) { + TableCell cell = rows.get(i).getCells().get(imageConfig.getColIndex()-1); + DocPicture docPicture = cell.getFirstParagraph().appendPicture(electronicSeal.getElectronicSealImageUrl() + imageUrls[i-1]); + //水平位置 + docPicture.setHorizontalAlignment(ShapeHorizontalAlignment.Center); + //垂直位置 + docPicture.setVerticalAlignment(ShapeVerticalAlignment.Center); + //设置电子章大小 //宽度可以计算 + docPicture.setWidth(cell.getWidth()*2); + docPicture.setHeight(rows.get(i).getHeight()); + //合并行列是选填,需要进一步判断 + if (ObjectUtils.isNotEmpty(imageConfig.getRowSpan())) { + docPicture.setHeight(docPicture.getHeight() * imageConfig.getRowSpan()); + } + if (ObjectUtils.isNotEmpty(imageConfig.getColSpan())) { + docPicture.setWidth(docPicture.getWidth() * imageConfig.getColSpan()); + } + } + } + } + + + /** + * 图片填充,分为单个图片或者行列的图片 + * 1、单个图片具体表、行、列位置不可为-1 + * + * @param electronicSeal + * @param keyWordIndex + * @param textSelections + * @param docPicture + */ + public static void populateSingleImage(ElectronicImage electronicSeal, + Integer keyWordIndex, TextSelection[] textSelections, DocPicture docPicture) { + ImageConfig imageConfig = electronicSeal.getImageConfig(); + if (ObjectUtils.isNotEmpty(imageConfig) && + (ObjectUtils.isNotEmpty(imageConfig.getTableIndex()) && imageConfig.getTableIndex() != -1) && + (ObjectUtils.isNotEmpty(imageConfig.getRowIndex()) && imageConfig.getRowIndex() != -1) && + (ObjectUtils.isNotEmpty(imageConfig.getColIndex()) && imageConfig.getColIndex() != -1)) { + //指定电子章位置 + Section section = textSelections[keyWordIndex].getAsOneRange().getDocument().getLastSection(); + //水平位置 + docPicture.setHorizontalAlignment(ShapeHorizontalAlignment.Center); + //垂直位置 + docPicture.setVerticalAlignment(ShapeVerticalAlignment.Center); + //设置电子章大小 //宽度可以计算 + docPicture.setWidth(section.getTables().get(imageConfig.getTableIndex()) + .getRows().get(imageConfig.getRowIndex()).getCells().get(imageConfig.getColIndex()).getWidth()); + docPicture.setHeight(section.getTables().get(imageConfig.getTableIndex()) + .getRows().get(imageConfig.getRowIndex()).getHeight()); + //合并行列是选填,需要进一步判断 + if (ObjectUtils.isNotEmpty(imageConfig.getRowSpan())) { + docPicture.setHeight(docPicture.getHeight() * imageConfig.getRowSpan()); + } + if (ObjectUtils.isNotEmpty(imageConfig.getColSpan())) { + docPicture.setWidth(docPicture.getWidth() * imageConfig.getColSpan()); + } + } else { + docPicture.setVerticalPosition(0f); + docPicture.setWidth(electronicSeal.getStampWidth()); + docPicture.setHeight(electronicSeal.getStampHeight()); + } + } } 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 b1cd772..2cf2437 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 @@ -139,39 +139,11 @@ Paragraph paragraph = textSelections[keyWordIndex].getAsOneRange().getOwnerParagraph(); //添加公司印章 DocPicture docPicture = paragraph.appendPicture(electronicSeal.getElectronicSealImageUrl()); - //表、行、列索引是必填的,兼容之前的代码,之前的代码不用配置 - ImageConfig imageConfig = electronicSeal.getImageConfig(); //设置图片位于文字顶层 if (ObjectUtils.isNotEmpty(electronicSeal.getIsSealImage()) && electronicSeal.getIsSealImage()) { docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); } - if (ObjectUtils.isNotEmpty(imageConfig) && - (ObjectUtils.isNotEmpty(imageConfig.getTableIndex()) && imageConfig.getTableIndex() != -1) && - (ObjectUtils.isNotEmpty(imageConfig.getRowIndex()) && imageConfig.getRowIndex() != -1) && - (ObjectUtils.isNotEmpty(imageConfig.getColIndex()) && imageConfig.getColIndex() != -1)) { - //指定电子章位置 - Section section = textSelections[keyWordIndex].getAsOneRange().getDocument().getLastSection(); - //水平位置 - docPicture.setHorizontalAlignment(ShapeHorizontalAlignment.Center); - //垂直位置 - docPicture.setVerticalAlignment(ShapeVerticalAlignment.Center); - //设置电子章大小 //宽度可以计算 - docPicture.setWidth(section.getTables().get(imageConfig.getTableIndex()) - .getRows().get(imageConfig.getRowIndex()).getCells().get(imageConfig.getColIndex()).getWidth()); - docPicture.setHeight(section.getTables().get(imageConfig.getTableIndex()) - .getRows().get(imageConfig.getRowIndex()).getHeight()); - //合并行列是选填,需要进一步判断 - if (ObjectUtils.isNotEmpty(imageConfig.getRowSpan())) { - docPicture.setHeight(docPicture.getHeight() * imageConfig.getRowSpan()); - } - if (ObjectUtils.isNotEmpty(imageConfig.getColSpan())) { - docPicture.setWidth(docPicture.getWidth() * imageConfig.getColSpan()); - } - } else { - docPicture.setVerticalPosition(0f); - docPicture.setWidth(electronicSeal.getStampWidth()); - docPicture.setHeight(electronicSeal.getStampHeight()); - } + DocPictureProvider.populateSingleImage(electronicSeal, keyWordIndex, textSelections, docPicture); //带有公章的关键字且页数大于2,需要设置骑缝章 if (INSIGNIA_KEYWORD.equals(electronicSeal.getKeyWord()) && document.getPageCount() >= 2) { selectSeal = electronicSeal; @@ -247,6 +219,7 @@ /** * 1、自定义位置添加电子印章 * 2、替换书签名位置文本内容 bookmarkName传参为null,则不进行书签替换操作 + * 3、 * * @param wordOldUrl word文件路径 * @param wordNewUrl 新word文件路径 @@ -256,15 +229,20 @@ Document document = new Document(); document.loadFromFile(wordOldUrl); for (ElectronicImage absolutePathImage : absolutePathImageList) { - //不是骑缝章,就是认定章,获取默认段落信息,进行添加电子印章的信息位置 - Section section = document.getSections().get(DEFAULT_SEAL_INDEX); - Paragraph paragraph = section.getParagraphs().get(DEFAULT_SEAL_INDEX); - //判断是否需要替换书签位置文本内容 - if (StringUtils.isNotEmpty(absolutePathImage.getBookmarkName())) { - replaceBookmarkContent(document, absolutePathImage.getBookmarkName(), absolutePathImage.getNewBookmarkText()); + if (ObjectUtils.isNotEmpty(absolutePathImage.getImageConfig())) { + //列表章处理的方法 + DocPictureProvider.populateMultiImage( absolutePathImage,document); + } else { + //不是骑缝章,就是认定章,获取默认段落信息,进行添加电子印章的信息位置 + Section section = document.getSections().get(DEFAULT_SEAL_INDEX); + Paragraph paragraph = section.getParagraphs().get(DEFAULT_SEAL_INDEX); + //判断是否需要替换书签位置文本内容 + if (StringUtils.isNotEmpty(absolutePathImage.getBookmarkName())) { + replaceBookmarkContent(document, absolutePathImage.getBookmarkName(), absolutePathImage.getNewBookmarkText()); + } + //添加电子印章 + DocPictureProvider.populateDocPicture(paragraph, absolutePathImage); } - //添加电子印章 - DocPictureProvider.populateDocPicture(paragraph, absolutePathImage); } // 保存添加电子章的Word文档 document.saveToFile(wordNewUrl); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java index 2a26d80..a95e8f4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java @@ -90,19 +90,23 @@ /** * 从mini文件服务器下载文件,获取文件的读写权限,用户证书报告的生成 */ - protected void downTemplateFile(String fileName, String tempLocalFileDir) { - if (StringUtils.isEmpty(fileName)) { + protected void downTemplateFile(String fileNames, String tempLocalFileDir) { + if (StringUtils.isEmpty(fileNames)) { return; } + InputStream in = null; ByteArrayOutputStream out = null; try { - in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build()); - out = new ByteArrayOutputStream(); - IOUtils.copy(in, out); - //封装返回值 - byte[] bytes = out.toByteArray(); - FilePrintRegisterUtils.byteToFile(bytes, tempLocalFileDir, fileName); + String[] fileNameList = fileNames.split(","); + for (String fileName : fileNameList) { + in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build()); + out = new ByteArrayOutputStream(); + IOUtils.copy(in, out); + //封装返回值 + byte[] bytes = out.toByteArray(); + FilePrintRegisterUtils.byteToFile(bytes, tempLocalFileDir, fileName); + } } catch (Exception e) { e.printStackTrace(); } finally { diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java index 4217cc1..e190f9d 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ElectronicImage.java @@ -16,6 +16,10 @@ private String electronicSealImageUrl; /** + * 电子签章资源路径(列表扩展) + */ + private String electronicSealImageUrls; + /** * 电子签名标记 */ private Boolean isSealImage= false; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java index d40e85f..7d4b3e8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityInternalAuditPlanServiceImpl.java @@ -86,7 +86,6 @@ lambdaQueryWrapper.eq(BizQualityInternalPlanUser::getPlanId, exportDTO.getId()); //查询组长名称 UserInfo userInfo = userInfoMapper.selectById(bizQualityInternalAuditPlan.getGroupLeader()); - if (ObjectUtil.isEmpty(userInfo)) { throw new BusinessException(16000, String.format("找不到该组长")); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java index 68c8659..a4a6a80 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/resource/BizResourceSealInfoServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.service.Impl.resource; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -22,10 +23,12 @@ import com.casic.missiles.utils.MinioUtil; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -132,7 +135,13 @@ } if (CollectionUtils.isNotEmpty(sealInfoPage.getRecords())) { Map map = new HashMap<>(); - map.put("sealList", sealInfoPage.getRecords()); + sealInfoPage.getRecords().get(0).setMinioFileName(sealInfoPage.getRecords().get(0).getMinioFileName()); + List sealMapList = new ArrayList<>(); + for (BizResourceSealInfo bizResourceSealInfo : sealInfoPage.getRecords()) { + sealMapList.add(BeanUtil.beanToMap(bizResourceSealInfo)); + } + map.put("sealList", sealMapList); + map.put("id", sealInfoPage.getRecords().get(0).getId()); printFileRegister.registerPrintFile(RESOURCE_SEAL_INFO, EXPORT_TEMPLATE, null, map, request.isPdf(), response); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/DocPictureProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/DocPictureProvider.java index 4e837f2..8547eed 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/DocPictureProvider.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/DocPictureProvider.java @@ -1,21 +1,24 @@ package com.casic.missiles.service.listeners.register; import com.aspose.words.SectionCollection; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.casic.missiles.dto.certificate.CropPicture; import com.casic.missiles.dto.certificate.ElectronicImage; +import com.casic.missiles.model.file.ImageConfig; import com.itextpdf.text.BadElementException; import com.itextpdf.text.Image; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfStamper; -import com.spire.doc.Document; -import com.spire.doc.FieldType; -import com.spire.doc.HeaderFooter; +import com.spire.doc.*; +import com.spire.doc.collections.RowCollection; import com.spire.doc.documents.HorizontalAlignment; import com.spire.doc.documents.Paragraph; +import com.spire.doc.documents.TextSelection; import com.spire.doc.documents.TextWrappingStyle; import com.spire.doc.fields.DocPicture; +import liquibase.pro.packaged.D; import lombok.extern.slf4j.Slf4j; import javax.imageio.ImageIO; @@ -24,6 +27,7 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.util.Iterator; import java.util.List; /** @@ -146,5 +150,82 @@ } } + /** + * 暂时只处理多图片的场景 + * + * @param electronicSeal + * @param document + */ + public static void populateMultiImage(ElectronicImage electronicSeal, Document document) { + ImageConfig imageConfig = electronicSeal.getImageConfig(); + Section section = document.getSections().get(0); + Table table = section.getTables().get(imageConfig.getTableIndex()-1); + RowCollection rows = table.getRows(); + if (ObjectUtils.isNotEmpty(imageConfig) && + (ObjectUtils.isNotEmpty(imageConfig.getTableIndex()) && imageConfig.getTableIndex() != -1) && + (ObjectUtils.isNotEmpty(imageConfig.getColIndex()) && imageConfig.getColIndex() != -1)) { + String[] imageUrls = electronicSeal.getElectronicSealImageUrls().split(","); + for (int i = 1; i < rows.getCount(); i++) { + TableCell cell = rows.get(i).getCells().get(imageConfig.getColIndex()-1); + DocPicture docPicture = cell.getFirstParagraph().appendPicture(electronicSeal.getElectronicSealImageUrl() + imageUrls[i-1]); + //水平位置 + docPicture.setHorizontalAlignment(ShapeHorizontalAlignment.Center); + //垂直位置 + docPicture.setVerticalAlignment(ShapeVerticalAlignment.Center); + //设置电子章大小 //宽度可以计算 + docPicture.setWidth(cell.getWidth()*2); + docPicture.setHeight(rows.get(i).getHeight()); + //合并行列是选填,需要进一步判断 + if (ObjectUtils.isNotEmpty(imageConfig.getRowSpan())) { + docPicture.setHeight(docPicture.getHeight() * imageConfig.getRowSpan()); + } + if (ObjectUtils.isNotEmpty(imageConfig.getColSpan())) { + docPicture.setWidth(docPicture.getWidth() * imageConfig.getColSpan()); + } + } + } + } + + + /** + * 图片填充,分为单个图片或者行列的图片 + * 1、单个图片具体表、行、列位置不可为-1 + * + * @param electronicSeal + * @param keyWordIndex + * @param textSelections + * @param docPicture + */ + public static void populateSingleImage(ElectronicImage electronicSeal, + Integer keyWordIndex, TextSelection[] textSelections, DocPicture docPicture) { + ImageConfig imageConfig = electronicSeal.getImageConfig(); + if (ObjectUtils.isNotEmpty(imageConfig) && + (ObjectUtils.isNotEmpty(imageConfig.getTableIndex()) && imageConfig.getTableIndex() != -1) && + (ObjectUtils.isNotEmpty(imageConfig.getRowIndex()) && imageConfig.getRowIndex() != -1) && + (ObjectUtils.isNotEmpty(imageConfig.getColIndex()) && imageConfig.getColIndex() != -1)) { + //指定电子章位置 + Section section = textSelections[keyWordIndex].getAsOneRange().getDocument().getLastSection(); + //水平位置 + docPicture.setHorizontalAlignment(ShapeHorizontalAlignment.Center); + //垂直位置 + docPicture.setVerticalAlignment(ShapeVerticalAlignment.Center); + //设置电子章大小 //宽度可以计算 + docPicture.setWidth(section.getTables().get(imageConfig.getTableIndex()) + .getRows().get(imageConfig.getRowIndex()).getCells().get(imageConfig.getColIndex()).getWidth()); + docPicture.setHeight(section.getTables().get(imageConfig.getTableIndex()) + .getRows().get(imageConfig.getRowIndex()).getHeight()); + //合并行列是选填,需要进一步判断 + if (ObjectUtils.isNotEmpty(imageConfig.getRowSpan())) { + docPicture.setHeight(docPicture.getHeight() * imageConfig.getRowSpan()); + } + if (ObjectUtils.isNotEmpty(imageConfig.getColSpan())) { + docPicture.setWidth(docPicture.getWidth() * imageConfig.getColSpan()); + } + } else { + docPicture.setVerticalPosition(0f); + docPicture.setWidth(electronicSeal.getStampWidth()); + docPicture.setHeight(electronicSeal.getStampHeight()); + } + } } 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 b1cd772..2cf2437 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 @@ -139,39 +139,11 @@ Paragraph paragraph = textSelections[keyWordIndex].getAsOneRange().getOwnerParagraph(); //添加公司印章 DocPicture docPicture = paragraph.appendPicture(electronicSeal.getElectronicSealImageUrl()); - //表、行、列索引是必填的,兼容之前的代码,之前的代码不用配置 - ImageConfig imageConfig = electronicSeal.getImageConfig(); //设置图片位于文字顶层 if (ObjectUtils.isNotEmpty(electronicSeal.getIsSealImage()) && electronicSeal.getIsSealImage()) { docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); } - if (ObjectUtils.isNotEmpty(imageConfig) && - (ObjectUtils.isNotEmpty(imageConfig.getTableIndex()) && imageConfig.getTableIndex() != -1) && - (ObjectUtils.isNotEmpty(imageConfig.getRowIndex()) && imageConfig.getRowIndex() != -1) && - (ObjectUtils.isNotEmpty(imageConfig.getColIndex()) && imageConfig.getColIndex() != -1)) { - //指定电子章位置 - Section section = textSelections[keyWordIndex].getAsOneRange().getDocument().getLastSection(); - //水平位置 - docPicture.setHorizontalAlignment(ShapeHorizontalAlignment.Center); - //垂直位置 - docPicture.setVerticalAlignment(ShapeVerticalAlignment.Center); - //设置电子章大小 //宽度可以计算 - docPicture.setWidth(section.getTables().get(imageConfig.getTableIndex()) - .getRows().get(imageConfig.getRowIndex()).getCells().get(imageConfig.getColIndex()).getWidth()); - docPicture.setHeight(section.getTables().get(imageConfig.getTableIndex()) - .getRows().get(imageConfig.getRowIndex()).getHeight()); - //合并行列是选填,需要进一步判断 - if (ObjectUtils.isNotEmpty(imageConfig.getRowSpan())) { - docPicture.setHeight(docPicture.getHeight() * imageConfig.getRowSpan()); - } - if (ObjectUtils.isNotEmpty(imageConfig.getColSpan())) { - docPicture.setWidth(docPicture.getWidth() * imageConfig.getColSpan()); - } - } else { - docPicture.setVerticalPosition(0f); - docPicture.setWidth(electronicSeal.getStampWidth()); - docPicture.setHeight(electronicSeal.getStampHeight()); - } + DocPictureProvider.populateSingleImage(electronicSeal, keyWordIndex, textSelections, docPicture); //带有公章的关键字且页数大于2,需要设置骑缝章 if (INSIGNIA_KEYWORD.equals(electronicSeal.getKeyWord()) && document.getPageCount() >= 2) { selectSeal = electronicSeal; @@ -247,6 +219,7 @@ /** * 1、自定义位置添加电子印章 * 2、替换书签名位置文本内容 bookmarkName传参为null,则不进行书签替换操作 + * 3、 * * @param wordOldUrl word文件路径 * @param wordNewUrl 新word文件路径 @@ -256,15 +229,20 @@ Document document = new Document(); document.loadFromFile(wordOldUrl); for (ElectronicImage absolutePathImage : absolutePathImageList) { - //不是骑缝章,就是认定章,获取默认段落信息,进行添加电子印章的信息位置 - Section section = document.getSections().get(DEFAULT_SEAL_INDEX); - Paragraph paragraph = section.getParagraphs().get(DEFAULT_SEAL_INDEX); - //判断是否需要替换书签位置文本内容 - if (StringUtils.isNotEmpty(absolutePathImage.getBookmarkName())) { - replaceBookmarkContent(document, absolutePathImage.getBookmarkName(), absolutePathImage.getNewBookmarkText()); + if (ObjectUtils.isNotEmpty(absolutePathImage.getImageConfig())) { + //列表章处理的方法 + DocPictureProvider.populateMultiImage( absolutePathImage,document); + } else { + //不是骑缝章,就是认定章,获取默认段落信息,进行添加电子印章的信息位置 + Section section = document.getSections().get(DEFAULT_SEAL_INDEX); + Paragraph paragraph = section.getParagraphs().get(DEFAULT_SEAL_INDEX); + //判断是否需要替换书签位置文本内容 + if (StringUtils.isNotEmpty(absolutePathImage.getBookmarkName())) { + replaceBookmarkContent(document, absolutePathImage.getBookmarkName(), absolutePathImage.getNewBookmarkText()); + } + //添加电子印章 + DocPictureProvider.populateDocPicture(paragraph, absolutePathImage); } - //添加电子印章 - DocPictureProvider.populateDocPicture(paragraph, absolutePathImage); } // 保存添加电子章的Word文档 document.saveToFile(wordNewUrl); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java index 2a26d80..a95e8f4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java @@ -90,19 +90,23 @@ /** * 从mini文件服务器下载文件,获取文件的读写权限,用户证书报告的生成 */ - protected void downTemplateFile(String fileName, String tempLocalFileDir) { - if (StringUtils.isEmpty(fileName)) { + protected void downTemplateFile(String fileNames, String tempLocalFileDir) { + if (StringUtils.isEmpty(fileNames)) { return; } + InputStream in = null; ByteArrayOutputStream out = null; try { - in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build()); - out = new ByteArrayOutputStream(); - IOUtils.copy(in, out); - //封装返回值 - byte[] bytes = out.toByteArray(); - FilePrintRegisterUtils.byteToFile(bytes, tempLocalFileDir, fileName); + String[] fileNameList = fileNames.split(","); + for (String fileName : fileNameList) { + in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build()); + out = new ByteArrayOutputStream(); + IOUtils.copy(in, out); + //封装返回值 + byte[] bytes = out.toByteArray(); + FilePrintRegisterUtils.byteToFile(bytes, tempLocalFileDir, fileName); + } } catch (Exception e) { e.printStackTrace(); } finally { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/image/ElectronicSignSeal.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/image/ElectronicSignSeal.java index de5d3f3..80eae41 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/image/ElectronicSignSeal.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/image/ElectronicSignSeal.java @@ -1,7 +1,9 @@ package com.casic.missiles.service.listeners.register.image; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.stream.CollectorUtil; import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.casic.missiles.dto.certificate.ElectronicImage; import com.casic.missiles.dto.certificate.FilePrintRegister; @@ -77,12 +79,10 @@ List electronicImageSeals = new ArrayList<>(); for (ImageConfig extendImageConfig : extendImageList) { ElectronicImage electronicImage = defaultElectronicImage(extendImageConfig.getDocName()); - if (metaDataMap.containsKey(extendImageConfig.getFiledName()) && ObjectUtils.isNotEmpty(metaDataMap.get(extendImageConfig.getFiledName()))) { + electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir()); + if (getKeyDataByMetaData(metaDataMap, extendImageConfig.getFiledName(), electronicImage, filePrintRegister)) { electronicImage.setImageConfig(extendImageConfig); electronicImage.setIsSealImage(true); - electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + (String) metaDataMap.get(extendImageConfig.getFiledName())); - //放入待下载的文件集合 - filePrintRegister.getBeDownloadedFileNames().add((String) metaDataMap.get(extendImageConfig.getFiledName())); electronicImageSeals.add(electronicImage); } } @@ -90,6 +90,39 @@ } /** + * 获取、下载、拼装 + */ + private static Boolean getKeyDataByMetaData(Map metaDataMap, String fileName, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { + String keyData = ""; + if (fileName.contains(".")) { + String[] layerKeys = fileName.split("\\."); + if (layerKeys.length == 2) { + //这里放入待下载的数据包及数据列表 + if (metaDataMap.containsKey(layerKeys[0]) && ObjectUtils.isNotEmpty(metaDataMap.get(layerKeys[0]))) { + List metaDataList = (List) metaDataMap.get(layerKeys[0]); + if (CollectionUtils.isNotEmpty(metaDataList) && ObjectUtils.isNotEmpty(metaDataList.get(0).get(layerKeys[1]))) { + for (Map metaData : metaDataList) { + keyData = (String) metaData.get(layerKeys[1]) + ","; + } + } + keyData = keyData.substring(0, keyData.length() - 1); + electronicImage.setElectronicSealImageUrls(keyData); + //放入待下载的文件集合 + filePrintRegister.getBeDownloadedFileNames().add(keyData); + return true; + } + } + } else { + if (metaDataMap.containsKey(fileName) && ObjectUtils.isNotEmpty(metaDataMap.get(fileName))) { + electronicImage.setElectronicSealImageUrl(electronicImage.getElectronicSealImageUrl() + (String) metaDataMap.get(fileName)); + filePrintRegister.getBeDownloadedFileNames().add((String) metaDataMap.get(fileName)); + return true; + } + } + return false; + } + + /** * 处理相对位置的印章 * * @param signJsonList