当前位置: 首页 > 知识库问答 >
问题:

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

勾喜
2023-03-14

原因: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));
        }
    }
}

共有1个答案

严琨
2023-03-14

只有在您已经知道文件是什么以及该文件类型的最佳解析器是什么的情况下,才应该调用显式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);
 类似资料:
  • 问题内容: 假设我有以下jQuery AJAX调用: 现在,当进行此AJAX调用时,我希望服务器端代码通过一些错误处理检查来运行(例如,用户是否仍在登录,他们是否有权使用此调用,数据是否有效,等等)。如果检测到错误,如何将错误消息冒泡回客户端? 我最初的想法是返回一个带有两个字段的JSON对象:error和errorMessage。然后将在jQuery AJAX调用中检查以下字段: 这对我来说有点

  • 我使用Java Apache POI()访问Excel电子表格。我得到以下错误:

  • 我有一个场景,文件有不同的类型。文件分为页眉、正文和页脚三部分。标题可以是2类型dipend,根据标题大小,我需要使用标记器和范围来解析内容。 页脚也一样,这取决于正文大小和页脚长度,需要解析页脚内容。 我查看了PatternMatchingCompositeLineMapper和fixedlenghttokenizer,但没有找到为范围指定条件的方法,也没有找到在页脚中共享正文内容以检查长度的方

  • 问题内容: 我对Node.js并不陌生,尽管我通常对JavaScript非常熟悉。我的问题是关于如何处理node.js中的错误的“最佳实践”。 通常,在对Web服务器,FastCGI服务器或各种语言的网页进行编程时,我在多线程环境中使用带有阻止处理程序的Exceptions。当有请求进入时,我通常会执行以下操作: 这样,我始终可以处理内部错误并向用户发送有效响应。 我知道使用node.js可以执行

  • 一些背景信息:这个项目是一个简单的图像,在项目结束时,它将成为我电脑屏幕的背景。 我想模糊背景的一部分,这样文本的一部分就更清晰了。我可以模糊图像中文本本身的部分,但这是我最后的选择。我不想这样做,因为在未来的项目中,我想随着一些东西的移动而主动模糊背景(我还没有开始这个未来的项目,所以我无法更好地描述这个项目)。 有人知道如何模糊背景的一部分吗?对于这个项目,它需要大约400x200像素,模糊1

  • 我遇到了一个问题,我无法在我的资源中获取我的表单,变量总是为空 我的资源: 表单模型 我的取货请求: 和我的HttpClient: 为了确保我正在使用代理进行测试并且请求实际上是好的:变量文件名和徽标始终为空。 这是我的绒球.xml: 我不知道问题出在哪里。 我已经看过了多部分的官方resteasy文档,看不出问题在哪里。我已经用MultipartFormDataInput测试过,所有部分都是空的