Aufgaben in der Flash-Laufzeitumgebung und Drucken im System

Flash Player 9 und höher, Adobe AIR 1.0 und höher

Da in Flash-Laufzeitumgebungen Seiten an die Druckschnittstelle des Betriebssystems weitergeleitet werden, sollten Sie den Umfang der von Flash-Laufzeitumgebungen sowie der von der Druckschnittstelle des Betriebssystems verwalteten Aufgaben kennen. In Flash-Laufzeitumgebungen können Druckaufträge eingeleitet, einige Seiteneinstellungen des Druckers gelesen sowie Inhalte für Druckaufträge an das Betriebssystem weitergeleitet werden. Darüber hinaus kann überprüft werden, ob ein Druckauftrag vom Benutzer oder vom System abgebrochen wurde. Andere Prozesse, z. B. Anzeigen druckerspezifischer Dialogfelder, Abbrechen eines Druckauftrags in der Druckwarteschlange oder Anzeigen des Druckerstatus, werden über das Betriebssystem durchgeführt. Flash-Laufzeitumgebungen können Fehler beim Initiieren oder Formatieren eines Druckauftrags beheben. Es können jedoch nur bestimmte Eigenschaften oder Fehlerzustände der Druckschnittstelle des Betriebssystems gemeldet werden. In dem von Entwicklern geschriebenen Code muss auf diese Eigenschaften oder Fehler entsprechend reagiert werden.

Ausnahmen und Rückgabewerte

Falls der Benutzer den Druckauftrag abgebrochen hat, sollten Sie zunächst überprüfen, ob die PrintJob.start() -Methode den Wert true zurückgibt, und erst dann addPage() und send() aufrufen. Sie können auf einfache Weise überprüfen, ob diese Methoden abgebrochen wurden, indem Sie sie wie folgt in eine if -Anweisung einschließen:

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

Wenn PrintJob.start() auf true eingestellt ist, hat der Benutzer den Druckbefehl ausgewählt (oder eine Flash-Laufzeitumgebung, wie Flash Player oder AIR, hat einen Druckbefehl aufgerufen). Deshalb können die Methoden addPage() und send() aufgerufen werden.

Zur besseren Verwaltung des Druckvorgangs werden in Flash-Laufzeitumgebungen Ausnahmen für die PrintJob.addPage() -Methode ausgelöst, sodass Fehler abgefangen und dem Benutzer Informationen und Optionen bereitgestellt werden können. Wenn bei einer PrintJob.addPage() -Methode Fehler auftreten, können Sie zudem eine andere Funktion aufrufen oder den aktuellen Druckauftrag abbrechen. Sie können diese Ausnahmen abfangen, indem Sie addPage() -Aufrufe in eine try..catch -Anweisung einbetten, wie im folgenden Beispiel gezeigt. In diesem Beispiel ist [params] ein Platzhalter für die Parameter, mit denen der zu druckende Inhalt angegeben wird:

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

Nachdem der Druckauftrag gestartet wurde, können Sie mit PrintJob.addPage() Inhalte hinzufügen und prüfen, ob dadurch eine Ausnahme ausgelöst wird (z. B. wenn der Benutzer den Druckauftrag abgebrochen hat). Wenn eine Ausnahme ausgelöst wird, können Sie Code zur catch -Anweisung hinzufügen, um dem Benutzer (oder der Flash-Laufzeitumgebung) Informationen oder Optionen bereitzustellen, oder den aktuellen Druckauftrag abbrechen. Wenn die Seite erfolgreich hinzugefügt wurde, können Sie fortfahren und die Seiten mit PrintJob.send() an den Drucker senden.

Wenn in der Flash-Laufzeitumgebung beim Senden des Druckauftrags an den Drucker ein Fehler auftritt (wenn der Drucker z. B. offline ist), können Sie auch diese Ausnahme abfangen und Informationen oder weitere Optionen bereitstellen (z. B. Anzeigen eines Meldungstexts oder einer Warnmeldung in der Animation). Sie können z. B. einem Textfeld neuen Text in einer if..else -Anweisung zuweisen, wie im folgenden Beispielcode gezeigt:

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

Ein praktisches Beispiel finden Sie unter Druckbeispiel: Skalieren, Zuschneiden und Anpassen .

Seiteneigenschaften

