diff --git a/laws-module-system/src/main/java/com/jero/modules/system/util/SysWaterMarkUtil.java b/laws-module-system/src/main/java/com/jero/modules/system/util/SysWaterMarkUtil.java index c6289f0d..34ecab96 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/util/SysWaterMarkUtil.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/util/SysWaterMarkUtil.java @@ -57,6 +57,13 @@ public class SysWaterMarkUtil { private int degree; + @Value("${watermark.margin.left}") + private float marginLeft; + + @Value("${watermark.margin.top}") + private float marginTop; + + public List getWaterMarkConfig() { LoginUser loginUser = UserUtils.getLoginUser(); if (loginUser == null) { @@ -104,8 +111,8 @@ public class SysWaterMarkUtil { // 计算两行文本的总高度 float totalTextHeight = (dynamicFontSize + lineSpacing) * (watermarkText.size() - 1); - for (float xPosition = pageSize.getLowerLeftX(); xPosition <= pageWidth; xPosition += xStep) { - for (float yPosition = pageSize.getLowerLeftY(); yPosition <= pageHeight; yPosition += yStep) { + for (float xPosition = pageSize.getLowerLeftX() + marginLeft; xPosition <= pageWidth - marginLeft; xPosition += xStep) { + for (float yPosition = pageSize.getLowerLeftY() + marginTop; yPosition <= pageHeight - marginTop; yPosition += yStep) { try (PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true)) { contentStream.setGraphicsStateParameters(graphicsState); contentStream.setNonStrokingColor(color); diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/controller/LawsCommonController.java b/laws-modules/src/main/java/com/jero/modules/laws/common/controller/LawsCommonController.java index d7c77a5c..2966d7c8 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/controller/LawsCommonController.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/controller/LawsCommonController.java @@ -1,22 +1,18 @@ package com.jero.modules.laws.common.controller; -import cn.hutool.core.io.FileUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.jero.common.api.vo.Result; import com.jero.common.aspect.annotation.DictPoint; import com.jero.common.exception.JeroBootException; import com.jero.common.util.MessageUtils; -import com.jero.common.util.MinioUtil; import com.jero.common.api.vo.ResultCommon; import com.jero.modules.laws.common.service.ILawsCommonService; import com.jero.modules.laws.common.vo.LawsDictModel; import com.jero.modules.laws.common.vo.ManyStandardSelectionBox; import com.jero.modules.laws.common.vo.ManyStandardSelectionBoxVO; -import com.jero.modules.laws.enterprise.util.WaterMarkUtil; -import com.jero.modules.oss.entity.OSSFile; import com.jero.modules.oss.service.IOSSFileService; import com.jero.modules.split.entity.SarFileSplitInfoEO; +import com.jero.modules.system.util.SysWaterMarkUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -25,10 +21,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; -import java.io.InputStream; -import java.io.OutputStream; -import java.nio.charset.StandardCharsets; import java.util.List; /** @@ -45,12 +37,6 @@ public class LawsCommonController { @Autowired private ILawsCommonService lawsCommonService; - @Resource - private WaterMarkUtil waterMarkUtil; - - @Resource - private IOSSFileService ossFileService; - @ApiOperation(value="多选标准弹框", notes="多选标准弹框") @GetMapping(value = "/getManyStandardSelectionBox") public Result> getManyStandardSelectionBox(ManyStandardSelectionBoxVO selectionBoxVO, diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java index b6e87d7e..842af51a 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java @@ -23,16 +23,13 @@ import com.jero.modules.laws.common.util.ImportUtil; import com.jero.modules.laws.common.vo.LawsDictModel; import com.jero.modules.laws.common.vo.ManyStandardSelectionBox; import com.jero.modules.laws.common.vo.ManyStandardSelectionBoxVO; -import com.jero.modules.laws.documenttool.entity.SarFileSplitMenu; import com.jero.modules.laws.documenttool.mapper.DocumentSplitMapper; -import com.jero.modules.laws.documenttool.service.IDocumentSplitService; import com.jero.modules.laws.enterprise.entity.EnterpriseStandardAuthDept; import com.jero.modules.laws.enterprise.entity.EnterpriseStandardInspectContent; import com.jero.modules.laws.enterprise.service.EnterpriseStandardAuthDeptService; import com.jero.modules.laws.enterprise.service.EnterpriseStandardAuthUserService; import com.jero.modules.laws.enterprise.service.EnterpriseStandardInspectContentService; import com.jero.modules.laws.enterprise.util.EnterpriseStandardUtil; -import com.jero.modules.laws.enterprise.util.WaterMarkUtil; import com.jero.modules.laws.home.common.LawsHomeSearchCommon; import com.jero.modules.laws.home.service.ILawsHomeSearchService; import com.jero.modules.laws.standard.entity.*; @@ -48,13 +45,13 @@ import com.jero.modules.personal.service.ILawsStandardCollectionService; import com.jero.modules.split.common.FileUnZip; import com.jero.modules.split.entity.SarFileSplitInfoEO; import com.jero.modules.split.service.ISarFileSplitInfoService; -import com.jero.modules.sys.utils.UserUtils; import com.jero.modules.system.entity.SysDepart; import com.jero.modules.system.entity.SysDictItem; import com.jero.modules.system.entity.SysUser; import com.jero.modules.system.service.ISysDepartService; import com.jero.modules.system.service.ISysDictItemService; import com.jero.modules.system.service.ISysUserService; +import com.jero.modules.system.util.SysWaterMarkUtil; import com.jero.modules.tag.entity.LawsArea; import com.jero.modules.tag.entity.LawsTag; import com.jero.modules.tag.enums.FieldShowTypeEnum; @@ -143,7 +140,7 @@ public class LawsCommonServiceImpl implements ILawsCommonService { @Resource private EnterpriseStandardAuthUserService esAuthUserService; @Resource - private WaterMarkUtil waterMarkUtil; + private SysWaterMarkUtil sysWaterMarkUtil; @Autowired private ISarFileSplitInfoService sarFileSplitInfoService; @Autowired @@ -2253,7 +2250,7 @@ public class LawsCommonServiceImpl implements ILawsCommonService { if ("pdf".equalsIgnoreCase(FileUtil.extName(fileName))) { // 如果是PDF文件, 添加水印 try (InputStream originalInputStream = MinioUtil.getMinioFile(MinioUtil.getBucketName(), url); - InputStream watermarkedInputStream = waterMarkUtil.addWatermarkToPdf(originalInputStream)) { + InputStream watermarkedInputStream = sysWaterMarkUtil.addWatermarkToPdf(originalInputStream)) { if (originalInputStream == null) { return null; diff --git a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/service/impl/EnterpriseStandardDeclareServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/service/impl/EnterpriseStandardDeclareServiceImpl.java index 39296fee..5a5bbcf7 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/service/impl/EnterpriseStandardDeclareServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/service/impl/EnterpriseStandardDeclareServiceImpl.java @@ -20,9 +20,9 @@ import com.jero.modules.laws.enterprise.entity.vo.EnterpriseStandardDeclareVo; import com.jero.modules.laws.enterprise.mapper.EnterpriseStandardDeclareMapper; import com.jero.modules.laws.enterprise.service.EnterpriseStandardDeclareService; import com.jero.modules.laws.enterprise.util.BeanCopyUtils; -import com.jero.modules.laws.enterprise.util.WaterMarkUtil; import com.jero.modules.oss.entity.OSSFile; import com.jero.modules.oss.service.IOSSFileService; +import com.jero.modules.system.util.SysWaterMarkUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.*; @@ -63,7 +63,7 @@ public class EnterpriseStandardDeclareServiceImpl extends ServiceImpl getWaterMarkConfig() { - LoginUser loginUser = UserUtils.getLoginUser(); - if (loginUser == null) { - return new ArrayList<>(); - } - Date curDate = new Date(); - String cudDateStr = DateUtils.date2Str(curDate, new SimpleDateFormat("yyyyMMddHHmmss")); - List result = new ArrayList<>(); - result.add(loginUser.getUsername() + " " + loginUser.getRealname()); - result.add(cudDateStr); - return result; - } - - public synchronized InputStream addWatermarkToPdf(InputStream inputStream) throws IOException { - List watermarkText = getWaterMarkConfig(); - PDDocument document = PDDocument.load(inputStream); - - // 加载水印字体 - ClassPathResource fontResource = new ClassPathResource("fonts/SourceHanSerif-VF.ttf"); - PDType0Font font = PDType0Font.load(document, fontResource.getInputStream()); - - // 设置水印颜色和透明度 - Color color = new Color(r, g, b, a); - PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState(); - graphicsState.setNonStrokingAlphaConstant(0.4f); - graphicsState.setStrokingAlphaConstant(0.4f); - - // 遍历每一页并添加水印 - for (PDPage page : document.getPages()) { - // 获取页面尺寸以计算水印位置和大小 - PDRectangle pageSize = page.getMediaBox(); - float pageWidth = pageSize.getWidth(); - float pageHeight = pageSize.getHeight(); - - // 根据页面宽度动态调整字体大小 - float dynamicFontSize = pageWidth * (this.fontSize / 595); // 假设基准页面宽度为595单位 - - float xStep = pageWidth / columnNumPerPage; - float yStep = pageHeight / lineNumPerPage; - float rotationInRadians = (float) Math.toRadians(degree); - - // 行间距,设为字体大小的一半 - float lineSpacing = dynamicFontSize / 2; - - // 计算两行文本的总高度 - float totalTextHeight = (dynamicFontSize + lineSpacing) * (watermarkText.size() - 1); - - for (float xPosition = pageSize.getLowerLeftX(); xPosition <= pageWidth; xPosition += xStep) { - for (float yPosition = pageSize.getLowerLeftY(); yPosition <= pageHeight; yPosition += yStep) { - try (PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true)) { - contentStream.setGraphicsStateParameters(graphicsState); - contentStream.setNonStrokingColor(color); - - float textYPosition = yPosition + (totalTextHeight / 2); - - for (String line : watermarkText) { - contentStream.beginText(); - contentStream.setFont(font, dynamicFontSize); - contentStream.setRenderingMode(RenderingMode.FILL); - contentStream.setTextMatrix(Matrix.getRotateInstance(rotationInRadians, xPosition, textYPosition)); - contentStream.showText(line); - contentStream.endText(); - - // 更新文本的Y坐标,为下一行准备 - textYPosition -= (dynamicFontSize + lineSpacing); - } - } - } - } - } - - // 创建一个临时的ByteArrayOutputStream保存修改过的PDF - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - document.save(baos); - document.close(); - - // 将ByteArrayOutputStream转换为ByteArrayInputStream以供返回 - return new ByteArrayInputStream(baos.toByteArray()); - } -} diff --git a/laws-modules/src/main/java/com/jero/modules/sys/controller/SysCommonController.java b/laws-modules/src/main/java/com/jero/modules/sys/controller/SysCommonController.java index c6ebc09a..6d14198b 100644 --- a/laws-modules/src/main/java/com/jero/modules/sys/controller/SysCommonController.java +++ b/laws-modules/src/main/java/com/jero/modules/sys/controller/SysCommonController.java @@ -6,11 +6,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.jero.common.exception.JeroBootException; import com.jero.common.util.MinioUtil; import com.jero.modules.laws.enterprise.service.EnterpriseStandardAuthUserService; -import com.jero.modules.laws.enterprise.util.WaterMarkUtil; import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard; import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService; import com.jero.modules.oss.entity.OSSFile; import com.jero.modules.oss.service.IOSSFileService; +import com.jero.modules.system.util.SysWaterMarkUtil; import com.jero.modules.system.util.UserUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.core.io.ClassPathResource; @@ -36,7 +36,7 @@ import java.nio.charset.StandardCharsets; public class SysCommonController { @Resource - private WaterMarkUtil waterMarkUtil; + private SysWaterMarkUtil sysWaterMarkUtil; @Resource private IOSSFileService ossFileService; @@ -120,7 +120,7 @@ public class SysCommonController { // 然后在您的controller方法中: if ("pdf".equalsIgnoreCase(FileUtil.extName(fileName))) { try (InputStream originalInputStream = MinioUtil.getMinioFile(MinioUtil.getBucketName(), url); - InputStream watermarkedInputStream = waterMarkUtil.addWatermarkToPdf(originalInputStream); + InputStream watermarkedInputStream = sysWaterMarkUtil.addWatermarkToPdf(originalInputStream); OutputStream outputStream = response.getOutputStream()) { if (originalInputStream == null) { diff --git a/laws-single-startup/src/main/resources/application-dev.yml b/laws-single-startup/src/main/resources/application-dev.yml index 00b313a1..34af71f7 100644 --- a/laws-single-startup/src/main/resources/application-dev.yml +++ b/laws-single-startup/src/main/resources/application-dev.yml @@ -463,7 +463,7 @@ watermark: # 每页几行 lineNumPerPage: 8 # 每页几列 - columnNumPerPage: 2 + columnNumPerPage: 3 # 倾斜角度 degree: 30 # 颜色 @@ -471,4 +471,8 @@ watermark: r: 180 g: 180 b: 180 - a: 1 \ No newline at end of file + a: 1 + # 页边距 + margin: + top: 100 + left: 50