fix:修复抽取空文件内容报错

This commit is contained in:
2023-05-25 14:57:50 +08:00
parent 8d3b39e9e3
commit 04a3d4237a
@@ -5,11 +5,11 @@ import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import com.adc.da.report.constant.ReportConstants; import com.adc.da.report.constant.ReportConstants;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hslf.usermodel.HSLFShape; import org.apache.poi.hslf.usermodel.HSLFShape;
import org.apache.poi.hslf.usermodel.HSLFSlide; import org.apache.poi.hslf.usermodel.HSLFSlide;
import org.apache.poi.hslf.usermodel.HSLFTextShape; import org.apache.poi.hslf.usermodel.HSLFTextShape;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xslf.usermodel.XMLSlideShow; import org.apache.poi.xslf.usermodel.XMLSlideShow;
@@ -22,7 +22,6 @@ import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor; import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.hslf.usermodel.HSLFSlideShow; import org.apache.poi.hslf.usermodel.HSLFSlideShow;
import org.apache.poi.hslf.extractor.PowerPointExtractor;
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper; import org.apache.pdfbox.text.PDFTextStripper;
@@ -31,6 +30,7 @@ import org.apache.pdfbox.text.PDFTextStripper;
* *
* @author caihaohan * @author caihaohan
*/ */
@Slf4j
public class FileContentUtil { public class FileContentUtil {
public static String readFileContent(File file) throws IOException { public static String readFileContent(File file) throws IOException {
@@ -39,55 +39,58 @@ public class FileContentUtil {
StringBuilder content = new StringBuilder(); StringBuilder content = new StringBuilder();
FileInputStream fis = new FileInputStream(file); FileInputStream fis = new FileInputStream(file);
try {
switch (fileExtension) { switch (fileExtension) {
case ReportConstants.FILE_EXTENSIONS_XLS: case ReportConstants.FILE_EXTENSIONS_XLS:
HSSFWorkbook workbookXls = new HSSFWorkbook(fis); HSSFWorkbook workbookXls = new HSSFWorkbook(fis);
content = new StringBuilder(readExcelContent(workbookXls)); content = new StringBuilder(readExcelContent(workbookXls));
break; break;
case ReportConstants.FILE_EXTENSIONS_XLSX: case ReportConstants.FILE_EXTENSIONS_XLSX:
XSSFWorkbook workbookXlsx = new XSSFWorkbook(fis); XSSFWorkbook workbookXlsx = new XSSFWorkbook(fis);
content = new StringBuilder(readExcelContent(workbookXlsx)); content = new StringBuilder(readExcelContent(workbookXlsx));
break; break;
case ReportConstants.FILE_EXTENSIONS_DOC: case ReportConstants.FILE_EXTENSIONS_DOC:
HWPFDocument documentDoc = new HWPFDocument(fis); HWPFDocument documentDoc = new HWPFDocument(fis);
WordExtractor extractorDoc = new WordExtractor(documentDoc); WordExtractor extractorDoc = new WordExtractor(documentDoc);
content = new StringBuilder(extractorDoc.getText()); content = new StringBuilder(extractorDoc.getText());
break; break;
case ReportConstants.FILE_EXTENSIONS_DOCX: case ReportConstants.FILE_EXTENSIONS_DOCX:
XWPFDocument documentDocx = new XWPFDocument(fis); XWPFDocument documentDocx = new XWPFDocument(fis);
XWPFWordExtractor extractorDocx = new XWPFWordExtractor(documentDocx); XWPFWordExtractor extractorDocx = new XWPFWordExtractor(documentDocx);
content = new StringBuilder(extractorDocx.getText()); content = new StringBuilder(extractorDocx.getText());
break; break;
case ReportConstants.FILE_EXTENSIONS_PPT: case ReportConstants.FILE_EXTENSIONS_PPT:
HSLFSlideShow ppt = new HSLFSlideShow(fis); HSLFSlideShow ppt = new HSLFSlideShow(fis);
for (HSLFSlide slide : ppt.getSlides()) { for (HSLFSlide slide : ppt.getSlides()) {
for (HSLFShape shape : slide.getShapes()) { for (HSLFShape shape : slide.getShapes()) {
if (shape instanceof HSLFTextShape) { if (shape instanceof HSLFTextShape) {
HSLFTextShape textShape = (HSLFTextShape) shape; HSLFTextShape textShape = (HSLFTextShape) shape;
content.append(textShape.getText()).append("\n"); content.append(textShape.getText()).append("\n");
}
} }
} }
} break;
break; case ReportConstants.FILE_EXTENSIONS_PPTX:
case ReportConstants.FILE_EXTENSIONS_PPTX: XMLSlideShow pptx = new XMLSlideShow(fis);
XMLSlideShow pptx = new XMLSlideShow(fis); for (XSLFSlide slide : pptx.getSlides()) {
for (XSLFSlide slide : pptx.getSlides()) { for (XSLFShape shape : slide.getShapes()) {
for (XSLFShape shape : slide.getShapes()) { if (shape instanceof XSLFTextShape) {
if (shape instanceof XSLFTextShape) { XSLFTextShape textShape = (XSLFTextShape) shape;
XSLFTextShape textShape = (XSLFTextShape) shape; content.append(textShape.getText()).append("\n");
content.append(textShape.getText()).append("\n"); }
} }
} }
} break;
break; case ReportConstants.FILE_EXTENSIONS_PDF:
case ReportConstants.FILE_EXTENSIONS_PDF: PDDocument document = PDDocument.load(fis);
PDDocument document = PDDocument.load(fis); PDFTextStripper stripper = new PDFTextStripper();
PDFTextStripper stripper = new PDFTextStripper(); content = new StringBuilder(stripper.getText(document));
content = new StringBuilder(stripper.getText(document)); default:
default: }
} catch (Exception e) {
fis.close();
log.info("文件内容抽取失败,原因可能是上传的文件为空文件");
} }
fis.close();
return content.toString(); return content.toString();
} }