Flash et l’impression

Flash a fait pas mal d’efforts en ce qui concerne l’impression.

En effet, vous pouvez lancer une impression directement le flash player et définir de façon précise ce qui sortira sur l’imprimante :
- imprimer tel ou tel objet, au format vectoriel ou bitmap (afin de conserver la transparence par exemple)
- Imprimer des zones
- Imprimer en plusieurs pages

La fonction print permet par exemple d’imprimer un clip.

Toutefois, afin de définir plus finement des impressions, il est préférable de passer par la classe PrintJob, dont je vous invite à lire la doc

Dans l’ensemble, la plupart des besoins lorsqu’on a besoin d’imprimer quelque chose sont résolus grâce à printJob et à la fonction addPage, permettant d’imprimer un niveau, un clip, ou une zone en tant que page unique au spouleur d’impression...

Ainsi vous maitriser de A à Z ce qui sort sur l’imprimante, vous pouvez même lire les paramètres d’impressions de l’utilisateur,(largeur, orientation) et mettre dynamiquement en forme votre contenu à imprimer.

Un problème : un champ texte multilignes

Toutefois, comment faire pour imprimer un texte long qui dépasse de son conteneur, comme par exemple :

- un champ texte dynamique chargeant du texte en externe, et dont on fait défiler le texte en action script avec 2 boutons sur les cotés

- L’utilisation d’un composant TextArea, avec beaucoup de texte, et donc apparition d’une scrollBar.

En effet, pour un texte long, le problème qui se pose est le suivant : si on lance l’impression sur cet objet par un print job, cela n’imprime que le texte visible, pas les lignes suivantes qui sont "en dessous".

De plus, pour le textArea, la scrollBar est également imprimée (ce qui n’est pas super grave en soit, mais si vous voulez faire un truc super bien léché ce serait bien qu’elle ne s’affiche pas, non ?)

Une solution assez logique en somme...

La solution à ce problème est également apportée par PrintJob et addPage.

En effet, à partir de votre texte, vous avez accès au nombre total de lignes de votre texte, et du nombre de lignes "visibles" dans le champ texte.

A partir de ces informations, on peut donc diviser nbTotal / nbVisibles afin d’obtenir un "nombre de pages".

Puis de boucler sur ce nombre de page en appelant addPage sur le champ texte, et en ayant fait défiler le champ texte du nombre de lignes visibles.

Mise en pratique

Voici en anglais la mise en application pour un composant texte Area Cliquez ici pour lire l’exemple

Pour un textField, la façon de faire est quasi similaire, mais les propriétés à utiliser sont sont :
-  bottomscroll (nb lignes visibles)
- maxscroll (nb total de lignes
- et enfin scroll, qui permet de définir la position verticale du texte (par exemple afficher la 10ième ligne d’un texte de 50 lignes au final, en tant que première ligne affichée dans un champ texte qui n’affiche que 5 lignes... vous suivez toujours là ? sinon relisez tranquillement cette phrase)