diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index 98ee689..7e30c2e 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -86,6 +86,12 @@ itextpdf 5.5.6 + + + org.apache.pdfbox + pdfbox + 2.0.24 + diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index 98ee689..7e30c2e 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -86,6 +86,12 @@ itextpdf 5.5.6 + + + org.apache.pdfbox + pdfbox + 2.0.24 + diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 8d9ad5f..5524e46 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -384,27 +384,26 @@ } if (ApprovalStatusEnum.PASSED.equals(certificateReport.getApprovalStatus())) { try { - //生成证书报告的,需要改变为动态选择性 - CompletableFuture certificateFutureTask = CompletableFuture.supplyAsync( - () -> printFileRegister.registerPrintFile( + threadPool.submit(new Runnable() { + @Override + public void run() { + String printFileName = printFileRegister.registerPrintFile( RegisterCustomParameters.builder() .customFileName(certificateReport.getCertificateReportName() + certificateReport.getCertificateReportCode()) .customObject(certificateReport) .prefixType(FilePrintTypeEnum.CALIBRATION_APPROVAL) .pdf(true) - .build()), threadPool); - certificateFutureTask.thenRun( - () -> { - String printFileName = certificateFutureTask.join(); - certificateReport.setCertificateReportFile(printFileName); - this.baseMapper.updateById(certificateReport); - log.debug("----" + printFileName); - //生成证书打印信息 - CertificatePrintBuilder(certificateReport, printFileName); - log.debug("----success"); - } - ); - }catch (Exception ex){ + .build()); + certificateReport.setCertificateReportFile(printFileName); + BusinessCertificateReportMapper reportMapper = SpringContextUtil.getBean(BusinessCertificateReportMapper.class); + reportMapper.updateById(certificateReport); + log.debug("----" + printFileName); + //生成证书打印信息 + CertificatePrintBuilder(certificateReport, printFileName); + log.debug("----success"); + } + }); + } catch (Exception ex) { log.error(""); } } diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index 98ee689..7e30c2e 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -86,6 +86,12 @@ itextpdf 5.5.6 + + + org.apache.pdfbox + pdfbox + 2.0.24 + diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 8d9ad5f..5524e46 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -384,27 +384,26 @@ } if (ApprovalStatusEnum.PASSED.equals(certificateReport.getApprovalStatus())) { try { - //生成证书报告的,需要改变为动态选择性 - CompletableFuture certificateFutureTask = CompletableFuture.supplyAsync( - () -> printFileRegister.registerPrintFile( + threadPool.submit(new Runnable() { + @Override + public void run() { + String printFileName = printFileRegister.registerPrintFile( RegisterCustomParameters.builder() .customFileName(certificateReport.getCertificateReportName() + certificateReport.getCertificateReportCode()) .customObject(certificateReport) .prefixType(FilePrintTypeEnum.CALIBRATION_APPROVAL) .pdf(true) - .build()), threadPool); - certificateFutureTask.thenRun( - () -> { - String printFileName = certificateFutureTask.join(); - certificateReport.setCertificateReportFile(printFileName); - this.baseMapper.updateById(certificateReport); - log.debug("----" + printFileName); - //生成证书打印信息 - CertificatePrintBuilder(certificateReport, printFileName); - log.debug("----success"); - } - ); - }catch (Exception ex){ + .build()); + certificateReport.setCertificateReportFile(printFileName); + BusinessCertificateReportMapper reportMapper = SpringContextUtil.getBean(BusinessCertificateReportMapper.class); + reportMapper.updateById(certificateReport); + log.debug("----" + printFileName); + //生成证书打印信息 + CertificatePrintBuilder(certificateReport, printFileName); + log.debug("----success"); + } + }); + } catch (Exception ex) { log.error(""); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java index 970dfc7..48f2598 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -35,6 +35,10 @@ import com.spire.xls.*; import io.swagger.models.auth.In; import org.apache.commons.lang3.StringUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.apache.poi.util.IOUtils; import javax.imageio.ImageIO; @@ -157,7 +161,7 @@ // } } - public static void main(String[] args) throws Exception { + public static void mainsss(String[] args) throws Exception { String path = "D:\\casic\\cut\\"; String imagePath = path + "朱俊霖.jpg"; String filePath = path + "1.xlsx"; @@ -184,6 +188,30 @@ // pdfReader.close(); } + public static void main(String[] args) throws IOException { + String path = "D:\\casic\\cut\\"; + String imagePath = path + "检测专用章新.png"; + String filePath = path + "3.pdf"; + File file = new File(filePath); + // 创建一个PDF文档 + PDDocument document = PDDocument.load(file); + PDPage page=document.getPage(0); + // 加载图片 + PDImageXObject pdImage = PDImageXObject.createFromFile(imagePath, document); + // 开启一个内容流,以便在页面上绘制 + PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true); + // 定义图片的位置和大小 + float x = 320; // 距离页面左边界的距离 + float y = 280; // 距离页面底部的距离。注意:PDF中的y坐标从下往上计算 + // 将图片添加到内容流中 + contentStream.drawImage(pdImage, x, y, 100, 100); + // 关闭内容流 + contentStream.close(); + // 保存文档 + document.save(path+"output.pdf"); + document.close(); + } + // 指定关键字 public static String KEY_WORD = "j检定专业"; diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index 98ee689..7e30c2e 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -86,6 +86,12 @@ itextpdf 5.5.6 + + + org.apache.pdfbox + pdfbox + 2.0.24 + diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 8d9ad5f..5524e46 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -384,27 +384,26 @@ } if (ApprovalStatusEnum.PASSED.equals(certificateReport.getApprovalStatus())) { try { - //生成证书报告的,需要改变为动态选择性 - CompletableFuture certificateFutureTask = CompletableFuture.supplyAsync( - () -> printFileRegister.registerPrintFile( + threadPool.submit(new Runnable() { + @Override + public void run() { + String printFileName = printFileRegister.registerPrintFile( RegisterCustomParameters.builder() .customFileName(certificateReport.getCertificateReportName() + certificateReport.getCertificateReportCode()) .customObject(certificateReport) .prefixType(FilePrintTypeEnum.CALIBRATION_APPROVAL) .pdf(true) - .build()), threadPool); - certificateFutureTask.thenRun( - () -> { - String printFileName = certificateFutureTask.join(); - certificateReport.setCertificateReportFile(printFileName); - this.baseMapper.updateById(certificateReport); - log.debug("----" + printFileName); - //生成证书打印信息 - CertificatePrintBuilder(certificateReport, printFileName); - log.debug("----success"); - } - ); - }catch (Exception ex){ + .build()); + certificateReport.setCertificateReportFile(printFileName); + BusinessCertificateReportMapper reportMapper = SpringContextUtil.getBean(BusinessCertificateReportMapper.class); + reportMapper.updateById(certificateReport); + log.debug("----" + printFileName); + //生成证书打印信息 + CertificatePrintBuilder(certificateReport, printFileName); + log.debug("----success"); + } + }); + } catch (Exception ex) { log.error(""); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java index 970dfc7..48f2598 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -35,6 +35,10 @@ import com.spire.xls.*; import io.swagger.models.auth.In; import org.apache.commons.lang3.StringUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.apache.poi.util.IOUtils; import javax.imageio.ImageIO; @@ -157,7 +161,7 @@ // } } - public static void main(String[] args) throws Exception { + public static void mainsss(String[] args) throws Exception { String path = "D:\\casic\\cut\\"; String imagePath = path + "朱俊霖.jpg"; String filePath = path + "1.xlsx"; @@ -184,6 +188,30 @@ // pdfReader.close(); } + public static void main(String[] args) throws IOException { + String path = "D:\\casic\\cut\\"; + String imagePath = path + "检测专用章新.png"; + String filePath = path + "3.pdf"; + File file = new File(filePath); + // 创建一个PDF文档 + PDDocument document = PDDocument.load(file); + PDPage page=document.getPage(0); + // 加载图片 + PDImageXObject pdImage = PDImageXObject.createFromFile(imagePath, document); + // 开启一个内容流,以便在页面上绘制 + PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true); + // 定义图片的位置和大小 + float x = 320; // 距离页面左边界的距离 + float y = 280; // 距离页面底部的距离。注意:PDF中的y坐标从下往上计算 + // 将图片添加到内容流中 + contentStream.drawImage(pdImage, x, y, 100, 100); + // 关闭内容流 + contentStream.close(); + // 保存文档 + document.save(path+"output.pdf"); + document.close(); + } + // 指定关键字 public static String KEY_WORD = "j检定专业"; 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 5e171a7..c2cc5bb 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 @@ -21,6 +21,10 @@ import com.spire.doc.fields.TextRange; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.docx4j.wml.R; @@ -64,12 +68,13 @@ String wordOldUrl = exportWord(filePrintRegister.getTemDir(), filePrintRegister.getFileName(), filePrintRegister.getParams(), null, filePrintRegister.getCustomFileName()); //预先生成二维码图片 - getQrCode(filePrintRegister.getTemDir(), filePrintRegister.getCustomFileName(), filePrintRegister.getTemDir() + wordOldUrl, filePrintRegister); + getQrCode(filePrintRegister.getTemDir(), filePrintRegister.getCustomFileName(), wordOldUrl, filePrintRegister); log.debug("执行完填充参数操作......"); + Map> sameKeyWordSealMaps = null; if (CollectionUtils.isNotEmpty(filePrintRegister.getElectronicImageList())) { try { //按关键字进行分组 - Map> sameKeyWordSealMaps = filePrintRegister.getElectronicImageList().stream() + sameKeyWordSealMaps = filePrintRegister.getElectronicImageList().stream() .filter(electronicImage -> StringUtils.isNotEmpty(electronicImage.getKeyWord())) .collect( Collectors.groupingBy(ElectronicImage::getKeyWord) @@ -93,7 +98,7 @@ } log.debug("执行完路径设置操作"); //如果有骑缝章新增骑缝章 - return checkExtendSeal(filePrintRegister.getTemDir() + wordOldUrl, selectSeal, filePrintRegister); + return checkExtendSeal(filePrintRegister.getTemDir() + wordOldUrl, selectSeal, filePrintRegister, sameKeyWordSealMaps); } private static void getQrCode(String tempDir, String customFileName, String wordOldUrl, FilePrintRegister filePrintRegister) throws IOException { @@ -120,7 +125,7 @@ * * @return */ - private static String checkExtendSeal(String wordOldUrl, ElectronicImage selectSeal, FilePrintRegister filePrintRegister) { + private static String checkExtendSeal(String wordOldUrl, ElectronicImage selectSeal, FilePrintRegister filePrintRegister, Map> sameKeyWordSealMaps) { if (ObjectUtils.isNotEmpty(selectSeal)) { //默认转为docx,只需要进行docx的替换即可 String pdfNewUrl = ""; @@ -133,11 +138,53 @@ String tempPdfUrl = filePrintRegister.getTemDir() + "XH" + pdfNewUrl; FilePrintRegisterUtils.wordToPdf(wordOldUrl, tempPdfUrl); DocPictureProvider.wordFullSeam(tempPdfUrl, selectSeal.getElectronicSealImageUrl(), filePrintRegister.getTemDir() + pdfNewUrl); + if (sameKeyWordSealMaps != null && sameKeyWordSealMaps.containsKey(INSIGNIA_KEYWORD)) { + PdfImage(sameKeyWordSealMaps.get(INSIGNIA_KEYWORD), filePrintRegister.getTemDir() + pdfNewUrl); + } + return filePrintRegister.getTemDir() + pdfNewUrl; } return wordOldUrl; } + private static void PdfImage(List electronicImageList, String pdfUrl) { + if (CollectionUtils.isEmpty(electronicImageList)) { + return; + } + ElectronicImage electronicImage = electronicImageList.get(0); + File file = new File(pdfUrl); + // 创建一个PDF文档 + PDDocument document = null; + try { + document = PDDocument.load(file); + PDPage page = document.getPage(0); + // 加载图片 + PDImageXObject pdImage = PDImageXObject.createFromFile(electronicImage.getElectronicSealImageUrl(), document); + // 开启一个内容流,以便在页面上绘制 + PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true); + // 定义图片的位置和大小 + float x = 320; // 距离页面左边界的距离 + float y = 280; // 距离页面底部的距离。注意:PDF中的y坐标从下往上计算 + // 将图片添加到内容流中 + contentStream.drawImage(pdImage, x, y, 100, 100); + // 关闭内容流 + contentStream.close(); + // 保存文档 + document.save(pdfUrl); + } catch (IOException iox) { + log.error("异常信息,{}", iox); + } finally { + if (document != null) { + try { + document.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + } + /** * 将相同关键字的印章添加到同一个位置进行打印 * 1、根据关键词位置添加电子印章 @@ -171,11 +218,13 @@ if ("二维码".equals(electronicSeal.getKeyWord())) { paragraph.setText(""); } + //带有公章的关键字且页数大于2,需要设置骑缝章 + if (INSIGNIA_KEYWORD.equals(electronicSeal.getKeyWord()) && document.getPageCount() >= 2) { + selectSeal = electronicSeal; + continue; + } //添加公司印章 DocPicture docPicture = paragraph.appendPicture(electronicSeal.getElectronicSealImageUrl()); - if (INSIGNIA_KEYWORD.equals(electronicSeal.getKeyWord())) { - docPicture.setTextWrappingStyle(TextWrappingStyle.Behind); - } //设置图片位于文字顶层 DocPictureProvider.populateSingleImage(electronicSeal, keyWordIndex, textSelections, docPicture); } diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index 98ee689..7e30c2e 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -86,6 +86,12 @@ itextpdf 5.5.6 + + + org.apache.pdfbox + pdfbox + 2.0.24 + diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 8d9ad5f..5524e46 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -384,27 +384,26 @@ } if (ApprovalStatusEnum.PASSED.equals(certificateReport.getApprovalStatus())) { try { - //生成证书报告的,需要改变为动态选择性 - CompletableFuture certificateFutureTask = CompletableFuture.supplyAsync( - () -> printFileRegister.registerPrintFile( + threadPool.submit(new Runnable() { + @Override + public void run() { + String printFileName = printFileRegister.registerPrintFile( RegisterCustomParameters.builder() .customFileName(certificateReport.getCertificateReportName() + certificateReport.getCertificateReportCode()) .customObject(certificateReport) .prefixType(FilePrintTypeEnum.CALIBRATION_APPROVAL) .pdf(true) - .build()), threadPool); - certificateFutureTask.thenRun( - () -> { - String printFileName = certificateFutureTask.join(); - certificateReport.setCertificateReportFile(printFileName); - this.baseMapper.updateById(certificateReport); - log.debug("----" + printFileName); - //生成证书打印信息 - CertificatePrintBuilder(certificateReport, printFileName); - log.debug("----success"); - } - ); - }catch (Exception ex){ + .build()); + certificateReport.setCertificateReportFile(printFileName); + BusinessCertificateReportMapper reportMapper = SpringContextUtil.getBean(BusinessCertificateReportMapper.class); + reportMapper.updateById(certificateReport); + log.debug("----" + printFileName); + //生成证书打印信息 + CertificatePrintBuilder(certificateReport, printFileName); + log.debug("----success"); + } + }); + } catch (Exception ex) { log.error(""); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java index 970dfc7..48f2598 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -35,6 +35,10 @@ import com.spire.xls.*; import io.swagger.models.auth.In; import org.apache.commons.lang3.StringUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.apache.poi.util.IOUtils; import javax.imageio.ImageIO; @@ -157,7 +161,7 @@ // } } - public static void main(String[] args) throws Exception { + public static void mainsss(String[] args) throws Exception { String path = "D:\\casic\\cut\\"; String imagePath = path + "朱俊霖.jpg"; String filePath = path + "1.xlsx"; @@ -184,6 +188,30 @@ // pdfReader.close(); } + public static void main(String[] args) throws IOException { + String path = "D:\\casic\\cut\\"; + String imagePath = path + "检测专用章新.png"; + String filePath = path + "3.pdf"; + File file = new File(filePath); + // 创建一个PDF文档 + PDDocument document = PDDocument.load(file); + PDPage page=document.getPage(0); + // 加载图片 + PDImageXObject pdImage = PDImageXObject.createFromFile(imagePath, document); + // 开启一个内容流,以便在页面上绘制 + PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true); + // 定义图片的位置和大小 + float x = 320; // 距离页面左边界的距离 + float y = 280; // 距离页面底部的距离。注意:PDF中的y坐标从下往上计算 + // 将图片添加到内容流中 + contentStream.drawImage(pdImage, x, y, 100, 100); + // 关闭内容流 + contentStream.close(); + // 保存文档 + document.save(path+"output.pdf"); + document.close(); + } + // 指定关键字 public static String KEY_WORD = "j检定专业"; 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 5e171a7..c2cc5bb 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 @@ -21,6 +21,10 @@ import com.spire.doc.fields.TextRange; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.docx4j.wml.R; @@ -64,12 +68,13 @@ String wordOldUrl = exportWord(filePrintRegister.getTemDir(), filePrintRegister.getFileName(), filePrintRegister.getParams(), null, filePrintRegister.getCustomFileName()); //预先生成二维码图片 - getQrCode(filePrintRegister.getTemDir(), filePrintRegister.getCustomFileName(), filePrintRegister.getTemDir() + wordOldUrl, filePrintRegister); + getQrCode(filePrintRegister.getTemDir(), filePrintRegister.getCustomFileName(), wordOldUrl, filePrintRegister); log.debug("执行完填充参数操作......"); + Map> sameKeyWordSealMaps = null; if (CollectionUtils.isNotEmpty(filePrintRegister.getElectronicImageList())) { try { //按关键字进行分组 - Map> sameKeyWordSealMaps = filePrintRegister.getElectronicImageList().stream() + sameKeyWordSealMaps = filePrintRegister.getElectronicImageList().stream() .filter(electronicImage -> StringUtils.isNotEmpty(electronicImage.getKeyWord())) .collect( Collectors.groupingBy(ElectronicImage::getKeyWord) @@ -93,7 +98,7 @@ } log.debug("执行完路径设置操作"); //如果有骑缝章新增骑缝章 - return checkExtendSeal(filePrintRegister.getTemDir() + wordOldUrl, selectSeal, filePrintRegister); + return checkExtendSeal(filePrintRegister.getTemDir() + wordOldUrl, selectSeal, filePrintRegister, sameKeyWordSealMaps); } private static void getQrCode(String tempDir, String customFileName, String wordOldUrl, FilePrintRegister filePrintRegister) throws IOException { @@ -120,7 +125,7 @@ * * @return */ - private static String checkExtendSeal(String wordOldUrl, ElectronicImage selectSeal, FilePrintRegister filePrintRegister) { + private static String checkExtendSeal(String wordOldUrl, ElectronicImage selectSeal, FilePrintRegister filePrintRegister, Map> sameKeyWordSealMaps) { if (ObjectUtils.isNotEmpty(selectSeal)) { //默认转为docx,只需要进行docx的替换即可 String pdfNewUrl = ""; @@ -133,11 +138,53 @@ String tempPdfUrl = filePrintRegister.getTemDir() + "XH" + pdfNewUrl; FilePrintRegisterUtils.wordToPdf(wordOldUrl, tempPdfUrl); DocPictureProvider.wordFullSeam(tempPdfUrl, selectSeal.getElectronicSealImageUrl(), filePrintRegister.getTemDir() + pdfNewUrl); + if (sameKeyWordSealMaps != null && sameKeyWordSealMaps.containsKey(INSIGNIA_KEYWORD)) { + PdfImage(sameKeyWordSealMaps.get(INSIGNIA_KEYWORD), filePrintRegister.getTemDir() + pdfNewUrl); + } + return filePrintRegister.getTemDir() + pdfNewUrl; } return wordOldUrl; } + private static void PdfImage(List electronicImageList, String pdfUrl) { + if (CollectionUtils.isEmpty(electronicImageList)) { + return; + } + ElectronicImage electronicImage = electronicImageList.get(0); + File file = new File(pdfUrl); + // 创建一个PDF文档 + PDDocument document = null; + try { + document = PDDocument.load(file); + PDPage page = document.getPage(0); + // 加载图片 + PDImageXObject pdImage = PDImageXObject.createFromFile(electronicImage.getElectronicSealImageUrl(), document); + // 开启一个内容流,以便在页面上绘制 + PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true); + // 定义图片的位置和大小 + float x = 320; // 距离页面左边界的距离 + float y = 280; // 距离页面底部的距离。注意:PDF中的y坐标从下往上计算 + // 将图片添加到内容流中 + contentStream.drawImage(pdImage, x, y, 100, 100); + // 关闭内容流 + contentStream.close(); + // 保存文档 + document.save(pdfUrl); + } catch (IOException iox) { + log.error("异常信息,{}", iox); + } finally { + if (document != null) { + try { + document.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + } + /** * 将相同关键字的印章添加到同一个位置进行打印 * 1、根据关键词位置添加电子印章 @@ -171,11 +218,13 @@ if ("二维码".equals(electronicSeal.getKeyWord())) { paragraph.setText(""); } + //带有公章的关键字且页数大于2,需要设置骑缝章 + if (INSIGNIA_KEYWORD.equals(electronicSeal.getKeyWord()) && document.getPageCount() >= 2) { + selectSeal = electronicSeal; + continue; + } //添加公司印章 DocPicture docPicture = paragraph.appendPicture(electronicSeal.getElectronicSealImageUrl()); - if (INSIGNIA_KEYWORD.equals(electronicSeal.getKeyWord())) { - docPicture.setTextWrappingStyle(TextWrappingStyle.Behind); - } //设置图片位于文字顶层 DocPictureProvider.populateSingleImage(electronicSeal, keyWordIndex, textSelections, docPicture); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/ImageTool.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/ImageTool.java index bd70cc2..c57ddc5 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/ImageTool.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/ImageTool.java @@ -10,7 +10,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Random; public class ImageTool {