Taken van de Flash-runtime en afdrukken via het besturingssysteem

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

Omdat de Flash-runtime pagina's verzendt naar de afdrukinterface van het besturingssysteem, is het van belang dat u weet welke taken worden beheerd door de Flash-runtime en welke door de eigen afdrukinterface van een besturingssysteem. De Flash-runtime kan een afdruktaak starten, enkele pagina-instellingen van een printer lezen, de inhoud voor een afdruktaak doorgeven aan het besturingssysteem en controleren of de gebruiker dan wel het systeem een afdruktaak heeft geannuleerd. Andere processen, zoals het weergeven van printerspecifieke dialoogvensters, het annuleren van een gespoolde afdruktaak of het melden van de printerstatus, worden allemaal door het besturingssysteem afgehandeld. De Flash-runtime kan reageren als er een probleem is met het starten of formatteren van een afdruktaak, maar kan alleen meldingen genereren over bepaalde eigenschappen of voorwaarden van de afdrukinterface van het besturingssysteem. Als ontwikkelaar moet u er dan ook voor zorgen dat uw code op deze eigenschappen of voorwaarden kan reageren.

Werken met uitzonderingen en geretourneerde meldingen

Ga na of de methode PrintJob.start() de waarde true retourneert voordat u de aanroepen addPage() en send() uitvoert, voor het geval de gebruiker de afdruktaak heeft geannuleerd. Een eenvoudige manier om voordat u verdergaat te controleren of deze methoden zijn geannuleerd, is ze als volgt op te nemen in een instructie if :

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

Als PrintJob.start() is ingesteld op true , heeft de gebruiker de opdracht Afdrukken geselecteerd (of is deze opdracht geactiveerd door de Flash-runtime (bijvoorbeeld door Flash Player of AIR)). De methoden addPage() en send() kunnen dus worden aangeroepen.

Voor het beheren van het afdrukproces, genereren Flash Player en AIR bovendien uitzonderingen voor de methode PrintJob.addPage() , zodat u fouten kunt afvangen en de gebruiker van informatie en opties kunt voorzien. Als een methode PrintJob.addPage() mislukt, kunt u ook een andere functie aanroepen of de huidige afdruktaak stopzetten. U vangt deze uitzonderingen af door aanroepen addPage() in te sluiten in een instructie try..catch , zoals in het volgende voorbeeld. In het voorbeeld is [params] een plaatsaanduiding voor de parameters die aangeven welke inhoud u wilt afdrukken:

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

Nadat de afdruktaak is begonnen, kunt u de inhoud toevoegen met behulp van PrintJob.addPage() en controleert u vervolgens of daardoor een uitzondering wordt gegenereerd (bijvoorbeeld als de gebruiker de afdruktaak heeft geannuleerd). Als dit geval het geval is, kunt u logica toevoegen aan de instructie catch om de gebruiker (of de Flash runtime) te voorzien van informatie en opties. Als de pagina wordt toegevoegd, kunt u meerdere pagina’s naar de printer sturen met PrintJob.send() .

Als de Flash runtime een probleem ondervindt tijdens het verzenden van de afdruktaak naar de printer (bijvoorbeeld omdat de printer offline is), kunt u ook die uitzonderingsfout onderscheppen en de gebruiker voorzien van informatie of andere opties (zoals het weergeven van een tekstbericht of het opnemen van een waarschuwing in een animatie). U kunt bijvoorbeeld nieuwe tekst toevoegen aan een tekstveld in een instructie if..else , zoals in de volgende code:

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

Een werkend voorbeeld vindt u in Voorbeeld van afdrukken: schalen, bijsnijden en reageren .

Werken met pagina-eigenschappen

