Tika解析错误:您正在调用POI中处理OOXML的部分。您需要调用POI的其他部分来处理此数据

问题描述 投票:0回答:1

我想用Tika解析.doc文件,但是它不起作用。

我得到的错误是:

原因:org.apache.poi.openxml4j.exceptions.OLE2NotOfficeXmlFileException:提供的数据似乎是OLE2格式。您正在调用POI中涉及OOXML(Office Open XML)文档的部分。您需要调用POI的其他部分来处理此数据(例如,用HSSF代替XSSF)

我到底需要更改什么?

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.microsoft.ooxml.OOXMLParser;
import org.apache.tika.sax.BodyContentHandler;

import org.xml.sax.SAXException;

public class TikaDocx {

    public static void main(final String[] args) throws IOException, TikaException, SAXException {

        //detecting the file type
        BodyContentHandler handler = new BodyContentHandler();
        Metadata metadata = new Metadata();
        FileInputStream inputstream = new FileInputStream(new File("C:\\test.doc"));
        ParseContext pcontext = new ParseContext();

        //OOXml parser
        OOXMLParser  msofficeparser = new OOXMLParser ();
        msofficeparser.parse(inputstream, handler, metadata,pcontext);
        System.out.println("Contents of the document:" + handler.toString());
        System.out.println("Metadata of the document:");
        String[] metadataNames = metadata.names();

        for(String name : metadataNames) {
            System.out.println(name + ": " + metadata.get(name));
        }
    }
}
java apache-tika
1个回答
0
投票

如果您已经知道文件是什么以及该文件类型的最佳解析器,则应该仅调用显式的Apache Tika解析器,例如OOXMLParser

您收到的错误告诉您正在将基于OLE2的.doc解析器传递给Apache Tika解析器,以处理诸如.docx之类的OOXML文件>

您似乎不知道文件类型的确切位置,而应该让Apache Tika识别类型+选择最适合您的解析器

为此,请更改当前的显式行

    OOXMLParser  msofficeparser = new OOXMLParser ();
    msofficeparser.parse(inputstream, handler, metadata,pcontext);

自动检测一个>]

    AutoDetectParser parser = new AutoDetectParser();
    parser.parse(inputstream, handler, metadata, pcontext);

然后让Tika为您完成艰苦的工作!

© www.soinside.com 2019 - 2024. All rights reserved.