如何从RTF文件中读取项目符号

时间:2016-11-15 18:36:34

标签: java rtf

我有一个rtf文件,其中包含一些带有项目符号的文本,如下面的屏幕截图所示

enter image description here

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

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

1 个答案:

答案 0 :(得分: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。

我做了一些测试,你的代码运行良好(控制台一个,我没有尝试pdf)在Linux下,但控制台本身是UTF-8。