Tâches des moteurs d’exécution de Flash et impression système

Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures

Les moteurs d’exécution de Flash transmettent des pages à l’interface d’impression du système d’exploitation ; veillez donc à identifier les tâches gérées par les moteurs d’exécution de Flash et celles gérées par l’interface d’impression du système d’exploitation. Les moteurs d’exécution de Flash peuvent initialiser une tâche d’impression, lire certains des paramètres de page de l’imprimante, transmettre le contenu d’une tâche d’impression au système d’exploitation et vérifier si l’utilisateur ou le système annule une tâche. D’autres processus, tels que l’affichage de boîtes de dialogue spécifiques à l’imprimante, l’annulation d’une tâche d’impression mise en file d’attente ou l’indication de l’état de l’imprimante, sont supervisés par le système d’exploitation. Si les moteurs d’exécution de Flash sont capables de réagir en cas de problème d’initialisation ou de formatage d’une tâche d’impression, ils peuvent uniquement signaler certaines propriétés ou conditions transmises par l’interface d’impression du système d’exploitation. C’est le rôle du développeur d’élaborer un code susceptible de répondre à ces propriétés ou conditions.

Utilisation des exceptions et des renvois

Avant d’appeler addPage() et send() , vérifiez que la méthode PrintJob.start() renvoie la valeur true , au cas où l’utilisateur aurait annulé la tâche d’impression. Une manière simple de vérifier si ces méthodes ont été annulées avant de poursuivre consiste à les intégrer à une instruction if , comme suit :

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

Si PrintJob.start() est défini sur true , l’utilisateur a sélectionné Imprimer ou un moteur d’exécution de Flash, tel que Flash Player ou AIR, a initié une commande d’impression. Vous pouvez alors appeler les méthodes addPage() et send() .

En outre, pour faciliter la gestion du processus d’impression, les moteurs d’exécution Flash renvoient des exceptions pour la méthode PrintJob.addPage() . Vous pouvez ainsi intercepter les erreurs et fournir des informations et des options à l’utilisateur. Si une méthode PrintJob.addPage() échoue, il est également possible d’appeler une autre fonction ou d’arrêter la tâche d’impression en cours. Vous interceptez ces exceptions en intégrant des appels addPage() à une instruction try..catch , comme illustré par l’exemple suivant. Dans cet exemple, [params] constitue un espace réservé pour les paramètres spécifiant le contenu réel à imprimer :

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

Une fois la tâche d’impression lancée, vous pouvez ajouter le contenu à l’aide de PrintJob.addPage() pour voir s’il génère une exception (par exemple si l’utilisateur a annulé la tâche d’impression). Si tel est le cas, vous pouvez soit ajouter une logique à l’instruction catch pour fournir à l’utilisateur (ou au moteur d’exécution Flash) des informations et des options, soit arrêter la tâche d’impression en cours. Si l’ajout de page réussit, vous pouvez procéder à l’envoi des pages vers l’imprimante à l’aide de PrintJob.send() .

Si le moteur d’exécution Flash rencontre un problème lors de l’envoi de la tâche d’impression à l’imprimante (par exemple, si l’imprimante est hors ligne), il est également possible d’intercepter cette exception. Vous pouvez alors proposer d’autres informations ou options (tel l’affichage d’un message ou le lancement d’une alerte dans une animation). Vous pouvez, par exemple, affecter un nouveau texte à un champ texte dans une instruction if..else , comme illustré par le code suivant :

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

Pour disposer d’un exemple qui fonctionne, voir Exemple d’impression : mise à l’échelle, recadrage et ajustement .

Utilisation des propriétés de page

Lorsque l’utilisateur clique sur OK dans la boîte de dialogue d’impression et que PrintJob.start() renvoie true , vous pouvez accéder aux propriétés définies par les paramètres de l’imprimante. Il s’agit notamment de la largeur et de la hauteur du papier ( pageHeight et pageWidth ) et de l’orientation du contenu sur la feuille. Puisque ces paramètres d’impression ne sont pas contrôlés par le moteur d’exécution Flash, il est impossible de les modifier. Vous pouvez en revanche les utiliser pour faire correspondre le contenu à envoyer à l’imprimante aux paramètres en cours. Pour plus d’informations, voir Définition de la taille, de l’échelle et de l’orientation .

Définition du rendu vectoriel ou bitmap

Vous avez la possibilité de définir manuellement la tâche d’impression de manière à transmettre chaque page sous forme d’image vectorielle ou bitmap. Dans certains cas, l’impression vectorielle produit un fichier de file d’attente plus réduit et une image de meilleure qualité que l’impression bitmap. Toutefois, si le contenu inclut une image bitmap et que vous souhaitez préserver la transparence alpha ou tout autre effet de couleur, imprimez la page en tant qu’image bitmap. En outre, une imprimante non-PostScript convertit automatiquement les graphiques vectoriels en images bitmap.

Vous spécifiez l’impression bitmap en transmettant un objet PrintJobOptions en tant que troisième paramètre de PrintJob.addPage() .

Dans Flash Player et les versions d’AIR antérieures à 2, définissez le paramètre printAsBitmap de l’objet PrintJobOptions sur true , comme suit :

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

Si vous ne spécifiez aucune valeur pour le troisième paramètre, la tâche d’impression utilise le paramètre par défaut, soit l’impression vectorielle.

Pour AIR 2 et les versions ultérieures, faites appel à la propriété printMethod de l’objet PrintJobOptions pour spécifier la méthode d’impression. Cette propriété gère trois valeurs, qui sont définies en tant que constantes dans la classe PrintMethod :

  • PrintMethod.AUTO : choisit automatiquement la méthode d’impression la plus adaptée en fonction du contenu imprimé. Ainsi, si une page ne contient que du texte, la méthode d’impression vectorielle est sélectionnée. Toutefois, si une image en filigrane avec transparence Alpha est superposée au texte, l’impression bitmap est choisie pour conserver la transparence.

  • PrintMethod.BITMAP : impose l’impression bitmap quel que soit le contenu.

  • PrintMethod.VECTOR : impose l’impression vectorielle quel que soit le contenu.

Temporisation des instructions de tâche d’impression

Contrairement aux versions précédentes, ActionScript 3.0 ne limite pas un objet PrintJob à une image unique. Cependant, comme le système d’exploitation indique l’état de l’impression après que l’utilisateur a cliqué sur le bouton OK dans la boîte de dialogue d’impression, appelez PrintJob.addPage() et PrintJob.send() dès que possible pour envoyer les pages au spouleur. Si l’accès à l’image contenant l’appel PrintJob.send() est soumis à un délai, le processus d’impression est également retardé.

Dans ActionScript 3.0, le délai de script est de 15 secondes. Par conséquent, l’intervalle entre chaque instruction essentielle de la séquence de tâche d’impression ne peut pas dépasser 15 secondes. En d’autres termes, la limite de 15 secondes concerne les intervalles suivants :

  • Entre PrintJob.start() et la première instruction PrintJob.addPage()

  • Entre PrintJob.addPage() et l’instruction suivante PrintJob.addPage()

  • Entre la dernière instruction PrintJob.addPage() et PrintJob.send()

Si l’un des intervalles ci-dessus excède 15 secondes, l’appel suivant de la méthode PrintJob.start() pour l’occurrence de PrintJob renvoie false et l’appel suivant de la méthode PrintJob.addPage() pour l’occurrence de PrintJob entraîne le renvoi d’une exception d’exécution par Flash Player ou AIR.