2016-11-15 16 views
7

Tôi có một file rtf trong đó có một số văn bản với đạn như thể hiện trong hình dưới đâylàm thế nào để đọc đạn từ tập tin RTF

enter image description here

tôi muốn trích xuất các dữ liệu cùng với đạn nhưng khi tôi in trong giao diện điều khiển, tôi nhận được các giá trị rác. Làm cách nào để in chính xác như vậy từ bảng điều khiển. Con đường tôi đã cố gắng như sau

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())); 
} 

điều khiển đầu ra:

enter image description here

tôi cho rằng giá trị rác là do an ủi không hỗ trợ chareset vì vậy tôi đã cố gắng để tạo ra một file pdf nhưng trong pdf cũng Tôi nhận được cùng một giá trị rác. đây là mã 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

Thay vì ghi vào thứ gì đó phức tạp như tệp pdf, hãy viết giống như đầu ra bàn điều khiển của bạn thành tệp văn bản UTF-8 thuần túy, sau đó kết xuất tệp đó để xem các giá trị thực được viết. –

+0

Tôi đã xóa thẻ 'itext' (chỉnh sửa phê duyệt của người kiểm duyệt đang chờ phê duyệt), bởi vì câu hỏi của bạn không phải về iText. Đó là về RTF. Stephen hoàn toàn đúng. Chia nhỏ vấn đề của bạn, trước tiên hãy đảm bảo rằng nó hoạt động trong bảng điều khiển trước khi bạn bắt đầu nghĩ về PDF. –

+0

Tôi nghĩ rằng anh ấy đã cố gắng thay đổi sang pdf để giải quyết vấn đề, đó không phải là mục tiêu cuối cùng của anh ấy. – Asoub

Trả lời

6

Mặc dù những gì bạn đã nói, tôi đoán đó là vấn đề mã hóa bảng điều khiển.

Dù sao bạn có thể dễ dàng kiểm tra xem nó:

Chỉ cần thay thế dòng này:

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

Với những 2 dòng:

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

Điều này sẽ buộc giao diện điều khiển mã hóa sang UTF-8.

Nếu vẫn sai, tôi nghi ngờ tệp của bạn không tuân thủ đầy đủ rtf.


tôi đã thực hiện một số xét nghiệm và mã của bạn hoạt động tốt (một giao diện điều khiển, tôi không thử pdf) dưới Linux, nhưng giao diện điều khiển là tự nhiên trong UTF-8.

Các vấn đề liên quan