【发布时间】:2012-08-24 16:37:53
【问题描述】:
快速总结
我们有一个 Flash 应用程序 (AS3),它使用户能够阅读、交互和打印嵌入其中的内容。我们最近注意到,当从 Chrome 打印时,会省略内容并打印空白页(注意,空白页也会出现在 Chrome 的打印预览中)。我们发现 Chrome 版本“21.0.1180.83”(使用 Flash 版本“11.3.31.230”)存在此问题。这在任何其他浏览器中都无法重现。
技术细节
每页内容都表示为一个 Sprite。为了正确呈现内容,我们进行了一些缩放/调整大小。我们使用位图来实现这一点。我们创建一个新的 BitmapData 对象 (bMapData) 并绘制页面的精灵。我们使用 (bMapData) 并用它创建一个新的位图对象 (bMap)。最后,我们创建一个新的 Sprite 对象 (sObj) 并将 (bMap) 添加为其子对象。打印 (sObj) 会呈现空白页。
我已经包含了一些可用于重现此的示例代码:
private function printAsBitmap(sprite:Sprite):void{
var bitmapData:BitmapData = new BitmapData(sprite.width, sprite.height, false, 0xffffff);
bitmapData.draw(sprite);
var bitmap:Bitmap = new Bitmap(bitmapData);
var newSprite:Sprite = new Sprite();
newSprite.addChild(bitmap);
printSprite(newSprite);
}
private function printSprite(clip:Sprite) {
var printJob:PrintJob = new PrintJob();
var jobOptions:PrintJobOptions = new PrintJobOptions();
jobOptions.printAsBitmap=false;
var numPages:int = 0;
var printArea:Rectangle;
var printHeight:Number;
var printY:int = 0;
if ( printJob.start() ) {
/* Resize movie clip to fit within page width */
if (clip.width > printJob.pageWidth) {
clip.width = printJob.pageWidth;
clip.scaleY = clip.scaleX;
}
/* Store reference to print area in a new variable! Will save on scaling calculations later... */
printArea = new Rectangle(0, 0, printJob.pageWidth/clip.scaleX, printJob.pageHeight/clip.scaleY);
numPages = Math.ceil(clip.height / printJob.pageHeight);
/* Add pages to print job */
for (var i:int = 0; i < numPages; i++) {
//printJob.addPage(clip, printArea);
printJob.addPage(clip,null,jobOptions);
printArea.y += printArea.height;
}
/* Send print job to printer */
printJob.send();
/* Delete job from memory */
printJob = null;
}
}
有人对“解决方法”有建议吗?
感谢您的任何帮助!
【问题讨论】:
-
仅供参考 - 我已向 Chromium 团队提交了一个错误。点击here
-
我在任何地方都看不到 newSprite 将出现在舞台上,您可以先尝试在舞台上添加它吗?我遇到了一个打印问题,即未打印不在舞台上的剪辑。
-
感谢您的回复。我已将展示此行为的示例应用程序附加到我向 Chromium 团队提交的错误报告中。 Click here查看/下载源代码。
标签: actionscript-3 flash google-chrome actionscript