javax.swing.text.rtf.RTFEditorKit/RTF 是一种 8 位格式

标签 java swing htmleditorkit

我需要一个简单的 HTML2RTF 转换器 我尝试运行以下代码...但我收到此代码示例的错误

代码:

import java.io.ByteArrayInputStream;
import java.io.StringWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.text.Document;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.rtf.RTFEditorKit;

public class converter {
    private static Pattern htmlTrimPattern = Pattern.compile(".*<body>(.*)</body>.*", Pattern.DOTALL);

    public static void main(String[] args)
    {


        toRtf("<!DOCTYPE html>\n" +
                "<html>\n" +
                "<body>\n" +
                "\n" +
                "<h1>My First Heading</h1>\n" +
                "\n" +
                "<p>My first paragraph.</p>\n" +
                "\n" +
                "</body>\n" +
                "</html>\n");

    }

    public static String toRtf(String html) {
        ByteArrayInputStream input= new ByteArrayInputStream(html.getBytes());
        StringWriter writer = new StringWriter();
        try {
            RTFEditorKit rtfEditorKit = new RTFEditorKit();
            HTMLEditorKit htmlEditorKit = new HTMLEditorKit();
            Document htmlDoc = htmlEditorKit.createDefaultDocument();
            htmlEditorKit.read(input, htmlDoc, 0);
            rtfEditorKit.write(writer, htmlDoc, 0, htmlDoc.getLength());
        } catch (Exception ex) {
            System.out.println("Error"+ex);
        }
        System.out.println(writer.toString());
        return writer.toString();
    }
}

错误:

Errorjava.io.IOException: RTF is an 8-bit format

我做错了什么?在这种情况下,谷歌不是我的 friend ,我希望你能帮助我:)

最佳答案

RTF是一种 8 位格式,但您要将内容发送到 Writer,这是一个“用于写入字符流的类”。尝试采用 ByteArrayOutputStreamwrite() 变体:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
…
rtfEditorKit.write(baos, htmlDoc, 0, htmlDoc.getLength());
…
System.out.println(baos.toString());

控制台:

{\rtf1\ansi
{\fonttbl\f0\fnil Monospaced;}

\par
My First HeadingMy first paragraph.\par
}

关于javax.swing.text.rtf.RTFEditorKit/RTF 是一种 8 位格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19188447/

相关文章:

java - Tomcat,使用 JDBCStore 的用户 session 存储,即时 session 超时

java - MongoDB/Java SDK : Query elements with a value in array

java - Spring JPA ManyToOne 删除句柄

java - JEdi​​torPane 中的 HTMLEditorKit 和自定义标签

java - PGP签名格式阅读器

java - 自定义 Swing 布局

java - JButton 问题 -- Java Netbeans NullPointerException

java - JTable 构造函数的替代方案

java - 将 HTML 插入到 HTMLDocument 的主体中

java - 访问/更改 JEditorPane 的 html 加载元素 + Unicode (Java) 的 HTMLEditorKit 问题