【问题标题】:Problems parsing a table inside an RTF file using Apache Tika使用 Apache Tika 解析 RTF 文件中的表时出现问题
【发布时间】:2012-04-27 13:45:15
【问题描述】:

我正在尝试使用 Apache Tika 解析 RTF 文件。在文件里面有一个表 几列。

问题是解析器写出结果时没有任何信息,值在哪一列。

我现在正在做的是:

AutoDetectParser adp = new AutoDetectParser(tc);
Metadata metadata = new Metadata();
String mimeType = new Tika().detect(file);
metadata.set(Metadata.CONTENT_TYPE, mimeType);
BodyContentHandler handler = new BodyContentHandler();

InputStream fis = new FileInputStream(file);

adp.parse(fis, handler, metadata, new ParseContext());

fis.close();
System.out.println(handler.toString());

它有效,但我需要了解元信息。

是否已经有一个 Handler 可以输出类似 HTML 的内容,并且具有读取的 RTF 文件的结构?

【问题讨论】:

  • 如果您想要 HTML 版本,为什么不向 Tika 询问 XHTML 版本,而是仅询问纯文本内容?
  • 也许我是盲人,你必须为我谷歌它! :) 我找不到如何解决这个问题。据我了解,您必须使用(或编写自己的)ContentHandler。这是某种 SAXEventHandler...

标签: java parsing rtf apache-tika


【解决方案1】:

我建议不要向 Tika 询问纯文本版本,然后想知道所有漂亮的 HTML 信息都去了哪里,而只是向 Tika 询问作为 XHTML 的文档。然后,您将能够处理它以在您的 RTF 文件中找到您想要的信息

如果您查看 Tika 示例或 Tika 单元测试,您会看到相同的模式,以便轻松获取 XHTML 输出

    Metadata metadata = new Metadata();

    StringWriter sw = new StringWriter();
    SAXTransformerFactory factory = (SAXTransformerFactory)
             SAXTransformerFactory.newInstance();
    TransformerHandler handler = factory.newTransformerHandler();
    handler.getTransformer().setOutputProperty(OutputKeys.METHOD, "xml");
    handler.getTransformer().setOutputProperty(OutputKeys.INDENT, "no");
    handler.setResult(new StreamResult(sw));

    parser.parse(input, handler, metadata, new ParseContext());

    String xhtml = sw.toString();

【讨论】:

  • 感谢您的提示!现在我知道如何将它输出为 XHTML。 :) 问题仍然是,一行的空列没有显示为 - 例如一个空的

    标记。我想你无法做到这一点。 XHTML 文件显示的内容与纯文本文件加标签相同。但再次感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-07
  • 1970-01-01
相关资源
最近更新 更多