2016-11-15 52 views
7

我有其中有一些文字子弹如截图所示下面如何读取RTF文件子弹

enter image description here

一个RTF文件,我想和子弹一起提取数据,但是当我打印在控制台中,我得到垃圾值。如何从控制台完全打印相同的内容。 我尝试的方法是如下

public static void main(String[] args) throws IOException, BadLocationException { 
    RTFEditorKit rtf = new RTFEditorKit(); 
    Document doc = rtf.createDefaultDocument(); 

    FileInputStream fis = new FileInputStream("C:\\Users\\Guest\\Desktop\\abc.rtf"); 
    InputStreamReader i =new InputStreamReader(fis,"UTF-8"); 
    rtf.read(i,doc,0); 
    System.out.println(doc.getText(0,doc.getLength())); 
} 

控制台输出:

enter image description here

我认为垃圾值是由于操作台不支持chareset所以我试图生成一个PDF文件,但在PDF也我得到相同的垃圾值。 这是PDF的代码

Paragraph de=new Paragraph(); 
      Phrase pde=new Phrase(); 
      pde.add(new Chunk(getText("C:\\Users\\Guest\\Desktop\\abc.rtf"),smallNormal_11)); 
      de.add(pde); 

      de.getFont().setStyle(BaseFont.IDENTITY_H); 
      document.add(de); 
public static String getText() throws IOException, BadLocationException { 
     RTFEditorKit rtf = new RTFEditorKit(); 
     Document doc = rtf.createDefaultDocument(); 

     FileInputStream fis = new FileInputStream("C:\\Users\\Guest\\Desktop\\abc.rtf"); 
     InputStreamReader i =new InputStreamReader(fis,"UTF-8"); 
     rtf.read(i,doc,0); 
     String output=doc.getText(0,doc.getLength()); 
return output; 
    } 
+2

不是写成像PDF文件那样复杂的东西,而是将与控制台输出相同的东西写入普通的UTF-8文本文件,然后十六进制转储该文件以查看正在写入的实际值。 –

+0

我删除了'itext'标签(编辑待审核者批准),因为你的问题不是关于iText的。这是关于RTF。斯蒂芬绝对是对的。分解你的问题,首先确保它在控制台中工作,然后再开始考虑PDF。 –

+0

我认为他试图改为pdf来解决问题,这不是他的最终目标。 – Asoub

回答

6

尽管你说的话,我的猜测是,它是一个控制台编码的问题。

反正你可以很容易地检查:

只需更换这行:

System.out.println(doc.getText(0,doc.getLength())); 

有了这两条线:

PrintStream ps = new PrintStream(System.out, true, "UTF-8"); 
    ps.println(doc.getText(0,doc.getLength())); 

这将迫使控制台编码设置为UTF-8。

如果它仍然是错误的,我会怀疑你的文件不完全rtf兼容。


我做了一些测试,你的代码工作以及Linux下(控制台一个,我没有尝试的PDF格式),但控制台是在本地UTF-8。