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;
|
}
|
}
|