如何在Java中将HTML转换为RTF?

时间:2010-01-19 07:27:01

标签: java

(我正在寻找一个开源库)

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:2)

您可以使用基本Java API RTFEditorKitHTMLEditorKit将HTML转换为RTF。 它不会将<br/><p>等新行标记转换为RTF中的新行字符等效值。我已经为其应用了外部修复程序,如下面的Java代码所示。

private static String convertToRTF(String htmlStr) {

    OutputStream os = new ByteArrayOutputStream();
    HTMLEditorKit htmlEditorKit = new HTMLEditorKit();
    RTFEditorKit rtfEditorKit = new RTFEditorKit();
    String rtfStr = null;

    htmlStr = htmlStr.replaceAll("<br.*?>","#NEW_LINE#");
    htmlStr = htmlStr.replaceAll("</p>","#NEW_LINE#");
    htmlStr = htmlStr.replaceAll("<p.*?>","");
    InputStream is = new ByteArrayInputStream(htmlStr.getBytes());
    try {
        Document doc = htmlEditorKit.createDefaultDocument();
        htmlEditorKit.read(is, doc, 0);
        rtfEditorKit .write(os, doc, 0, doc.getLength());
        rtfStr = os.toString();
        rtfStr = rtfStr.replaceAll("#NEW_LINE#","\\\\par ");
    } catch (IOException e) {
          e.printStackTrace();
        } catch (BadLocationException e) {
          e.printStackTrace();
        }
    return rtfStr;
}

在这里,我将新行等效HTML标记替换为某些特殊字符串,并在RTF中替换回新行代表字符序列 \ par

如果你想使用更有效的API并且你有有效的html,你应该探索Apache-FOP。

Apache FOP可用于转换为RTF。以下是一些有用的链接 -

http://www.torsten-horn.de/techdocs/java-xsl.htm#XSL-FO-Java

http://html2fo.sourceforge.net/index.html