【问题标题】:Java InputStreamReader Error (org.apache.poi.openxml4j.exceptions.InvalidOperationException)Java InputStreamReader 错误 (org.apache.poi.openxml4j.exceptions.InvalidOperationException)
【发布时间】:2016-03-18 11:38:46
【问题描述】:

我正在尝试使用 Apache POI 框架 (Java) 将 pptx 文件转换为 txt(文本提取)。 我是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) 

任何帮助将不胜感激!

【问题讨论】:

    标签: java apache-poi inputstream text-extraction bufferedstream


    【解决方案1】:

    你做的太多了,实际上你正在尝试读取 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();
    

    【讨论】:

      【解决方案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());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-16
        • 2015-08-12
        • 2014-09-22
        • 2014-04-08
        • 2011-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多