Ошибка Java InputStreamReader (org.apache.poi.openxml4j.exceptions.InvalidOperationException)

Я пытаюсь преобразовать файлы pptx в текст (извлечение текста) с помощью Apache POI Framework (Java). Я новичок в кодировании Java, поэтому я не знаю много о Buffered Readers/InputStream и т. Д.

То, что я пытался это:

import org.apache.poi.xslf.XSLFSlideShow;
import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor;
import org.apache.poi.xslf.usermodel.XMLSlideShow;    

... Classes and Stuff ....

String inputfile = "X:\\Master\\simpl_temp\\2d0a44a2-95e7-428c-911c-1f803acbff42.pptx";
InputStream fis = new FileInputStream(inputfile);
BufferedReader br1 = new BufferedReader(new InputStreamReader(fis));
String fileName = br1.readLine();

System.out.println(new XSLFPowerPointExtractor(new XMLSlideShow(new XSLFSlideShow(fileName))).getText());
br1.close();

Моя цель состоит в том, чтобы записать извлеченный текст в переменную, но это даже не работает, чтобы напечатать его на консоли... То, что я получаю, это:

org.apache.poi.openxml4j.exceptions.InvalidOperationException: Can't open the specified file: 'PK
org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:102)
org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:199) 
org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:178) 
org.apache.poi.POIXMLDocument.openPackage(POIXMLDocument.java:69) 
org.apache.poi.xslf.XSLFSlideShow.<init>(XSLFSlideShow.java:90) 

Любая помощь будет принята с благодарностью!

2 ответа

Решение

Я не могу дать вам правильный ответ (потому что я сам не использую POI), но я могу сказать вам, где может быть ваша ошибка. Конструктор класса XSLFSlideShow ожидает путь к файлу в качестве аргумента. Но вы передаете InputStream. Попробуйте это следующим образом:

String filePath = "X:\\Master\\simpl_temp\\2d0a44a2-95e7-428c-911c-1f803acbff42.pptx";
System.out.println(new XSLFPowerPointExtractor(new XMLSlideShow(new XSLFSlideShow(filePath))).getText());

Вы многое делаете для многих, на самом деле вы пытаетесь прочитать данные самого PPTX как имя файла, лучше просто используйте

System.out.println(new XSLFPowerPointExtractor(
    new XMLSlideShow(new XSLFSlideShow(
    "X:\\Master\\simpl_temp\\2d0a44a2-95e7-428c-911c-1f803acbff42.pptx"))).getText());

или более общий

POITextExtractor extractor = ExtractorFactory.createExtractor(
    new java.io.File("X:\\Master\\simpl_temp\\2d0a44a2-95e7-428c-911c-1f803acbff42.pptx"");
System.out.println(extractor.getText());
extractor.close();
Другие вопросы по тегам