如何提取rtf表



我有一个rtf文件。它里面有很多表。我一直在尝试使用java(POI和tika)来提取这些表。在定义表的.doc中,这很容易。然而,在rtf文件中,似乎没有任何"这是一个表"标记作为元数据的一部分。有人知道从这样的文件中提取表的最佳策略是什么吗?将其转换为其他文件格式将有帮助。有什么线索让我查一下吗?

有一个名为unrtf的linux工具,看看手动

使用该应用程序,您可以将您的rtf文件转换为html:

unrtf --html your_input_file.rtf > your_output_file.html

现在,您可以使用任何编程api来操作html/xml并轻松提取表。你需要的够吗?

感谢何新的回答。最后,我可以使用Tika,方法是使用TXTParser,然后将粗体标记之间的所有段(这就是我的表的分隔方式)放入一个数组列表中。我不得不使用选项卡分隔符来定义表。以下是没有根据选项卡提取表的位的代码(仍在使用):

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.metadata.TikaCoreProperties;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.html.HtmlParser;
import org.apache.tika.parser.rtf.RTFParser;
import org.apache.tika.parser.txt.TXTParser;
import org.apache.tika.sax.BodyContentHandler;
import org.xml.sax.SAXException;

public class TextParser {
public static void main(final String[] args) throws IOException,TikaException{
 //detecting the file type
 BodyContentHandler handler = new BodyContentHandler(-1);
 Metadata metadata = new Metadata();
 FileInputStream inputstream = new FileInputStream(new File("/Users/mydoc.rtf"));
 ParseContext pcontext = new ParseContext();
 //Text document parser
 TXTParser TXTParser = new TXTParser();
 try {
     TXTParser.parse(inputstream, handler, metadata,pcontext);
} catch (SAXException e) {
    e.printStackTrace();
} 
 String s=handler.toString();
Pattern pattern = Pattern.compile("(\\b\\f1\\fs24.+?\\par .+?)\\b\\f1\\fs24.*?\{\\",Pattern.DOTALL);
Matcher matcher = pattern.matcher(s);
ArrayList<String> arr= new ArrayList<String>();
while (matcher.find()) {
       arr.add(matcher.group(1));
     }
 for(String name : arr){
     System.out.println("The array number is: "+arr.indexOf(name)+" nn "+name);
 }
 }
}

最新更新