diff --git a/jero-boot/jero-boot-module-system/pom.xml b/jero-boot/jero-boot-module-system/pom.xml
index e197885db..8b23d23fd 100644
--- a/jero-boot/jero-boot-module-system/pom.xml
+++ b/jero-boot/jero-boot-module-system/pom.xml
@@ -70,6 +70,11 @@
org.springframework.cloud
spring-cloud-openfeign-core
+
+ com.itextpdf
+ itext-asian
+ 5.2.0
+
com.lowagie
itext
diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/PDFUtils.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/PDFUtils.java
index ce9b378c3..c83b6776c 100644
--- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/PDFUtils.java
+++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/PDFUtils.java
@@ -1,26 +1,24 @@
package com.jero.modules.system.util;
+import com.itextpdf.text.BaseColor;
+import com.itextpdf.text.DocumentException;
+import com.itextpdf.text.Element;
+import com.itextpdf.text.pdf.*;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
-import com.spire.pdf.graphics.PdfBrushes;
import com.spire.pdf.graphics.PdfFont;
-import com.spire.pdf.graphics.PdfFontFamily;
-import com.spire.pdf.graphics.PdfStringFormat;
-import com.spire.pdf.graphics.PdfTextAlignment;
-import com.spire.pdf.graphics.PdfTilingBrush;
+import com.spire.pdf.graphics.*;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.IOUtils;
+import javax.swing.*;
import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
+import java.io.*;
+@Slf4j
public class PDFUtils {
public static void main(String[] args) throws IOException {
File file = new File("E:\\DeskTop\\动态资料\\加入IEEE会员 - 副本 - 副本.pdf");
@@ -84,7 +82,7 @@ public class PDFUtils {
page.getCanvas().drawRectangle(brush, loRect);
}
- public static File PDFWatermark(InputStream in,String uploadpath, String fileName,String waterMark) throws FileNotFoundException {
+ public static File PDFWatermarkInvalid(InputStream in,String uploadpath, String fileName,String waterMark) throws FileNotFoundException {
//创建PdfDocument类的对象
PdfDocument pdf = new PdfDocument();
//加载测试文档
@@ -203,4 +201,109 @@ public class PDFUtils {
// }
// return buffer;
// }
+
+ public static File PDFWatermark(InputStream in,String uploadpath, String fileName,String waterMark) {
+
+ String newFilePath = "";
+ // 待加水印的文件
+ PdfReader reader = null;
+ PdfStamper stamper = null;
+ FileOutputStream os = null;
+
+ try {
+ byte[] byes = IOUtils.toByteArray(in);
+
+ //生成临时文件 , 读取完删除
+ String path = uploadpath + File.separator + fileName;
+ newFilePath = path.replace(fileName, "transformation" + fileName);
+ reader = new PdfReader(byes);
+
+ // 加完水印的文件
+ os = new FileOutputStream(newFilePath);
+ stamper = new PdfStamper(reader, os);
+
+ int total = reader.getNumberOfPages() + 1;
+ BaseFont basefont = BaseFont.createFont("/static/times.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
+ // 方法二:这里的字体设置比较关键,这个设置是支持中文的写法
+// BaseFont basefont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// 使用系统字体
+
+ PdfContentByte under;
+ com.itextpdf.text.Rectangle pageRect = null;
+
+ //水印倾斜角度(0-360)
+ int angle = 45;
+ //数值越大每页竖向水印越少
+ int heightDensity = 10;
+ //数值越大每页横向水印越少
+ int widthDensity = 1;
+ int textH = 0;
+ int textW = 0;
+ JLabel label = new JLabel();
+ FontMetrics metrics;
+ label.setText(waterMark);
+ metrics = label.getFontMetrics(label.getFont());
+ //字符串的高, 只和字体有关
+ textH = metrics.getHeight();
+ //字符串的宽
+ textW = metrics.stringWidth(label.getText());
+
+ // 循环对每页插入水印
+ for (int i = 1; i < total; i++) {
+ pageRect = stamper.getReader().getPageSizeWithRotation(i);
+
+ // 获得PDF最顶层
+ under = stamper.getOverContent(i);
+ under.saveState();
+ // set Transparency
+ PdfGState gs = new PdfGState();
+ // 设置透明度
+ gs.setFillOpacity(0.5f);
+ under.setGState(gs);
+ under.restoreState();
+ under.beginText();
+ under.setFontAndSize(basefont, pageRect.getHeight() / 100);
+ under.setColorFill(BaseColor.PINK);
+
+ // 水印文字成45度角倾斜
+ for (int height = textH; height < pageRect.getHeight() * 3; height = height + textH * heightDensity) {
+ for (int width = textW; width < pageRect.getWidth() * 1.5 + textW; width = width + textW * widthDensity) {
+ // rotation:倾斜角度
+ under.showTextAligned(Element.ALIGN_CENTER, waterMark, width - textW, height - textH, angle);
+ }
+ }
+
+ // 添加水印文字
+ under.endText();
+ under.setLineWidth(1f);
+ under.stroke();
+ }
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ log.error(e.getMessage());
+
+ } catch (DocumentException e) {
+ e.printStackTrace();
+ log.error(e.getMessage());
+
+ } finally {
+ try {
+ stamper.close();
+ if (os != null) {
+ os.close();
+ }
+ if (reader != null) {
+ reader.close();
+ }
+ } catch (DocumentException e) {
+ e.printStackTrace();
+ log.error(e.getMessage());
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ log.error(e.getMessage());
+ }
+ }
+ return new File(newFilePath);
+ }
}
diff --git a/jero-boot/jero-boot-single-startup/src/main/resources/static/times.ttf b/jero-boot/jero-boot-single-startup/src/main/resources/static/times.ttf
new file mode 100644
index 000000000..f71d84abc
Binary files /dev/null and b/jero-boot/jero-boot-single-startup/src/main/resources/static/times.ttf differ