Zodra de gebruiker op OK klikt in het dialoogvenster Afdrukken en PrintJob.start() de waarde true retourneert, hebt u toegang tot de eigenschappen zoals gedefinieerd door de instellingen van de printer. Tot deze instellingen behoren de hoogte en de breedte van het papier ( pageHeight en pageWidth ), evenals de afdrukstand van de inhoud op het papier. Omdat dit printerinstellingen zijn, die niet worden bestuurd door Flash Player of AIR, kunt u deze instellingen niet wijzigen. U kunt ze echter wel gebruiken om de inhoud die u naar de printer stuurt uit te lijnen in overeenstemming met de huidige instellingen. Zie Formaat, schaal en afdrukstand instellen voor meer informatie.

Vector- of bitmaprendering instellen

U kunt de afdruktaak handmatig zodanig instellen dat elke pagina als een vector- of bitmapafbeelding wordt gespoold. In bepaalde gevallen wordt bij vectorafdrukken een kleiner spoolbestand gegenereerd en een beter beeld verkregen dan bij bitmapafdrukken. Als de inhoud echter een bitmapafbeelding bevat en u wilt alfatransparantie- of kleureffecten behouden, moet u de pagina afdrukken als een bitmapafbeelding. Bovendien zet een niet-PostScript-printer de vectorafbeeldingen automatisch om naar bitmapafbeeldingen.

U stelt de afdrukmethode met bitmaps in door een PrintJobOptions-object door te geven als de derde parameter van PrintJob.addPage() .

Bij Flash Player en AIR-versies lager dan AIR 2 stelt u de parameter printAsBitmap van het PrintJobOptions-object in op true , zoals hier:

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

Als u geen waarde voor de derde parameter opgeeft, maakt de afdruktaak gebruik van de standaardinstelling, te weten vectorafdrukken.

Voor AIR 2 en hoger geeft u de afdrukmethode op met de eigenschap printMethod van het PrintJobOptions-object. Deze eigenschap accepteert drie waarden die zijn gedefinieerd als constanten in de PrintMethod-klasse:

  • PrintMethod.AUTO : hiermee wordt automatische de beste afdrukmethode gekozen, op basis van de inhoud die wordt afgedrukt. Als een pagina bijvoorbeeld uit tekst bestaat, wordt de afdrukmethode met vectoren gekozen. Als er echter een watermerkafbeelding met alfatransparantie op de tekst wordt geplaatst, wordt voor de afdrukmethode met bitmaps gekozen, zodat de transparantie intact blijft.

  • PrintMethod.BITMAP : hiermee wordt de afdrukmethode met bitmaps geforceerd, ongeacht de inhoud

  • PrintMethod.VECTOR : hiermee wordt de afdrukmethode met vectoren geforceerd, ongeacht de inhoud

Tijdsinstelling bepalen voor instructies voor afdruktaken

In ActionScript 3.0 is een object PrintJob niet beperkt tot één frame (zoals in vorige versies van ActionScript). Maar omdat het besturingssysteem statusinformatie over het afdrukken weergeeft nadat de gebruiker in het dialoogvenster Afdrukken op de knop OK heeft geklikt, moet u PrintJob.addPage() en PrintJob.send() zo spoedig mogelijk aanroepen om pagina's naar de spooler te verzenden. Een vertraging die optreedt bij het frame dat de aanroep PrintJob.send() bevat, zorgt voor een vertraging van het afdrukproces.

In ActionScript 3.0 geldt een time-outlimiet van 15 seconden voor scripts. Daarom kan de tijd tussen elke hoofdinstructie in een reeks afdruktaken niet de limiet van 15 seconden overschrijden. Met andere woorden, de time-outlimiet van 15 seconden voor scripts geldt voor de volgende intervallen:

  • Tussen PrintJob.start() en de eerste PrintJob.addPage()

  • Tussen PrintJob.addPage() en de volgende PrintJob.addPage()

  • Tussen de laatste PrintJob.addPage() en PrintJob.send()

Wanneer een of meer van deze intervallen langer duren dan 15 seconden, retourneert de volgende aanroep PrintJob.start() voor de PrintJob-instantie false en veroorzaakt de volgende PrintJob.addPage() voor de PrintJob-instantie een runtime-uitzondering in Flash Player of AIR.