2016-11-15 16 views
7

Mam plik rtf, który ma jakiś tekst z kulami, jak pokazano na zrzucie ekranu poniżejJak czytać kule z pliku RTF

enter image description here

chcę wyodrębnić dane wraz z nabojami, ale podczas drukowania w konsoli dostaję niepotrzebne wartości. Jak wydrukować dokładnie to samo z konsoli. Sposób starałem się jak poniżej

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

konsoli:

enter image description here

I zakładanej wartości śmieci są spowodowane nie pocieszam wspieranie chareset więc starałem się wygenerować plik PDF, ale w pdf także Otrzymuję te same niepotrzebne wartości. jest to kod 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

Zamiast pisać do czegoś tak złożonego, jak plik PDF, napisz to samo, co wyjście konsoli do zwykłego pliku tekstowego UTF-8, a następnie zrzutu szesnastkowego, aby zobaczyć rzeczywiste wartości, które są zapisywane. –

+0

Usunąłem tag 'itext' (edytuj oczekującą zgodę moderatora), ponieważ twoje pytanie nie dotyczy iText. Chodzi o RTF. Stephen ma absolutną rację. Podziel swój problem, najpierw upewnij się, że działa on w konsoli, zanim zaczniesz myśleć o pliku PDF. –

+0

Myślę, że próbował zmienić pdf, aby obejść problem, to nie jest jego ostateczny cel. – Asoub

Odpowiedz

6

Wbrew temu, co pan powiedział, wydaje mi się, że jest to problem kodowania konsola.

Zresztą można łatwo sprawdzić:

Wystarczy zastąpić ten wiersz:

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

Z tych 2 linii:

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

To wymusi kodowanie konsoli UTF-8.

Jeśli nadal jest źle, podejrzewam, że plik nie jest w pełni zgodny z rtf.


Zrobiłem kilka testów i kod działa dobrze (konsola jeden, nie próbowałem pdf) pod Linuksem, ale konsola jest natywnie w UTF-8.