As3 проблема печати, бланки SWF после печати или отмены - PullRequest
1 голос
/ 11 июня 2010

хорошо, вернемся к другим проблемам печати as3

//Function to print entire screen
function printFunction(event:MouseEvent):void
{
    var myPrintJob:PrintJob = new PrintJob();
    var oldScaleX:Number = root.scaleX;
    var oldScaleY:Number = root.scaleY;

    //Start the print job
    myPrintJob.start();

    //Figure out the new scale
    var newScaleX:Number = myPrintJob.paperWidth/root.width;
    var newScaleY:Number = myPrintJob.paperHeight/root.height;

    //Shrink in both the X and Y directions by the same amount (keep the same ratio)
    if(newScaleX < newScaleY)
        newScaleY = newScaleX;
    else
        newScaleX = newScaleY;

    root.scaleX = newScaleX;
    root.scaleY = newScaleY;

    //Print the page
    myPrintJob.addPage(Sprite(root));
    myPrintJob.send();

    //Reset the scale to the old values
    root.scaleX = oldScaleX;
    root.scaleY = oldScaleY;
}

Кажется, я не могу найти ничего действительно полезного в этом. Когда я нажимаю "Отмена" в диалоговом окне печати, я получаю сообщение об ошибке ниже, и оно стирает мой SWF.

Ошибка состоит в том, что всякий раз, когда я пытаюсь распечатать и отменить его, или даже когда я успешно печатаю, swf пропадает.

Ответы [ 2 ]

0 голосов
/ 15 мая 2012

Для печати в виде растрового изображения вы можете использовать параметры печати как,

var printOption:PrintJobOptions = new PrintJobOptions();
printOption.printAsBitmap = true;

перед addPage (...); линия

Но это не причина для пустого SWF.

используйте следующий код,

function firePrint(e:MouseEvent):void
{
printImage(Img);
}
printBtn.addEventListener(MouseEvent.CLICK, firePrint, false, 0, true);

function printImage(mc:MovieClip):void
{
var realW:Number = mc.width;
var realH:Number = mc.height;
var orgX:Number = mc.x;
var orgY:Number = mc.y;
var pj:PrintJob = new PrintJob();
var pageCount:Number = 0;

var printOption:PrintJobOptions = new PrintJobOptions();
printOption.printAsBitmap = true;

if (pj.start())
{
    mc.x = 0;
    mc.y = 0;

    var cXscale:Number,cYscale:Number;

    if (pj.orientation.toLowerCase() != "landscape")
    {
        mc.rotation = 90;
        mc.x = mc.width;
        cXscale = (pj.pageWidth / realH) * 100;
        cYscale = (pj.pageHeight / realW) * 100;
    }
    else
    {
        cXscale = (pj.pageWidth / realW) * 100;
        cYscale = (pj.pageHeight / realH) * 100;
    }

    mc.scaleX = mc.scaleY = Math.min(cXscale,cYscale);

    if (pj.addPage(mc,new Rectangle(0,0,realW,realH)))
    {
        pageCount++;
    }

    if (pageCount > 0)
    {
        pj.send();
    }

    mc.scaleX = mc.scaleY = 100;
    mc.rotation = 0;
    mc.x = orgX;
    mc.y = orgY;
    pj = null;
}else
{
    //No printer or prnting is cancelled
}
}
0 голосов
/ 11 июня 2010

Существует два типа печати: векторная и растровая.Поскольку вы просто переходите в корень, он попытается распечатать все как вектор.Но вы можете заметить, что в некоторых версиях Flash Player в некоторых операционных системах векторная печать не работает.Обычно я создаю снимок растрового изображения отображаемого объекта и распечатываю его.

var bitmapData:BitmapData = new BitmapData(root.width, root.height); bitmapData.draw(root); var printThis:Bitmap = new Bitmap(bitmapData);

Убедитесь, что вы добавили его на сцену перед печатью, чтобы предварительный просмотр работал, и обратите внимание на максимумразмер растровых данных.Когда вы закончите, удалите растровое изображение.

...