diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java index 9af3fb8..07632bf 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java @@ -126,8 +126,10 @@ HashMap hints = new HashMap<>(4); // 指定字符编码为utf-8 hints.put(EncodeHintType.CHARACTER_SET, CHARSET); + hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 指定二维码的纠错等级为中级 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); + // 设置图片的边距 hints.put(EncodeHintType.MARGIN, 2); try { diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java index 9af3fb8..07632bf 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java @@ -126,8 +126,10 @@ HashMap hints = new HashMap<>(4); // 指定字符编码为utf-8 hints.put(EncodeHintType.CHARACTER_SET, CHARSET); + hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 指定二维码的纠错等级为中级 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); + // 设置图片的边距 hints.put(EncodeHintType.MARGIN, 2); try { 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 48f2598..890febf 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 @@ -9,6 +9,9 @@ import com.alibaba.excel.write.metadata.fill.FillConfig; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.service.listeners.util.PdfUtils; +import com.casic.missiles.utils.MinioUtil; +import com.casic.missiles.utils.QRCodeUtil; +import com.casic.missiles.utils.SpringContextUtil; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.deepoove.poi.config.ConfigureBuilder; @@ -39,7 +42,12 @@ import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.rendering.ImageType; +import org.apache.pdfbox.rendering.PDFRenderer; import org.apache.poi.util.IOUtils; +import org.springframework.http.ResponseEntity; +import org.springframework.util.Base64Utils; +import org.springframework.web.client.RestTemplate; import javax.imageio.ImageIO; import javax.swing.*; @@ -190,29 +198,48 @@ 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(); + String pdfPath = path + "1.pdf"; + String imagePath = path + "test.png"; + firstPageAsImgByPdf(pdfPath, imagePath); +// OutputStream output = new FileOutputStream(imagePath); +//// MinioUtil minioUtil = SpringContextUtil.getBean(MinioUtil.class); +// QRCodeUtil.getQRCode("中文", output); +// 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(); } + private static void firstPageAsImgByPdf(String pdfFilePath, String outputImagePath) throws IOException { + try (PDDocument document = PDDocument.load(new File(pdfFilePath))) { + if (!document.isEncrypted()) { + PDFRenderer pdfRenderer = new PDFRenderer(document); + // 获取第一页 + BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(0, 300, ImageType.RGB); + // 写入图片文件 + ImageIO.write(bufferedImage, "JPEG", new File(outputImagePath)); + } + } + } + // 指定关键字 public static String KEY_WORD = "j检定专业"; // PDF当前页数 diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java index 9af3fb8..07632bf 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java @@ -126,8 +126,10 @@ HashMap hints = new HashMap<>(4); // 指定字符编码为utf-8 hints.put(EncodeHintType.CHARACTER_SET, CHARSET); + hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 指定二维码的纠错等级为中级 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); + // 设置图片的边距 hints.put(EncodeHintType.MARGIN, 2); try { 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 48f2598..890febf 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 @@ -9,6 +9,9 @@ import com.alibaba.excel.write.metadata.fill.FillConfig; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.service.listeners.util.PdfUtils; +import com.casic.missiles.utils.MinioUtil; +import com.casic.missiles.utils.QRCodeUtil; +import com.casic.missiles.utils.SpringContextUtil; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.deepoove.poi.config.ConfigureBuilder; @@ -39,7 +42,12 @@ import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.rendering.ImageType; +import org.apache.pdfbox.rendering.PDFRenderer; import org.apache.poi.util.IOUtils; +import org.springframework.http.ResponseEntity; +import org.springframework.util.Base64Utils; +import org.springframework.web.client.RestTemplate; import javax.imageio.ImageIO; import javax.swing.*; @@ -190,29 +198,48 @@ 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(); + String pdfPath = path + "1.pdf"; + String imagePath = path + "test.png"; + firstPageAsImgByPdf(pdfPath, imagePath); +// OutputStream output = new FileOutputStream(imagePath); +//// MinioUtil minioUtil = SpringContextUtil.getBean(MinioUtil.class); +// QRCodeUtil.getQRCode("中文", output); +// 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(); } + private static void firstPageAsImgByPdf(String pdfFilePath, String outputImagePath) throws IOException { + try (PDDocument document = PDDocument.load(new File(pdfFilePath))) { + if (!document.isEncrypted()) { + PDFRenderer pdfRenderer = new PDFRenderer(document); + // 获取第一页 + BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(0, 300, ImageType.RGB); + // 写入图片文件 + ImageIO.write(bufferedImage, "JPEG", new File(outputImagePath)); + } + } + } + // 指定关键字 public static String KEY_WORD = "j检定专业"; // PDF当前页数 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java index c2cc5bb..c7804da 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 @@ -25,9 +25,12 @@ import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.rendering.ImageType; +import org.apache.pdfbox.rendering.PDFRenderer; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.docx4j.wml.R; +import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; @@ -101,18 +104,13 @@ return checkExtendSeal(filePrintRegister.getTemDir() + wordOldUrl, selectSeal, filePrintRegister, sameKeyWordSealMaps); } - private static void getQrCode(String tempDir, String customFileName, String wordOldUrl, FilePrintRegister filePrintRegister) throws IOException { + private static void getQrCode(String tempDir, String customFileName, String pdfNewUrl, FilePrintRegister filePrintRegister) throws IOException { if (StringUtils.isEmpty(filePrintRegister.getQrCode())) { return; } String urlPath = StringUtils.isNotEmpty(customFileName) ? customFileName + ".jpg" : "检测.jpg"; - String[] split = wordOldUrl.split("\\."); - String content = ""; - if (split.length > 1) { - content = split[0] + "_" + System.currentTimeMillis() + ".pdf"; - } else { - content = wordOldUrl + System.currentTimeMillis(); - } + String[] split = pdfNewUrl.split("\\."); + String content = split[0].replaceAll("[\\u4e00-\\u9fa5]", "") + System.currentTimeMillis() + ".png"; filePrintRegister.setQrCode(content); // 加载模板 OutputStream output = new FileOutputStream(tempDir + urlPath); @@ -125,7 +123,7 @@ * * @return */ - private static String checkExtendSeal(String wordOldUrl, ElectronicImage selectSeal, FilePrintRegister filePrintRegister, Map> sameKeyWordSealMaps) { + private static String checkExtendSeal(String wordOldUrl, ElectronicImage selectSeal, FilePrintRegister filePrintRegister, Map> sameKeyWordSealMaps) throws Exception { if (ObjectUtils.isNotEmpty(selectSeal)) { //默认转为docx,只需要进行docx的替换即可 String pdfNewUrl = ""; @@ -141,12 +139,41 @@ if (sameKeyWordSealMaps != null && sameKeyWordSealMaps.containsKey(INSIGNIA_KEYWORD)) { PdfImage(sameKeyWordSealMaps.get(INSIGNIA_KEYWORD), filePrintRegister.getTemDir() + pdfNewUrl); } - + firstPageAsImgByPdf(filePrintRegister.getTemDir()+pdfNewUrl, filePrintRegister.getTemDir() + filePrintRegister.getQrCode()); + PrintFileSupport.uploadCertificate(filePrintRegister.getTemDir()+ filePrintRegister.getQrCode(), filePrintRegister.getQrCode()); return filePrintRegister.getTemDir() + pdfNewUrl; } return wordOldUrl; } + + private static void firstPageAsImgByPdf(String pdfFilePath, String outputImagePath) throws IOException { + try (PDDocument document = PDDocument.load(new File(pdfFilePath))) { + if (!document.isEncrypted()) { + PDFRenderer pdfRenderer = new PDFRenderer(document); + // 获取第一页 + BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(0, 300, ImageType.RGB); + // 写入图片文件 + ImageIO.write(bufferedImage, "JPEG", new File(outputImagePath)); + } + } + } + + private static void firstPageAsPdfByPdf(String pdfFilePath, String outputImagePath) throws IOException { + try (PDDocument sourceDocument = PDDocument.load(new File("source.pdf"))) { + if (!sourceDocument.isEncrypted()) { + PDPage firstPage = sourceDocument.getPage(0); + try (PDDocument newDocument = new PDDocument()) { + newDocument.addPage(firstPage); + newDocument.save("first_page.pdf"); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + private static void PdfImage(List electronicImageList, String pdfUrl) { if (CollectionUtils.isEmpty(electronicImageList)) { return; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java index 9af3fb8..07632bf 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java @@ -126,8 +126,10 @@ HashMap hints = new HashMap<>(4); // 指定字符编码为utf-8 hints.put(EncodeHintType.CHARACTER_SET, CHARSET); + hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 指定二维码的纠错等级为中级 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); + // 设置图片的边距 hints.put(EncodeHintType.MARGIN, 2); try { 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 48f2598..890febf 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 @@ -9,6 +9,9 @@ import com.alibaba.excel.write.metadata.fill.FillConfig; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.service.listeners.util.PdfUtils; +import com.casic.missiles.utils.MinioUtil; +import com.casic.missiles.utils.QRCodeUtil; +import com.casic.missiles.utils.SpringContextUtil; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.deepoove.poi.config.ConfigureBuilder; @@ -39,7 +42,12 @@ import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.rendering.ImageType; +import org.apache.pdfbox.rendering.PDFRenderer; import org.apache.poi.util.IOUtils; +import org.springframework.http.ResponseEntity; +import org.springframework.util.Base64Utils; +import org.springframework.web.client.RestTemplate; import javax.imageio.ImageIO; import javax.swing.*; @@ -190,29 +198,48 @@ 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(); + String pdfPath = path + "1.pdf"; + String imagePath = path + "test.png"; + firstPageAsImgByPdf(pdfPath, imagePath); +// OutputStream output = new FileOutputStream(imagePath); +//// MinioUtil minioUtil = SpringContextUtil.getBean(MinioUtil.class); +// QRCodeUtil.getQRCode("中文", output); +// 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(); } + private static void firstPageAsImgByPdf(String pdfFilePath, String outputImagePath) throws IOException { + try (PDDocument document = PDDocument.load(new File(pdfFilePath))) { + if (!document.isEncrypted()) { + PDFRenderer pdfRenderer = new PDFRenderer(document); + // 获取第一页 + BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(0, 300, ImageType.RGB); + // 写入图片文件 + ImageIO.write(bufferedImage, "JPEG", new File(outputImagePath)); + } + } + } + // 指定关键字 public static String KEY_WORD = "j检定专业"; // PDF当前页数 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java index c2cc5bb..c7804da 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 @@ -25,9 +25,12 @@ import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.rendering.ImageType; +import org.apache.pdfbox.rendering.PDFRenderer; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.docx4j.wml.R; +import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; @@ -101,18 +104,13 @@ return checkExtendSeal(filePrintRegister.getTemDir() + wordOldUrl, selectSeal, filePrintRegister, sameKeyWordSealMaps); } - private static void getQrCode(String tempDir, String customFileName, String wordOldUrl, FilePrintRegister filePrintRegister) throws IOException { + private static void getQrCode(String tempDir, String customFileName, String pdfNewUrl, FilePrintRegister filePrintRegister) throws IOException { if (StringUtils.isEmpty(filePrintRegister.getQrCode())) { return; } String urlPath = StringUtils.isNotEmpty(customFileName) ? customFileName + ".jpg" : "检测.jpg"; - String[] split = wordOldUrl.split("\\."); - String content = ""; - if (split.length > 1) { - content = split[0] + "_" + System.currentTimeMillis() + ".pdf"; - } else { - content = wordOldUrl + System.currentTimeMillis(); - } + String[] split = pdfNewUrl.split("\\."); + String content = split[0].replaceAll("[\\u4e00-\\u9fa5]", "") + System.currentTimeMillis() + ".png"; filePrintRegister.setQrCode(content); // 加载模板 OutputStream output = new FileOutputStream(tempDir + urlPath); @@ -125,7 +123,7 @@ * * @return */ - private static String checkExtendSeal(String wordOldUrl, ElectronicImage selectSeal, FilePrintRegister filePrintRegister, Map> sameKeyWordSealMaps) { + private static String checkExtendSeal(String wordOldUrl, ElectronicImage selectSeal, FilePrintRegister filePrintRegister, Map> sameKeyWordSealMaps) throws Exception { if (ObjectUtils.isNotEmpty(selectSeal)) { //默认转为docx,只需要进行docx的替换即可 String pdfNewUrl = ""; @@ -141,12 +139,41 @@ if (sameKeyWordSealMaps != null && sameKeyWordSealMaps.containsKey(INSIGNIA_KEYWORD)) { PdfImage(sameKeyWordSealMaps.get(INSIGNIA_KEYWORD), filePrintRegister.getTemDir() + pdfNewUrl); } - + firstPageAsImgByPdf(filePrintRegister.getTemDir()+pdfNewUrl, filePrintRegister.getTemDir() + filePrintRegister.getQrCode()); + PrintFileSupport.uploadCertificate(filePrintRegister.getTemDir()+ filePrintRegister.getQrCode(), filePrintRegister.getQrCode()); return filePrintRegister.getTemDir() + pdfNewUrl; } return wordOldUrl; } + + private static void firstPageAsImgByPdf(String pdfFilePath, String outputImagePath) throws IOException { + try (PDDocument document = PDDocument.load(new File(pdfFilePath))) { + if (!document.isEncrypted()) { + PDFRenderer pdfRenderer = new PDFRenderer(document); + // 获取第一页 + BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(0, 300, ImageType.RGB); + // 写入图片文件 + ImageIO.write(bufferedImage, "JPEG", new File(outputImagePath)); + } + } + } + + private static void firstPageAsPdfByPdf(String pdfFilePath, String outputImagePath) throws IOException { + try (PDDocument sourceDocument = PDDocument.load(new File("source.pdf"))) { + if (!sourceDocument.isEncrypted()) { + PDPage firstPage = sourceDocument.getPage(0); + try (PDDocument newDocument = new PDDocument()) { + newDocument.addPage(firstPage); + newDocument.save("first_page.pdf"); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + private static void PdfImage(List electronicImageList, String pdfUrl) { if (CollectionUtils.isEmpty(electronicImageList)) { return; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index 57a4313..041716d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -95,7 +95,7 @@ } finally { if (printDocUrl != null) { //如果文件路径不为空,回传文件流 - miniName = createResponseFileInput(printDocUrl, filePrintRegister.getQrCode(), registerParameters.getResponse()); + miniName = createResponseFileInput(printDocUrl, null, registerParameters.getResponse()); } //删除无效的文件 File invalidFile = new File(tempLocalFileDir); @@ -111,7 +111,6 @@ * 拆分成excel和word格式开发, */ private String populateWordPrintFile(String tempLocalFileDir, FilePrintRegister filePrintRegister, String customFileName) throws Exception { - //合并注册 filePrintRegister.setCustomFileName(customFileName); return FilePrintRegisterUtils.filePrintGenerate(filePrintRegister); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java index 9af3fb8..07632bf 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/QRCodeUtil.java @@ -126,8 +126,10 @@ HashMap hints = new HashMap<>(4); // 指定字符编码为utf-8 hints.put(EncodeHintType.CHARACTER_SET, CHARSET); + hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 指定二维码的纠错等级为中级 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); + // 设置图片的边距 hints.put(EncodeHintType.MARGIN, 2); try { 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 48f2598..890febf 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 @@ -9,6 +9,9 @@ import com.alibaba.excel.write.metadata.fill.FillConfig; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.service.listeners.util.PdfUtils; +import com.casic.missiles.utils.MinioUtil; +import com.casic.missiles.utils.QRCodeUtil; +import com.casic.missiles.utils.SpringContextUtil; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.deepoove.poi.config.ConfigureBuilder; @@ -39,7 +42,12 @@ import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.rendering.ImageType; +import org.apache.pdfbox.rendering.PDFRenderer; import org.apache.poi.util.IOUtils; +import org.springframework.http.ResponseEntity; +import org.springframework.util.Base64Utils; +import org.springframework.web.client.RestTemplate; import javax.imageio.ImageIO; import javax.swing.*; @@ -190,29 +198,48 @@ 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(); + String pdfPath = path + "1.pdf"; + String imagePath = path + "test.png"; + firstPageAsImgByPdf(pdfPath, imagePath); +// OutputStream output = new FileOutputStream(imagePath); +//// MinioUtil minioUtil = SpringContextUtil.getBean(MinioUtil.class); +// QRCodeUtil.getQRCode("中文", output); +// 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(); } + private static void firstPageAsImgByPdf(String pdfFilePath, String outputImagePath) throws IOException { + try (PDDocument document = PDDocument.load(new File(pdfFilePath))) { + if (!document.isEncrypted()) { + PDFRenderer pdfRenderer = new PDFRenderer(document); + // 获取第一页 + BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(0, 300, ImageType.RGB); + // 写入图片文件 + ImageIO.write(bufferedImage, "JPEG", new File(outputImagePath)); + } + } + } + // 指定关键字 public static String KEY_WORD = "j检定专业"; // PDF当前页数 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java index c2cc5bb..c7804da 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 @@ -25,9 +25,12 @@ import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.rendering.ImageType; +import org.apache.pdfbox.rendering.PDFRenderer; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.docx4j.wml.R; +import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; @@ -101,18 +104,13 @@ return checkExtendSeal(filePrintRegister.getTemDir() + wordOldUrl, selectSeal, filePrintRegister, sameKeyWordSealMaps); } - private static void getQrCode(String tempDir, String customFileName, String wordOldUrl, FilePrintRegister filePrintRegister) throws IOException { + private static void getQrCode(String tempDir, String customFileName, String pdfNewUrl, FilePrintRegister filePrintRegister) throws IOException { if (StringUtils.isEmpty(filePrintRegister.getQrCode())) { return; } String urlPath = StringUtils.isNotEmpty(customFileName) ? customFileName + ".jpg" : "检测.jpg"; - String[] split = wordOldUrl.split("\\."); - String content = ""; - if (split.length > 1) { - content = split[0] + "_" + System.currentTimeMillis() + ".pdf"; - } else { - content = wordOldUrl + System.currentTimeMillis(); - } + String[] split = pdfNewUrl.split("\\."); + String content = split[0].replaceAll("[\\u4e00-\\u9fa5]", "") + System.currentTimeMillis() + ".png"; filePrintRegister.setQrCode(content); // 加载模板 OutputStream output = new FileOutputStream(tempDir + urlPath); @@ -125,7 +123,7 @@ * * @return */ - private static String checkExtendSeal(String wordOldUrl, ElectronicImage selectSeal, FilePrintRegister filePrintRegister, Map> sameKeyWordSealMaps) { + private static String checkExtendSeal(String wordOldUrl, ElectronicImage selectSeal, FilePrintRegister filePrintRegister, Map> sameKeyWordSealMaps) throws Exception { if (ObjectUtils.isNotEmpty(selectSeal)) { //默认转为docx,只需要进行docx的替换即可 String pdfNewUrl = ""; @@ -141,12 +139,41 @@ if (sameKeyWordSealMaps != null && sameKeyWordSealMaps.containsKey(INSIGNIA_KEYWORD)) { PdfImage(sameKeyWordSealMaps.get(INSIGNIA_KEYWORD), filePrintRegister.getTemDir() + pdfNewUrl); } - + firstPageAsImgByPdf(filePrintRegister.getTemDir()+pdfNewUrl, filePrintRegister.getTemDir() + filePrintRegister.getQrCode()); + PrintFileSupport.uploadCertificate(filePrintRegister.getTemDir()+ filePrintRegister.getQrCode(), filePrintRegister.getQrCode()); return filePrintRegister.getTemDir() + pdfNewUrl; } return wordOldUrl; } + + private static void firstPageAsImgByPdf(String pdfFilePath, String outputImagePath) throws IOException { + try (PDDocument document = PDDocument.load(new File(pdfFilePath))) { + if (!document.isEncrypted()) { + PDFRenderer pdfRenderer = new PDFRenderer(document); + // 获取第一页 + BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(0, 300, ImageType.RGB); + // 写入图片文件 + ImageIO.write(bufferedImage, "JPEG", new File(outputImagePath)); + } + } + } + + private static void firstPageAsPdfByPdf(String pdfFilePath, String outputImagePath) throws IOException { + try (PDDocument sourceDocument = PDDocument.load(new File("source.pdf"))) { + if (!sourceDocument.isEncrypted()) { + PDPage firstPage = sourceDocument.getPage(0); + try (PDDocument newDocument = new PDDocument()) { + newDocument.addPage(firstPage); + newDocument.save("first_page.pdf"); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + private static void PdfImage(List electronicImageList, String pdfUrl) { if (CollectionUtils.isEmpty(electronicImageList)) { return; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index 57a4313..041716d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -95,7 +95,7 @@ } finally { if (printDocUrl != null) { //如果文件路径不为空,回传文件流 - miniName = createResponseFileInput(printDocUrl, filePrintRegister.getQrCode(), registerParameters.getResponse()); + miniName = createResponseFileInput(printDocUrl, null, registerParameters.getResponse()); } //删除无效的文件 File invalidFile = new File(tempLocalFileDir); @@ -111,7 +111,6 @@ * 拆分成excel和word格式开发, */ private String populateWordPrintFile(String tempLocalFileDir, FilePrintRegister filePrintRegister, String customFileName) throws Exception { - //合并注册 filePrintRegister.setCustomFileName(customFileName); return FilePrintRegisterUtils.filePrintGenerate(filePrintRegister); 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 6dde846..3fd8c3f 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 @@ -1,6 +1,7 @@ package com.casic.missiles.service.listeners.register; import com.casic.missiles.utils.MinioUtil; +import com.casic.missiles.utils.SpringContextUtil; import io.minio.GetObjectArgs; import io.minio.MinioClient; import lombok.extern.slf4j.Slf4j; @@ -26,8 +27,7 @@ @Autowired private MinioClient minioClient; - @Autowired - private MinioUtil minioUtil; + @Value("${minio.bucketName}") private String bucketName; @@ -131,7 +131,7 @@ /** * 通过生成的证书报告,将证书报告上传到远程mini的文件服务器 */ - protected String uploadCertificate(String certificatePrintUrl, String customFileName) { + public static String uploadCertificate(String certificatePrintUrl, String customFileName) { //上传证书 File file = new File(certificatePrintUrl); //获取file对象的文件输入流 @@ -142,6 +142,7 @@ MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), MediaType.MULTIPART_FORM_DATA_VALUE, IOUtils.toByteArray(input)); // MultipartFile[] multipartFiles = new MultipartFile[1]; // multipartFiles[0] = multipartFile; + MinioUtil minioUtil = SpringContextUtil.getBean(MinioUtil.class); minioFileName = minioUtil.uploadCustomName(multipartFile, customFileName); } catch (IOException ie) { log.error("Description Failed to upload the certificate to the server,the failed reason is {}...", ie);