Java中将RTF转换为纯文本

11

如何在Java中将RTF字符串转换为纯文本? 显而易见的答案是使用Swing的RTFEditorKit,这似乎是互联网上常见的答案。 但是,声称返回纯文本的write方法实际上没有实现... 在Java6中它被硬编码为只抛出一个IOException。

4个回答

21

我在Java 6中使用Swing的RTFEditorKit,如下所示:

RTFEditorKit rtfParser = new RTFEditorKit();
Document document = rtfParser.createDefaultDocument();
rtfParser.read(new ByteArrayInputStream(rtfBytes), document, 0);
String text = document.getText(0, document.getLength());

那就可以了。


使用这个解决方案,我终于让它工作了,尽管一开始也没有成功。原来我的输入数据是无效的,转换失败但却悄无声息地返回了一个空字符串。 - edm3
1
它对我有效,但由于某种原因,文本中出现了丢失的字符。 - george_h
它在Windows平台上运行良好,但对于*nix平台,它与X11窗口服务器有依赖关系。 - Valijon
它不能与“\line”代码一起使用。 - Ekaterina Ivanova iceja.net

6

3
Tika在后端使用“RTFEditorKit”。 - ggarciao
Tika只是用于纯文本和元数据,我说得对吗? - Xelian

2
您可能会考虑使用RTF Parser Kit作为Swing RTFEditorKit的轻量级替代方案。下面一行显示了从RTF文件中提取纯文本。该RTF文件从输入流读取,提取的文本被写入输出流。
new StreamTextConverter().convert(new RtfStreamSource(inputStream), outputStream, "UTF-8");

(全面披露:我是RTF解析工具包的作者)

干得好!但是,“Kotlin: 未解决的引用:MyRtfListener”。 - Ekaterina Ivanova iceja.net
这是否意味着我必须自己实现IRtfListener? - Ekaterina Ivanova iceja.net
@CatherineIvanova,上面的一行示例将为您提取纯文本...无需实现监听器。我认为您对MyRtfListener的引用来自RTF解析器工具包自述文件,该文件说明了您需要提供自己的监听器的情况。 - Jon Iles
@JonIles 感谢你的解析器项目!你能否也看一下这个问题 https://dev59.com/m8n6oIgBc1ULPQZFaXup ? - yaylitzis

0

这里是将RTF解析并写入纯文本的完整代码

    import java.io.FileInputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.Document;
    import javax.swing.text.rtf.RTFEditorKit;

    public class rtfToJson {
    public static void main(String[] args)throws IOException, BadLocationException {
    // TODO Auto-generated method stub
    RTFEditorKit rtf = new RTFEditorKit();
    Document doc = rtf.createDefaultDocument();

    FileInputStream fis = new FileInputStream("C:\\SampleINCData.rtf");
    InputStreamReader i =new InputStreamReader(fis,"UTF-8");
    rtf.read(i,doc,0);
   // System.out.println(doc.getText(0,doc.getLength()));
    String doc1 = doc.getText(0,doc.getLength());


    try{    
           FileWriter fw=new FileWriter("B:\\Sample INC Data.txt");    
           fw.write(doc1);    
           fw.close();    
          }catch(Exception e)
    {
              System.out.println(e);
              }    
          System.out.println("Success...");    
     }    

    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接