Actionscript 3 AS3光栅化电影剪辑到Sprite中进行打印

Actionscript 3 AS3光栅化电影剪辑到Sprite中进行打印,actionscript-3,printing,Actionscript 3,Printing,我目前在打印多页文档时遇到了一个令人沮丧的问题。基本上,我在舞台上有一个movieclip(printArea),其中包含几个元素,包括使用loader组件加载的图像、datagrid组件和其他一些组合元素 此电影剪辑充当单个页面的模板;您可以调整选项,然后单击“添加页面”,然后再次更改第二页,依此类推。我遇到的问题是如何将页面添加到数组中,以便稍后使用addPage()循环。据我所知,一个精灵或电影剪辑最好传递到addPage。我觉得复制电影剪辑,然后用数据、大小和定位设置重新初始化所有组件,

我目前在打印多页文档时遇到了一个令人沮丧的问题。基本上,我在舞台上有一个movieclip(printArea),其中包含几个元素,包括使用loader组件加载的图像、datagrid组件和其他一些组合元素

此电影剪辑充当单个页面的模板;您可以调整选项,然后单击“添加页面”,然后再次更改第二页,依此类推。我遇到的问题是如何将页面添加到数组中,以便稍后使用addPage()循环。据我所知,一个精灵或电影剪辑最好传递到addPage。我觉得复制电影剪辑,然后用数据、大小和定位设置重新初始化所有组件,这完全是过火了。我无法传递movieclip本身,因为我需要从一个实例建模几个页面。有没有一种方法可以简单地将电影剪辑光栅化以将其传递给addPage()?这是我目前找到的唯一解决方案,但打印输出的质量很差:

//So let's say I want to add the movie clip's current state to the array :

multiPages.push(duplicateMC(printArea));
function duplicateMC(mc)
{
    var tempImg:BitmapData = new BitmapData(mc.width,mc.height);
    tempImg.draw(mc);
    var fullImg = new Bitmap(tempImg);
    var newImg = DisplayConverter.bitmapToSprite(fullImg,true);
    multiPages.push(newImg);
}

//DisplayConverter function in a seperate file (Snagged this online somewhere) :

public static function bitmapToSprite(bitmap:Bitmap, smoothing:Boolean = false):Sprite
{
    var sprite:Sprite = new Sprite();
    sprite.addChild( new Bitmap(bitmap.bitmapData.clone(), "auto", smoothing));
    return sprite;
}

提前谢谢,这一整天对我来说都是巨大的痛苦。

不要把它复杂化。
您没有缩放,因此不要启用捕捉或平滑,因为这会扭曲图像并降低质量。
将“图像/BMD”存储在阵列中,以便在打印时引用它。 存储比BMD更多的数据是浪费内存

function doMyPrinting( ):void{
  for each( var item:BitmapData in multiPages){
    var page:Sprite = new Sprite();
    page.addChild(new Bitmap(item));
    printJob.addPage(page);
  }
}





multiPages.push(duplicateMC(printArea));
function duplicateMC(mc):void
{
    var tempImg:BitmapData = new BitmapData(mc.width,mc.height);
    tempImg.draw(mc);
    multiPages.push(tempImg);
}

不要把它复杂化。
您没有缩放,因此不要启用捕捉或平滑,因为这会扭曲图像并降低质量。
将“图像/BMD”存储在阵列中,以便在打印时引用它。 存储比BMD更多的数据是浪费内存

function doMyPrinting( ):void{
  for each( var item:BitmapData in multiPages){
    var page:Sprite = new Sprite();
    page.addChild(new Bitmap(item));
    printJob.addPage(page);
  }
}





multiPages.push(duplicateMC(printArea));
function duplicateMC(mc):void
{
    var tempImg:BitmapData = new BitmapData(mc.width,mc.height);
    tempImg.draw(mc);
    multiPages.push(tempImg);
}

单击
添加页面
时,是否有原因无法实例化新的
打印区域
,从后台删除现有的打印区域,并在
多页
中存储对该打印区域的引用?单击
添加页面
时,是否有原因无法实例化新的
打印区域
,从stage中删除现有的一个,并将其引用存储在
多页中
?感谢您的帮助,尽管质量仍然很差(例如,datagrid文本显示模糊且伪影为y)。当您说关闭捕捉和平滑时,您指的是PrintJobOptions吗?我将printAsBitmap属性设置为false(设置为true时打印空白),并关闭打印机首选项中的所有平滑/缩放设置。知道是什么原因导致的吗?谢谢你的帮助,尽管质量仍然很糟糕(例如,datagrid文本显示模糊且伪影为y)。当您说关闭捕捉和平滑时,您指的是PrintJobOptions吗?我将printAsBitmap属性设置为false(设置为true时打印空白),并关闭打印机首选项中的所有平滑/缩放设置。知道是什么引起的吗?