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 {