From bd1d86f3d591bfe3a430e29bdb55f5d56072fbb3 Mon Sep 17 00:00:00 2001 From: Aug <17674666882@163.com> Date: Mon, 17 Feb 2025 21:47:37 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E7=94=B5=E5=AD=90=E5=90=88=E5=90=8C?= =?UTF-8?q?=E5=8A=A0=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/controller2/ContractController.java | 7 +++ .../jeecg/modules/apiService/ContractService.java | 3 + .../apiService/impl/ContractServiceImpl.java | 70 ++++++++++++++++++++++ 3 files changed, 80 insertions(+) diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/controller2/ContractController.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/controller2/ContractController.java index d2c160c..3ba01ed 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/controller2/ContractController.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/controller2/ContractController.java @@ -111,4 +111,11 @@ public class ContractController { return contractService.image2pdf(images); } + //我的服务-电子合同 + @ApiOperation(value="工具-pdf加签名", notes="工具-pdf加签名") + @RequestMapping(value = "/signPdf", method = {RequestMethod.GET}) + public Result signPdf(String pdfPath, String imagePath, int pageNo, float positionX, float positonY, float imageWidth, float imageHeight){ + return contractService.signPdf(pdfPath, imagePath, pageNo, positionX, positonY, imageWidth, imageHeight); + } + } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/ContractService.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/ContractService.java index e92cdcc..1bd191f 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/ContractService.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/ContractService.java @@ -98,4 +98,7 @@ public interface ContractService { //工具-图片转pdf(多个图片用;分隔) public Result image2pdf(String images); + //工具-图片转pdf(多个图片用;分隔) + public Result signPdf(String pdfPath, String imagePath, int pageNo, float positionX, float positonY, float imageWidth, float imageHeight); + } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/ContractServiceImpl.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/ContractServiceImpl.java index 61454f2..cb9070b 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/ContractServiceImpl.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/ContractServiceImpl.java @@ -375,6 +375,76 @@ public class ContractServiceImpl implements ContractService { return Result.OK("pdf地址", pdfUrl); } + public Result signPdf(String pdfPath, String imagePath, int pageNo, float positionX, float positonY, float imageWidth, float imageHeight){ + String tempPath = System.getProperty("java.io.tmpdir") + File.separator + "resultPdf.pdf";//临时文件路径 + String resultPdfPath = null; + + try{ + //1、获得文件流对象 + InputStream pdfInputStream = new URL(pdfPath).openStream(); + InputStream imageInputStream = new URL(imagePath).openStream(); + //2、得到PDF文档对象 + PDDocument document = PDDocument.load(pdfInputStream); + + + + int pageNum = document.getNumberOfPages(); + if(pageNo<0 || pageNo>pageNum){ + String message = "签名页码超出范围(0~"+pageNum+"),请输入正确的签名页码,当前传入页码:"+pageNo; + return Result.OK("签名页码超出范围,输入正确的签名页码"); + } + //3、由Document得到Page对象 + PDPage page = document.getPage(pageNo-1);//页码下标从0开始 + //4、通过图片路径和PDF文档对象得到图片image对象 + //PDImageXObject image = PDImageXObject.createFromFile(PNG_PATH, document); + PDImageXObject image = createImageFromInputStream(document, imageInputStream); + //5、创建pageStream对象 + PDPageContentStream pageStream = new PDPageContentStream(document, page,PDPageContentStream.AppendMode.APPEND,false,false); + + /** + * 可优化位置 + */ + //6、pageStream对象绘制图片位置及大小,已PDF文件右下角为原点(x,y)是图片左下角左边,width、height是图片的长和宽 + //pageStream.drawImage(image, 450, 700,50,50); + + //获取pdf宽度 + float width = document.getPage(pageNo).getMediaBox().getWidth(); + positionX = (float) (width * positionX / 750.0); + positonY = (float) (width * positonY / 750.0); + imageWidth = (float) (width * imageWidth / 750.0); + imageHeight = (float) (width * imageHeight / 750.0); + + pageStream.drawImage(image, positionX, positonY,imageWidth,imageHeight); + pageStream.close(); + //7、保存PDF到指定路径 + document.save(tempPath); + + //8、将输出路径转换成 File,后续进行 OSS 上传 + File file = new File(tempPath); + InputStream inputStream = new FileInputStream(file); + //获取当前时间 + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); + Date now = new Date(); + String formattedDate = sdf.format(now); + resultPdfPath = OssBootUtil.upload(inputStream, formattedDate+".pdf"); + + //删除临时文件 + file.delete(); + + //8、关闭流 + document.close(); + pdfInputStream.close(); + + }catch (Exception e){ + e.printStackTrace(); + return Result.OK("pdf添加签名失败!"); + } + + return Result.OK("pdfPath", resultPdfPath); + } + + + /***************************************************************************/ /** * 将 pdf链接文件转换成多图片base64 * @param pdfLink