From 3c4fee1db116c11d4f04727cfe076d7c94daeaf2 Mon Sep 17 00:00:00 2001
From: yanzhaofeige <yanzhaofeige@qq.com>
Date: Mon, 30 Sep 2024 12:10:57 +0800
Subject: [PATCH] init

---
 cpzidc-common/src/main/java/com/odcc/cpzidc/common/utils/PdfUtils.java |   89 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 89 insertions(+), 0 deletions(-)

diff --git a/cpzidc-common/src/main/java/com/odcc/cpzidc/common/utils/PdfUtils.java b/cpzidc-common/src/main/java/com/odcc/cpzidc/common/utils/PdfUtils.java
new file mode 100644
index 0000000..00ad7f7
--- /dev/null
+++ b/cpzidc-common/src/main/java/com/odcc/cpzidc/common/utils/PdfUtils.java
@@ -0,0 +1,89 @@
+package com.odcc.cpzidc.common.utils;
+
+import com.odcc.cpzidc.common.utils.uuid.UUID;
+import org.apache.pdfbox.io.RandomAccessBufferedFileInputStream;
+import org.apache.pdfbox.io.RandomAccessRead;
+import org.apache.pdfbox.pdfparser.PDFParser;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.*;
+
+public class PdfUtils {
+
+    /**
+     * 获取不带扩展名的文件名
+     */
+    public static String getFileNameNoSuffix(String filename) {
+        if ((filename != null) && (filename.length() > 0)) {
+            int dot = filename.lastIndexOf('.');
+            if ((dot > -1) && (dot < (filename.length()))) {
+                return filename.substring(0, dot);
+            }
+        }
+        return filename;
+    }
+
+    /**
+     * 获取文件扩展名
+     */
+    public static String getSuffixNameName(String filename) {
+        if ((filename != null) && (filename.length() > 0)) {
+            int dot = filename.lastIndexOf('.');
+            if ((dot > -1) && (dot < (filename.length() - 1))) {
+                return filename.substring(dot + 1);
+            }
+        }
+        return filename;
+    }
+
+
+    /**
+     * File转MultipartFile
+     *
+     * @param mulFile 文件对象
+     * @return Multipart文件对象
+     */
+    public static File multipartFileToFile(MultipartFile mulFile) throws IOException {
+        InputStream ins = mulFile.getInputStream();
+        String fileName = mulFile.getOriginalFilename();
+        String prefix = getFileNameNoSuffix(fileName) + UUID.randomUUID().toString();
+        String suffix = "." + getSuffixNameName(fileName);
+        File toFile = File.createTempFile(prefix, suffix);
+        OutputStream os = new FileOutputStream(toFile);
+        int bytesRead = 0;
+        byte[] buffer = new byte[8192];
+        while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
+            os.write(buffer, 0, bytesRead);
+        }
+        os.close();
+        ins.close();
+        return toFile;
+    }
+
+
+    /**
+     * 校验pdf文件是否包含js脚本
+     **/
+    public static boolean containsJavaScript(File file) throws IOException {
+
+        FileInputStream in = null;
+        in =  new FileInputStream(file);
+        RandomAccessRead randomAccessRead = new RandomAccessBufferedFileInputStream(in);
+        try {
+            PDFParser parser = new PDFParser(randomAccessRead);
+            parser.parse();
+            PDDocument doc = parser.getPDDocument();
+            String CosName = doc.getDocument().getTrailer().toString();
+            if (CosName.contains("COSName{JavaScript}") || CosName.contains("COSName{JS}")) {
+                return true;
+            }
+        } catch (Exception e) {
+            //log.error("PDF效验异常:" + e.getMessage());
+            return true;
+        } finally {
+            in.close();
+        }
+        return false;
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3