2016-11-15 53 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。