Apache Tika 2.5.0转换RTF表格为HTML失败的问题求助
Apache Tika 2.5.0 RTF转HTML时表格解析异常问题
在使用Apache Tika 2.5.0将RTF格式内容转换为HTML的过程中,遇到RTF表格解析异常的问题:RTF中包含\cellx、\clbrdr、\brdr等标签的表格,被Tika转换为空段落<p></p>,无法正确识别并生成HTML表格结构。
已尝试多种SAX处理器(如Transformer、ToHTMLContentHandler等),均未解决该问题。推测可通过元数据、处理器配置或ParseContext对RTFParser进行定制,但未找到相关配置示例。
以下是当前使用的转换方法代码:
public static void converterRTF2HTML2(File rtfFile, File htmlFile, Charset cpOut) throws TransformerConfigurationException, TikaException, IOException, SAXException { InputStream rtfStream = new FileInputStream(rtfFile); Tika tika = new Tika(); String rtfDetect = tika.detect(rtfFile); // detect as 'application/rtf' Metadata metadata = new Metadata(); metadata.set(Metadata.CONTENT_TYPE, rtfDetect); OutputStream htmlStream = new FileOutputStream(htmlFile); SAXTransformerFactory factory = (SAXTransformerFactory) SAXTransformerFactory.newInstance(); TransformerHandler handler = factory.newTransformerHandler(); handler.getTransformer().setOutputProperty(OutputKeys.METHOD, "xml"); handler.getTransformer().setOutputProperty(OutputKeys.INDENT, "no"); handler.getTransformer().setOutputProperty(OutputKeys.ENCODING, cpOut.name()); handler.setResult(new StreamResult(htmlStream)); ContentHandler handlerToXML = new ToXMLContentHandler(); // handlers that I try ///////////////// ExpandedTitleContentHandler handler1 = new ExpandedTitleContentHandler(handler); //TaggedContentHandler handler1 = new TaggedContentHandler(handler); //TextAndAttributeContentHandler handler2 = new TextAndAttributeContentHandler(handler); ToHTMLContentHandler toHTMLContentHandler = new ToHTMLContentHandler(htmlStream, "UTF-8"); //XHTMLContentHandler toXHTMLContentHandler = new XHTMLContentHandler(toHTMLContentHandler, metadata); //RichTextContentHandler handler1 = new RichTextContentHandler(rtfStream); /////////////////// ParseContext context = new ParseContext(); //RTFParser parser = new RTFParser(); Parser parser = tika.getParser(); parser.parse(rtfStream, handler1, metadata, context); htmlStream.flush(); rtfStream.close(); htmlStream.close(); }
已尝试切换不同的处理器和解析器,问题仍未解决。
内容的提问来源于stack exchange,提问作者Pavel Cikota
相关产品推荐
相关产品推荐

