Browse Source

增加全宗号筛选条件

刘嘉伟 3 years ago
parent
commit
219109f74e

+ 84 - 0
src/main/java/com/gz/utils/WatermarkUtils.java

@@ -0,0 +1,84 @@
+package com.gz.utils;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.system.SystemUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPage;
+import org.apache.pdfbox.pdmodel.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.PDResources;
+import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDType0Font;
+import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState;
+import org.apache.pdfbox.util.Matrix;
+import org.apache.tomcat.util.http.fileupload.FileUtils;
+import org.apache.tomcat.util.http.fileupload.IOUtils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+@Slf4j
+public class WatermarkUtils {
+
+    /**
+     * 给pdf增加水印
+     *
+     * @author LiuChangLan
+     * @since 2022/2/24 15:42
+     */
+    public static void generateWatermarkPdf(String pdfFilePath, String newPdfPath, String watermarkContent) {
+        log.info("水印生成 原文件:{} 生成后文件:{} 水印内容:{}", pdfFilePath, newPdfPath, watermarkContent);
+        File pdfFile = FileUtil.file(pdfFilePath);
+        PDDocument pdf = null;
+        try {
+            //打开pdf文件
+            pdf = PDDocument.load(pdfFile);
+            pdf.setAllSecurityToBeRemoved(true);
+            for (PDPage page : pdf.getPages()) {
+                PDPageContentStream cs = new PDPageContentStream(pdf, page, PDPageContentStream.AppendMode.APPEND, true, true);
+                String ts = watermarkContent;
+                //引入字体文件 解决中文汉字乱码问题
+                PDFont font = null;
+                if (SystemUtil.getOsInfo().isWindows()) {
+                    font = PDType0Font.load(pdf, new FileInputStream("C:\\Windows\\Fonts\\STLITI.TTF"), true);
+                } else {
+                    font = PDType0Font.load(pdf, new FileInputStream("/data/project/STLITI.TTF"), true);
+                }
+                float fontSize = 26;
+                PDResources resources = page.getResources();
+                PDExtendedGraphicsState r0 = new PDExtendedGraphicsState();
+                // 水印透明度
+                r0.setNonStrokingAlphaConstant(0.2f);
+                r0.setAlphaSourceFlag(true);
+                cs.setGraphicsStateParameters(r0);
+                //水印颜色
+                cs.setNonStrokingColor(153, 153, 153);
+                cs.beginText();
+                cs.setFont(font, fontSize);
+                //根据水印文字大小长度计算横向坐标需要渲染几次水印
+                float h = ts.length() * fontSize;
+                for (int i = 0; i <= 5; i++) {
+                    // 获取旋转实例
+                    cs.setTextMatrix(Matrix.getRotateInstance(-150, i * 220, 0));
+                    cs.showText(ts);
+                    for (int j = 0; j < 10; j++) {
+                        cs.setTextMatrix(Matrix.getRotateInstance(-150, i * 220, j * h * 2));
+                        cs.showText(ts);
+                    }
+                }
+                cs.endText();
+                cs.restoreGraphicsState();
+                cs.close();
+                pdf.save(newPdfPath);
+
+            }
+        } catch (IOException e) {
+            log.error("pdf生成水印失败", e);
+            throw new RuntimeException("pdf生成水印失败");
+        } finally {
+            IoUtil.close(pdf);
+        }
+    }
+}

+ 6 - 3
src/main/resources/static/page/archive/show.html

@@ -116,6 +116,7 @@
     </div>
 </div>
 <input id="archive_id" name="archive_id" type="hidden">
+<script src="../../js/lay-module/utils/base64.min.js"></script>
 <script src="../../lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
 <script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
 <script>
@@ -176,11 +177,13 @@
                     }
                     for (let i = 0; i < res.data.length; i++) {
                         let item = res.data[i]
+                        let pef_src = 'http://66.1.21.158:8012/onlinePreview?officePreviewType=pdf&disabledownload=true&url=' + encodeURIComponent(Base64.encode('http://66.1.21.158:9091/' + item.filePath + '/' + item.fileName))
                         if (i == 0) {
-                            html += '<li class="layui-bg-green"><a title="' + (i + 1) + '、' + (item.jnml ? item.jnml : '档案文件') + '" pdf_src="' + item.filePath + '/' + item.fileName + '">' + (i + 1) + '、' + (item.jnml ? item.jnml : '档案文件') + '</a></li>'
-                            $("#pdf_show").prop('src', item.filePath + '/' + item.fileName)
+                            html += '<li class="layui-bg-green"><a title="' + (i + 1) + '、' + (item.jnml ? item.jnml : '档案文件') + '" pdf_src="' + pef_src + '">' + (i + 1) + '、' + (item.jnml ? item.jnml : '档案文件') + '</a></li>'
+                            // let pef_src = 'http://66.1.21.158:8012/onlinePreview?officePreviewType=pdf&url=' + encodeURIComponent(Base64.encode('http://fit.zju.edu.cn/_upload/article/files/42/e5/4ad6f5a54563869e08dea8066b3d/df728b53-f325-4073-9057-87ff3d75b6ca.pdf'))
+                            $("#pdf_show").prop('src', pef_src)
                         } else {
-                            html += '<li><a title="' + (i + 1) + '、' + (item.jnml ? item.jnml : '档案文件') + '" pdf_src="' + item.filePath + '/' + item.fileName + '">' + (i + 1) + '、' + (item.jnml ? item.jnml : '档案文件') + '</a></li>'
+                            html += '<li><a title="' + (i + 1) + '、' + (item.jnml ? item.jnml : '档案文件') + '" pdf_src="' + pef_src + '">' + (i + 1) + '、' + (item.jnml ? item.jnml : '档案文件') + '</a></li>'
                         }
                     }
                     $("#file_list").append(html)

