我使用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);
答案 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问题。