我希望能够将HTML文本作为位图,以便在AlivePDF中使用。我的测试适用于TextArea,或者如果组件在舞台上或可见。但我希望能够处理不一定坐在屏幕上的文本块。有谁知道怎么做?
到目前为止我失败了
public static function rasterizeText( text:String, width:int = 100, height:int = 100, x:int = 0, y:int = 0 ):BitmapData {
var textRenderer:TextArea = new TextArea();
textRenderer.width = width;
textRenderer.height = height;
textRenderer.htmlText = text;
var bitdata:BitmapData = new BitmapData(width, height, true, 0xFF000000)
bitdata.draw( textRenderer );
return bitdata;
}
答案 0 :(得分:2)
您的代码应该可以正常运行。无需将textRenderer添加到舞台中以将其绘制到BitmapData中。您正在将textRenderer绘制到纯黑色背景上。也许你的文字也是黑色的,这就是为什么你看不到它?
尝试将0xFF000000更改为例如0xFFFF0000并查看文本是否会显示。
答案 1 :(得分:1)
不,这不是颜色问题。我的颜色设置为FF000000,至少应该显示为黑色。尽管TextField工作得非常好,但TextArea似乎并不适合使用位图。
编辑:我猜测TextArea不是spark或mx,因为它们是FlexSprite的东西,它与普通的AS3 Sprites不同。他们将推迟渲染,直到它们被添加到显示列表中。
工作职能:
public function rasterizeText( text:String,
width:int = 100, height:int = 100 ):BitmapData {
var tf:TextField = new TextField();
tf.multiline = true;
tf.wordWrap = true;
tf.width = width;
tf.height = height;
tf.htmlText = text;
var bd:BitmapData = new BitmapData(width, height, true,0x00000000);
bd.draw(tf);
return bd;
}
这不起作用(我尝试过mx& spark textarea组件):
public function rasterizeText( text:String,
width:int = 100, height:int = 100 ):BitmapData {
var textRenderer:TextArea = new TextArea();
textRenderer.width = width;
textRenderer.height = height;
textRenderer.textFlow = TextConverter.importToFlow( text, TextConverter.TEXT_FIELD_HTML_FORMAT );
var bitdata:BitmapData = new BitmapData( width, height, false, 0xFF000000 )
bitdata.draw( textRenderer );
return bitdata;
}
然而,从舞台绘图时它会起作用:
public function rasterizeText( text:String,
width:int = 100, height:int = 100 ):BitmapData {
var textRenderer:TextArea = new TextArea();
textRenderer.width = width;
textRenderer.height = height;
textRenderer.textFlow = TextConverter.importToFlow( text, TextConverter.TEXT_FIELD_HTML_FORMAT );
canvas.addElement( textRenderer );
var bitdata:BitmapData = new BitmapData( width, height, false, 0xFF000000 )
bitdata.draw( canvas );
return bitdata;
}