TextConvert正在导出HTML和Body标签

时间:2015-11-12 00:45:30

标签: flash flex tlf

我使用TextConverter类将TextFlow导出为HTML,并在导出中导出HTML和Font标签。有没有办法防止这种情况,所以它只输出没有这个的内容?

这是我的AS3:

var output:String = TextConverter.export(RichText(textComponent).textFlow, TextConverter.TEXT_FIELD_HTML_FORMAT, ConversionType.STRING_TYPE);

示例输出:

<HTML><BODY><P ALIGN="left"><FONT FACE="Arial" SIZE="12" COLOR="#000000" 
LETTERSPACING="0" KERNING="1">Here is some content. 
</FONT></P></BODY></HTML>

另外,小写的HTML是不是有效?更新,看起来没关系,除非你使用的是XHTML,然后它应该是大写的。

看起来TextFieldHtmlExporter.as是HTML和BODY标签中的硬编码。

tlf_internal function exportToXML(textFlow:TextFlow) : XML  {
    var html:XML = <HTML/>;

    if (textFlow.numChildren != 0)
    {
        if (textFlow.getChildAt(0).typeName != "BODY")
        {
            var body:XML = <BODY/>;
            html.appendChild(body);
            exportChildren(textFlow,body);
        }
        else
            exportChildren(textFlow,html);
    }

    return html;
}

你会怎么处理这个?这会有用吗?

exportChildren(textFlow, <root/>);

我想摆脱第一个&#34; FONT&#34;标记,因为它没有反映RichText组件中的格式。我可能不得不重写该类,因为它在整个地方使用大写。

看起来我可以导出到XML然后获得第一个孩子:

var test:Object = TextConverter.export(RichText(component).textFlow, TextConverter.TEXT_FIELD_HTML_FORMAT, ConversionType.XML_TYPE);

创建这个XML:

<HTML>
  <BODY>
    <P ALIGN="left">
      <FONT FACE="Arial" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="1">
        My text content
      </FONT>
    </P>
  </BODY>
</HTML>

更新
一个非常hacky的捷径是得到实际段落内容而不是你可以使用的html包装器,但它非常脆弱:

//layoutOutput += TextConverter.export(RichText(componentInstance).textFlow, TextConverter.TEXT_FIELD_HTML_FORMAT, ConversionType.STRING_TYPE);
var test:Object = TextConverter.export(RichText(componentInstance).textFlow, TextConverter.TEXT_FIELD_HTML_FORMAT, ConversionType.XML_TYPE);
var content:XML = test.children()[0].children()[0].children()[0].children()[0];

if (content) {
    layoutOutput += content.toXMLString();
}

执行导入和导出的类是:

TextFieldHtmlImporter,  TextFieldHtmlExporter

这些类看起来很容易修改。您可以在应用程序的某处使用此代码:

TextConverter.removeFormat(TextFieldHtmlExporter);
TextConverter.addFormat(MyNewTextFieldHtmlExporter);

1 个答案:

答案 0 :(得分:0)

这是一个可以扩展和修改的简单解决方案。

TextConverter.removeFormat(TextConverter.TEXT_FIELD_HTML_FORMAT);
TextConverter.addFormat(TextConverter.TEXT_FIELD_HTML_FORMAT, flashx.textLayout.conversion.TextFieldHtmlImporter, TextFieldHTMLExporter2, null);

创建以下类TextFieldHTMLExporter2.as

package {

    import flashx.textLayout.tlf_internal;
    import flashx.textLayout.conversion.TextFieldHtmlExporter;
    import flashx.textLayout.formats.ITextLayoutFormat;

    use namespace tlf_internal;

    public class TextFieldHTMLExporter2 extends TextFieldHtmlExporter {


        public function TextFieldHTMLExporter2() {

        }


        /**  
         * Exports certain character level formats as a <FONT/> with appropriate attributes
         * @param format format to export
         * @param ifDifferentFromFormat if non-null, a value in format is exported only if it differs from the corresponding value in ifDifferentFromFormat
         * @return XML  the populated XML element
         * @private
         */ 
        override tlf_internal function exportFont(format:ITextLayoutFormat, ifDifferentFromFormat:ITextLayoutFormat=null):XML
        {
            var font:XML = super.exportFont(format, ifDifferentFromFormat);


            if (!ifDifferentFromFormat || ifDifferentFromFormat.fontSize != format.fontSize) {
                font = super.exportFontAttribute(font, "SIZE", format.fontSize);
                delete font.@SIZE;

                font.@style = "font-size:" + format.fontSize + "px";
            }

            return font;
        }
    }
}

上一课程纠正了字体大小问题。还有很多东西可以更新。如果我发布课程,我会在这里添加一个链接。

注意:
字体大小错误是当文本大小为12像素高时,它设置SIZE="12",它与style="font-size:12px"不同。如果要设置SIZE属性,则需要将其转换为等效值。请参阅this问题。