Nachdem der Benutzer im Druckdialogfeld auf „OK“ geklickt hat und für PrintJob.start() der Wert true zurückgegeben wurde, können Sie auf die Eigenschaften zugreifen, die durch die Druckereinstellungen festgelegt sind. Zu diesen Einstellungen zählen die Papierhöhe und -breite ( pageHeight und pageWidth ) sowie die Ausrichtung des Inhalts auf dem Papier. Da es sich um Druckereinstellungen handelt, die nicht über die Flash-Laufzeitumgebung gesteuert werden, können Sie diese Einstellungen nicht ändern. Sie können jedoch die Inhalte, die an den Drucker gesendet werden, entsprechend den aktuellen Einstellungen ändern. Weitere Informationen finden Sie unter Einrichten von Größe, Skalierung und Ausrichtung .

Vektor- oder Bitmapdarstellung

Sie können den Druckauftrag manuell so einrichten, dass jede Seite in der Druckwarteschlange als Vektorgrafik oder Bitmapbild verarbeitet wird. In einigen Fällen wird beim Vektordruck eine kleinere Datei in der Druckwarteschlange erstellt und ein besseres Bild erzielt als beim Bitmapdruck. Wenn der Inhalt jedoch ein Bitmapbild enthält und Sie die Alphatransparenz oder die Farbeffekte beibehalten möchten, drucken Sie die Seite als Bitmapbild. Bei einem nicht PostScript-fähigen Drucker werden alle Vektorgrafiken automatisch in Bitmapbilder umgewandelt.

Sie geben den Bitmapdruck an, indem Sie ein PrintJobOptions-Objekt als dritten Parameter von PrintJob.addPage() übergeben.

Für Flash Player und AIR-Versionen vor AIR 2 stellen Sie den printAsBitmap -Parameter des PrintJobOptions-Objekts auf true ein, wie im Folgenden gezeigt:

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

Wenn Sie keinen Wert für den dritten Parameter angeben, wird der Druckauftrag mit der Standardoption gedruckt, d. h. als Vektordruck.

Für AIR 2 und spätere Versionen verwenden Sie die printMethod -Eigenschaft des PrintJobOptions-Objekts, um die Druckmethode anzugeben. Diese Eigenschaft akzeptiert drei Werte, die als Konstanten in der PrintMethod-Klasse definiert sind:

  • PrintMethod.AUTO : Wählt automatisch die beste Druckmethode auf Grundlage des zu druckenden Inhalts. Wenn eine Seite beispielsweise Text enthält, wird der Vektordruck gewählt. Wenn jedoch ein Wasserzeichen mit Alphatransparenz über dem Text gedruckt wird, wird der Bitmapdruck gewählt, um die Transparenz beizubehalten.

  • PrintMethod.BITMAP : Erzwingt den Bitmapdruck unabhängig vom Inhalt.

  • PrintMethod.VECTOR : Erzwingt den Vektordruck unabhängig vom Inhalt.

Zeitbeschränkung bei Anweisungen für Druckaufträge

In ActionScript 3.0 ist ein PrintJob-Objekt nicht auf ein einzelnes Bild beschränkt (wie dies in früheren Versionen von ActionScript der Fall war). Da im Betriebssystem jedoch Informationen zum Druckstatus angezeigt werden, nachdem der Benutzer im Druckdialogfeld auf die Schaltfläche „OK“ geklickt hat, sollten Sie möglichst bald PrintJob.addPage() und PrintJob.send() aufrufen, damit Seiten an die Druckwarteschlange gesendet werden. Durch eine Verzögerung im Bild mit dem PrintJob.send() -Aufruf wird auch der Druckvorgang verzögert.

In ActionScript 3.0 gilt ein Skriptzeitlimit von 15 Sekunden. Zwischen den einzelnen Hauptanweisungen in einem Druckauftrag dürfen daher 15 Sekunden nicht überschritten werden. Mit anderen Worten, das Skriptzeitlimit von 15 Sekunden gilt für folgende Zeitintervalle:

  • zwischen PrintJob.start() und der ersten PrintJob.addPage() -Anweisung

  • zwischen PrintJob.addPage() und der nächsten PrintJob.addPage() -Anweisung

  • zwischen der letzten PrintJob.addPage() -Anweisung und PrintJob.send()

Beim Überschreiten des Limits von 15 Sekunden bei einem dieser Intervalle wird beim nächsten Aufruf von PrintJob.start() für die PrintJob-Instanz der Wert false zurückgegeben und beim nächsten Aufruf von PrintJob.addPage() für die PrintJob-Instanz in Flash Player oder AIR eine Laufzeitausnahme ausgelöst.