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