微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将JTextPane样式的内容输出到HTML,包括自定义样式?

我目前使用JTextPane来允许用户添加/编辑文本.它允许粗体/斜体/下划线(我计划将来允许链接).它还允许用户删除按钮,这些按钮作为自定义样式插入.该小组看起来像:

< <图像已删除> >

我希望能够将内容保存/加载为HTML内容将合并到Flash swf中.我可以像HTML那样获取内容

     public String getHTMLText(){

     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
try{
   HTMLEditorKit hk = new HTMLEditorKit();
   hk.write(baos,this.getStyledDocument(),this.getDocument().getLength());

      } catch (IOException e) {
       e.printstacktrace();
      } catch (BadLocationException e) {
       e.printstacktrace();
      }
      return baos.toString();
     }

如果JTextPane仅包含粗体/斜体/带下划线的文本,则此方法可以正常工作.但输出过于复杂.我希望能够输出我的自定义样式,但是当我尝试时我收到此错误

 Exception occurred during event dispatching:
    java.lang.NullPointerException
 at javax.swing.text.html.MinimalHTMLWriter.writeAttributes(MinimalHTMLWriter.java:151)
 at javax.swing.text.html.MinimalHTMLWriter.writeStyles(MinimalHTMLWriter.java:256)
 at javax.swing.text.html.MinimalHTMLWriter.writeHeader(MinimalHTMLWriter.java:220)
 at javax.swing.text.html.MinimalHTMLWriter.write(MinimalHTMLWriter.java:122)
 at javax.swing.text.html.HTMLEditorKit.write(HTMLEditorKit.java:293)
 at javax.swing.text.DefaultEditorKit.write(DefaultEditorKit.java:152)
 at numeracy.referencetextpanel.NRefButtonTextArea.getHTMLText(NRefButtonTextArea.java:328)
 at numeracy.referencetextpanel.NInputPanelRefTextButton.getReferencedText(NInputPanelRefTextButton.java:59)
 at numeracy.referencetextpanel.NInputRefText.actionPerformed(NInputRefText.java:106)
 at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

我的自定义样式是这样插入的(cID是类似“{0-0}”的字符串):

StyledDocument doc = this.getStyledDocument();

 NRefButton b = this.createRefButton(cID);

 Style style = doc.addStyle(cID,null); //prepare a style
 StyleConstants.setComponent(style,b);  

 doc.insertString(doc.getLength(),b.toString(),style); //insert button at index

函数createRefButton(String cID):

 private NRefButton createRefButton(String cID) {

  NRefButton b = new NRefButton(_equationButtons.get(cID).getText(),cID,_equationButtons.get(cID).isstruck()); //prepare a button

  return b;
 }

NRefButton重写toString,返回“{”cID“}”.

我想知道的是:我应该修改插入“Style”以获取错误的方式吗?

我是否有不同的/更好的方法从这个JTextPane获取HTML?我想要的只是围绕粗体/斜体/带下划线的文本的HTML标签,而不是过于复杂,好像它是我必须去除不必要的HTML,并且“样式”以button.toString()形式出现.

或者我应该实现自己的toHTML()方法,用所需的标签包装粗体/斜体/带下划线的文本?我不介意这样做(在某些方面我更喜欢它),但我不知道如何获取给定JTextPane文档的样式.我想如果我能够获得这些样式,我可以迭代它们,将样式文本包装在适当的标签中?

理想情况下,图示的JTextPane内容输出为:

required part of this project.

我希望能够将输出HTML读入JTextPane – 再次我不介意为此编写自己的fromHTML()方法,但我需要能够首先获取HTML.

感谢您抽出宝贵时间阅读我的问题.

最佳答案
看完之后:

> HTMLEditorKit.java
> MinimalHTMLWriter.java
> AbstractWriter.java

我编写了自己的HTML导出器:

  package com.HTMLExport;

    import javax.swing.text.AbstractDocument;
    import javax.swing.text.AttributeSet;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.Element;
    import javax.swing.text.ElementIterator;
    import javax.swing.text.StyleConstants;
    import javax.swing.text.StyledDocument;

    public class NHTMLWriter {

     private StyledDocument _sd;
     private ElementIterator _it;

     protected static final char NEWLINE = '\n';

     public NHTMLWriter(StyledDocument doc) {
      _sd = doc;
      _it = new ElementIterator(doc.getDefaultRootElement());
     }

     public String getHTML(){
      return "nore it.
       */
      _it.current();

      Element next = null;

      String body = "arat(contentStr.length()-1) == NEWLINE)) {
       contentStr = contentStr.substring(0,contentStr.length()-1) + "
printstacktrace(); } return ""; } private String getEndTag(String startTags) { String[] startOrder = startTags.split("<"); String tags = ""; for(String s : startOrder){ tags = "

现在我需要编写代码以便它可以反过来:将输出HTML转换为StyledDocument.

首先,咖啡.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


应用场景 C端用户提交工单、工单创建完成之后、会发布一条工单创建完成的消息事件(异步消息)、MQ消费者收到消息之后、会通知各处理器处理该消息、各处理器处理完后都会发布一条将该工单写入搜索引擎的消息、最终该工单出现在搜索引擎、被工单处理人检索和处理。 事故异常体现 1、异常体现 从工单的流转记录发现、
线程类,设置有一个公共资源 package cn.org.chris.concurrent; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @Descrip
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量
Java 9中JShell中的不同启动脚本是什么?
使用Java的位填充错误检测技术
java中string是什么
如何使用Java中的JSON-lib API将Map转换为JSON对象?