update 下载pdf增加水印

This commit is contained in:
lijiarao
2024-09-11 17:39:30 +08:00
parent 6b7cae0399
commit 7b570451b9
2 changed files with 20 additions and 10 deletions
@@ -24,7 +24,6 @@ import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.util.AntPathMatcher; import org.springframework.util.AntPathMatcher;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.MultipartHttpServletRequest;
@@ -233,7 +232,7 @@ public class CommonController {
} }
//pdf加水印 //pdf加水印
if ("pdf".equalsIgnoreCase(FileUtil.extName(fileName))) { if ("pdf".equalsIgnoreCase(FileUtil.extName(fileName))) {
inputStream = sysWaterMarkUtil.addWatermarkToPdf(inputStream); inputStream = sysWaterMarkUtil.addWatermarkToPdf(inputStream,request);
} }
response.addHeader("Content-Disposition", "attachment;fileName=" + new String(fileName.getBytes("UTF-8"),"iso-8859-1")); response.addHeader("Content-Disposition", "attachment;fileName=" + new String(fileName.getBytes("UTF-8"),"iso-8859-1"));
response.setContentType("application/force-download");// 设置强制下载不打开 response.setContentType("application/force-download");// 设置强制下载不打开
@@ -411,7 +410,7 @@ public class CommonController {
} }
//pdf加水印 //pdf加水印
if ("pdf".equalsIgnoreCase(FileUtil.extName(fileName))) { if ("pdf".equalsIgnoreCase(FileUtil.extName(fileName))) {
inputStream = sysWaterMarkUtil.addWatermarkToPdf(inputStream); inputStream = sysWaterMarkUtil.addWatermarkToPdf(inputStream, request);
} }
ossFileService.updateById(ossFile); ossFileService.updateById(ossFile);
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
@@ -1,8 +1,12 @@
package com.jero.modules.system.util; package com.jero.modules.system.util;
import com.jero.common.constant.CommonConstant;
import com.jero.common.system.api.ISysBaseAPI;
import com.jero.common.system.util.JwtUtil;
import com.jero.common.system.vo.LoginUser; import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.DateUtils; import com.jero.common.util.DateUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.PDPageContentStream;
@@ -11,11 +15,13 @@ import org.apache.pdfbox.pdmodel.font.PDType0Font;
import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState;
import org.apache.pdfbox.pdmodel.graphics.state.RenderingMode; import org.apache.pdfbox.pdmodel.graphics.state.RenderingMode;
import org.apache.pdfbox.util.Matrix; import org.apache.pdfbox.util.Matrix;
import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.awt.*; import java.awt.*;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
@@ -66,11 +72,16 @@ public class SysWaterMarkUtil {
private float marginTop; private float marginTop;
@Value("${watermark.dateFormat}") @Value("${watermark.dateFormat}")
private String dateFormat; private String dateFormat;
@Resource
private ISysBaseAPI sysBaseAPI;
public List<String> getWaterMarkConfig(HttpServletRequest request) {
public List<String> getWaterMarkConfig() { String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN);
LoginUser loginUser = UserUtils.getLoginUser(); LoginUser loginUser = null;
if (StringUtils.isNotBlank(token)){
String username = JwtUtil.getUsername(token);
loginUser = sysBaseAPI.getUserByName(username);
}
Date curDate = new Date(); Date curDate = new Date();
String cudDateStr = DateUtils.date2Str(curDate, new SimpleDateFormat(dateFormat)); String cudDateStr = DateUtils.date2Str(curDate, new SimpleDateFormat(dateFormat));
List<String> result = new ArrayList<>(); List<String> result = new ArrayList<>();
@@ -84,8 +95,8 @@ public class SysWaterMarkUtil {
return result; return result;
} }
public synchronized InputStream addWatermarkToPdf(InputStream inputStream) throws IOException { public synchronized InputStream addWatermarkToPdf(InputStream inputStream, HttpServletRequest request) throws IOException {
List<String> watermarkText = getWaterMarkConfig(); List<String> watermarkText = getWaterMarkConfig(request);
PDDocument document = PDDocument.load(inputStream); PDDocument document = PDDocument.load(inputStream);
document.setAllSecurityToBeRemoved(true); document.setAllSecurityToBeRemoved(true);
// 加载水印字体 // 加载水印字体