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 508696e3..c6289f0d 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 @@ -65,8 +65,7 @@ public class SysWaterMarkUtil { Date curDate = new Date(); String cudDateStr = DateUtils.date2Str(curDate, new SimpleDateFormat("yyyyMMddHHmmss")); List result = new ArrayList<>(); -// result.add(loginUser.getUsername() + " " + loginUser.getRealname()); - result.add("009644" + " " + "刘长森"); + result.add(loginUser.getUsername() + " " + loginUser.getRealname()); result.add(cudDateStr); return result; } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/util/WaterMarkUtil.java b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/util/WaterMarkUtil.java index 165d530b..54650846 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/util/WaterMarkUtil.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/util/WaterMarkUtil.java @@ -15,13 +15,19 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Component; +import java.util.ArrayList; +import java.util.List; import java.awt.*; -import java.io.*; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; /** * 水印工具类 + * * @author CaiHaohan */ @Component @@ -42,18 +48,31 @@ public class WaterMarkUtil { @Value("${watermark.color.a}") private int a; - public String getWaterMarkConfig() { + @Value("${watermark.lineNumPerPage}") + private int lineNumPerPage; + + @Value("${watermark.columnNumPerPage}") + private int columnNumPerPage; + + @Value("${watermark.degree}") + private int degree; + + + public List getWaterMarkConfig() { LoginUser loginUser = UserUtils.getLoginUser(); if (loginUser == null) { - return ""; + return new ArrayList<>(); } Date curDate = new Date(); String cudDateStr = DateUtils.date2Str(curDate, new SimpleDateFormat("yyyyMMddHHmmss")); - return loginUser.getUsername() + " " + loginUser.getRealname() + " " + cudDateStr; + List result = new ArrayList<>(); + result.add(loginUser.getUsername() + " " + loginUser.getRealname()); + result.add(cudDateStr); + return result; } public synchronized InputStream addWatermarkToPdf(InputStream inputStream) throws IOException { - String watermarkText = getWaterMarkConfig(); + List watermarkText = getWaterMarkConfig(); PDDocument document = PDDocument.load(inputStream); // 加载水印字体 @@ -76,23 +95,35 @@ public class WaterMarkUtil { // 根据页面宽度动态调整字体大小 float dynamicFontSize = pageWidth * (this.fontSize / 595); // 假设基准页面宽度为595单位 - float xStep = pageWidth / 2; - float yStep = pageHeight / 8; - float rotationInRadians = (float) Math.toRadians(30); + 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.setFont(font, dynamicFontSize); contentStream.setNonStrokingColor(color); - contentStream.beginText(); - contentStream.setRenderingMode(RenderingMode.FILL); - // 设置水印文本的旋转和位置 - contentStream.setTextMatrix(Matrix.getRotateInstance(rotationInRadians, xPosition, yPosition)); - contentStream.showText(watermarkText); - contentStream.endText(); + + 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); + } } } } @@ -106,5 +137,4 @@ public class WaterMarkUtil { // 将ByteArrayOutputStream转换为ByteArrayInputStream以供返回 return new ByteArrayInputStream(baos.toByteArray()); } - }