Utskriftsåtgärder för Flash och för systemet

Flash Player 9 och senare, Adobe AIR 1.0 och senare

Eftersom Flash-miljöerna skickar sidor till operativsystemets utskriftsgränssnitt, måste du känna till vilka åtgärder som hanteras av Flash och vilka åtgärder som hanteras av operativsystemets eget utskriftsgränssnitt. Flash-miljöerna kan initiera en utskrift, läsa vissa av skrivarens sidinställningar, skicka innehållet för en utskrift till operativsystemet och verifiera om användaren eller systemet har avbrutit en utskrift. Andra processer, till exempel att visa skrivarspecifika dialogrutor, avbryta en utskrift i utskriftshanteraren eller rapportera skrivarens status, hanteras av operativsystemet. Flash-miljöerna kan också svara om det uppstår problem med att initiera eller formatera en utskrift, men kan bara rapportera tillbaka om vissa egenskaper och villkor från operativsystemets utskriftsgränssnitt. Om du är utvecklare måste din kod kunna svara på dessa egenskaper och villkor.

Arbeta med undantag och returer

Du måste kontrollera om metoden PrintJob.start() returnerar true innan anropen addPage() och send() körs om användaren har avbrutit utskriften. Ett enkelt sätt att kontrollera om dessa metoder har avbrutits innan du fortsätter är att lägga in dem i en if -programsats, på följande vis:

if (myPrintJob.start()) 
{ 
    // addPage() and send() statements here 
}

Om PrintJob.start() är true har användaren valt Print (eller en Flash-miljö, som Flash Player eller AIR, har initierat ett Print-kommando). Därmed kan metoderna addPage() och send() anropas.

För att utskriften ska bli lättare att hantera utlöses undantag för metoden PrintJob.addPage() , så att du kan fånga upp fel och ge användaren information och alternativ. Om metoden PrintJob.addPage() misslyckas kan du anropa en annan funktion eller avbryta den aktuella utskriften. Du fångar upp dessa undantag genom att bädda in addPage() -anrop inuti en try..catch -programsats som i följande exempel. I exemplet är [params] en platshållare för de parametrar som anger det innehåll som ska skrivas ut:

if (myPrintJob.start()) 
{ 
    try 
    { 
        myPrintJob.addPage([params]); 
    } 
    catch (error:Error) 
    { 
        // Handle error,  
    } 
    myPrintJob.send(); 
}

När utskriften startar kan du lägga till innehåll med hjälp av PrintJob.addPage() och se om detta genererar ett undantag (om till exempel användaren har avbrutit utskriften). I så fall kan du lägga till logik i programsatsen catch för att förse användaren (eller Flash-miljön) med information och alternativ, men du kan också avbryta den aktuella utskriften. När du har lagt till sidan kan du fortsätta med att skicka sidorna till skrivaren med PrintJob.send() .

Om det uppstår något problem när utskriften skickas till skrivaren (om skrivaren till exempel är offline) kan du fånga upp det här undantaget också och tillhandahålla mer information eller fler alternativ (till exempel visa ett textmeddelande eller animera en varning). Du kan till exempel tilldela ny text till ett textfält i en if..else -programsats, vilket visas i följande kod:

if (myPrintJob.start()) 
{ 
    try 
    { 
        myPrintJob.addPage([params]); 
    } 
    catch (error:Error) 
    { 
        // Handle error.  
    } 
    myPrintJob.send(); 
} 
else 
{ 
    myAlert.text = "Print job canceled"; 
}

Ett fungerande exempel finns i Exempel på utskrift: skala, beskära och svara .

Arbeta med sidegenskaper

När användaren klickar på OK i utskriftsdialogrutan och PrintJob.start() returnerar true , kan du komma åt egenskaperna som definierats av skrivarens inställningar. De här inställningarna omfattar pappersbredd, pappershöjd ( pageHeight och pageWidth ) och innehållets orientering på papperet. Eftersom detta är skrivarinställningar, som inte styrs av Flash-miljön, kan du inte ändra inställningarna. Du kan emellertid använda dem för att justera det innehåll som du skickar till skrivaren för att matcha de aktuella inställningarna. Mer information finns i Ställa in storlek, skala och orientering .

Ställa in vektor- och bitmappsåtergivning

Du kan ställa in utskriften så att alla sidor mellanlagras som vektorgrafik eller bitmappsbilder. I vissa fall skapar vektorutskrift en mindre utskriftsfil och en bättre bild än bitmappsutskrift. Men om innehållet omfattar en bitmappsbild och du vill spara alla alfagenomskinlighets- eller färgeffekter, måste du skriva ut sidan som en bitmappsbild. En icke-PostScript-skrivare konverterar dessutom automatiskt all vektorgrafik till bitmappsbilder.

Du anger en bitmappsutskrift genom att skicka ett PrintJobOptions-objekt som den tredje parametern av PrintJob.addPage() .

För Flash Player och AIR-versioner före AIR 2 anger du PrintJobOptions-objektets printAsBitmap -parameter till true , enligt följande:

var options:PrintJobOptions = new PrintJobOptions(); 
options.printAsBitmap = true; 
myPrintJob.addPage(mySprite, null, options);

Om du inte anger något värde för den tredje parametern kommer standardvärdet att användas, vilket är vektorutskrift.

För AIR 2 och senare versioner använder du egenskapen printMethod för PrintJobOptions-objektet om du vill ange utskriftsmetod. Den här egenskapen tar tre värden, som är definierade som konstanter i klassen PrintMethod:

  • PrintMethod.AUTO : Väljer automatiskt den bästa utskriftsmetoden beroende på det innehåll som ska skrivas ut. Om en sida till exempel består av text väljs metoden för vektorutskrift. Men om en bild med vattenstämpel och alfagenomskinlighet läggs ovanpå texten väljs bitmappsutskrift för att behålla genomskinligheten.

  • PrintMethod.BITMAP : Tvingar fram bitmappsutskrift oavsett innehåll

  • PrintMethod.VECTOR : Tvingar fram vektorutskrift oavsett innehåll

Samordna utskriftsprogramsatser

I ActionScript 3.0 begränsas inte ett PrintJob-objekt till en enda bildruta (som i tidigare versioner av ActionScript). Men eftersom operativsystemet visar utskriftsstatusinformation för användaren när användaren har klickat på OK i utskriftsdialogrutan, bör du anropa PrintJob.addPage() och PrintJob.send() så fort som möjligt och skicka sidor till utskriftshanteraren. En fördröjning med att nå den bildruta som innehåller PrintJob.send() -anropet fördröjer utskriftsprocessen.

I ActionScript 3.0 finns det en skripttimeout på 15 sekunder. Tiden mellan varje större programsats i en utskriftssekvens får därför inte överstiga 15 sekunder. 15-sekunderstimeouten tillämpar m.a.o. följande intervall:

  • Mellan PrintJob.start() och den första PrintJob.addPage()

  • Mellan PrintJob.addPage() och nästa PrintJob.addPage()

  • Mellan den sista PrintJob.addPage() och PrintJob.send()

Om något av ovanstående intervall överskrider 15 sekunder kommer nästa anrop till PrintJob.start() för PrintJob-instansen att returnera false . Nästa PrintJob.addPage() för PrintJob-instansen utlöser ett körningsundantag i Flash Player eller AIR.