+ 60 - 70
src/test/java/com/gz/WatermarkPdf.java

@@ -1,70 +1,60 @@
-//package com.gz;
-//
-//import com.spire.pdf.PdfDocument;
-//import com.spire.pdf.PdfPageBase;
-//import com.spire.pdf.graphics.*;
-//
-//import java.awt.*;
-//import java.awt.geom.Dimension2D;
-//import java.awt.geom.Point2D;
-//import java.awt.geom.Rectangle2D;
-//
-//public class WatermarkPdf {
-//
-//
-//    public static void main(String[] args)
-//    {
-//        //加载PDF文档
-//        PdfDocument pdf = new PdfDocument();
-//        pdf.loadFromFile("D:\\Program Files (x86)\\Tencent\\WeChat\\WeChat_DATA\\WeChat Files\\wxid_p52tn1dpq62f22\\FileStorage\\File\\2021-11\\自检情况报告(南苑街道).pdf");
-//
-//        //调用AddImageWatermark方法给PDF第一页添加图片水印
-////        AddImageWatermark(pdf.getPages().get(0), "H:\\Pictures\\20210615105005_4d1f0.jpg");
-//
-//        //调用AddTextWatermark方法给PDF第二页添加文字水印
-//        AddTextWatermark(pdf.getPages().get(0), "测试水印");
-//
-//        //保存
-//        pdf.saveToFile("H:\\Desktop\\Watermark.pdf");
-//        //关闭
-//        pdf.close();
-//    }
-//    /**
-//     * @param page
-//     * 要添加水印的页面
-//     * @param imageFile
-//     * 水印图片路径
-//     */
-//    static void AddImageWatermark(PdfPageBase page, String imageFile)
-//    {
-//        page.setBackgroundImage(imageFile);
-//        Rectangle2D rect = new Rectangle2D.Float();
-//        rect.setFrame(page.getClientSize().getWidth()/2 - 100, page.getClientSize().getHeight()/2 - 100, 200, 200);
-//        page.setBackgroundRegion(rect);
-//    }
-//
-//    /**
-//     * @param page
-//     * 要添加水印的页面
-//     * @param textWatermark
-//     * 水印文字
-//     */
-//    static void AddTextWatermark(PdfPageBase page, String textWatermark)
-//    {
-//        Dimension2D dimension2D = new Dimension();
-//        dimension2D.setSize(page.getCanvas().getClientSize().getWidth() / 2, page.getCanvas().getClientSize().getHeight() / 3);
-//        PdfTilingBrush brush = new PdfTilingBrush(dimension2D);
-//        brush.getGraphics().setTransparency(0.3F);
-//        brush.getGraphics().save();
-//        brush.getGraphics().translateTransform((float) brush.getSize().getWidth() / 2, (float) brush.getSize().getHeight() / 2);
-//        brush.getGraphics().rotateTransform(-45);
-//        brush.getGraphics().drawString(textWatermark, new PdfTrueTypeFont(new Font("宋体",Font.PLAIN,30),true), PdfBrushes.getRed(), 0, 0, new PdfStringFormat(PdfTextAlignment.Center));
-//        brush.getGraphics().restore();
-//        brush.getGraphics().setTransparency(1);
-//        Rectangle2D loRect = new Rectangle2D.Float();
-//        loRect.setFrame(new Point2D.Float(0, 0), page.getCanvas().getClientSize());
-//        page.getCanvas().drawRectangle(brush, loRect);
-//    }
-//
-//
-//}
+package com.gz;
+
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPage;
+import org.apache.pdfbox.pdmodel.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.PDResources;
+import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDType0Font;
+import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState;
+import org.apache.pdfbox.util.Matrix;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+public class WatermarkPdf {
+
+
+    public static void main(String[] args) throws IOException {
+        File pdfFile = new File("F:\\错误\\5179-WS2020-001-0000-1145.pdf");
+        //打开pdf文件
+        PDDocument pdf = PDDocument.load(pdfFile);
+        pdf.setAllSecurityToBeRemoved(true);
+        for (PDPage page : pdf.getPages()) {
+            PDPageContentStream cs = new PDPageContentStream(pdf, page, PDPageContentStream.AppendMode.APPEND, true, true);
+            String ts = "刘长兰";
+            //引入字体文件 解决中文汉字乱码问题
+            PDFont font = PDType0Font.load(pdf, new FileInputStream("C:\\Windows\\Fonts\\STLITI.TTF"), true);
+            float fontSize = 26;
+            PDResources resources = page.getResources();
+            PDExtendedGraphicsState r0 = new PDExtendedGraphicsState();
+            // 水印透明度
+            r0.setNonStrokingAlphaConstant(0.2f);
+            r0.setAlphaSourceFlag(true);
+            cs.setGraphicsStateParameters(r0);
+            //水印颜色
+            cs.setNonStrokingColor(153, 153, 153);
+            cs.beginText();
+            cs.setFont(font, fontSize);
+            //根据水印文字大小长度计算横向坐标需要渲染几次水印
+            float h = ts.length() * fontSize;
+            for (int i = 0; i <= 5; i++) {
+                // 获取旋转实例
+                cs.setTextMatrix(Matrix.getRotateInstance(-150, i * 220, 0));
+                cs.showText(ts);
+                for (int j = 0; j < 10; j++) {
+                    cs.setTextMatrix(Matrix.getRotateInstance(-150, i * 220, j * h * 2));
+                    cs.showText(ts);
+                }
+            }
+            cs.endText();
+            cs.restoreGraphicsState();
+            cs.close();
+            pdf.save("F:\\Watermark.pdf");
+        }
+
+    }
+
+
+}