Bonjour à tous,
Voici le soucis du jour que je rencontre. Je dispose d'un état (pour faire des factures) contenant dans le bloc corps un champ texte rtf auto-extensible, ayant vocation à recevoir un texte plus ou moins volumineux. Si j'arrive en fin de page et que l'ensemble du texte ne peut être affiché, la suite est inscrite au début de la seconde page.
Mais lorsque je m'amuse à insérer un bloc d'itération pour gérer un dos de page à la suite, c'est là que cela se corse ; en gros je souhaite obtenir concrètement ma première page de facture, sur la seconde j'ai les conditions de vente (qui est le dos de page), puis sur la troisième la suite de ma facture, et enfin à nouveau les conditions de vente (il faut que l'imprimante fasse du recto-verso mais c'est une autre histoire)
Par exemple la dernière ligne de la 1ere page s'achève par un texte long du genre "Les certificats auto-signés sont des certificats à usage interne. Signés par un serveur local, ce type de certificat permet de garantir la confidentialité des échanges au sein d'une organisation, par exemple pour le besoin d'un intranet."
ça coupe en fin de première page au mot "organisation". On affiche le dos de page. Au début de la 3eme page, au lieu d'avoir la suite, c'est à dire ", par exemple pour le besoin d'un intranet", j'ai le début du texte ("Les certificats auto-signés sont des certificats à usage..."), mais dans un espace correspondant à ce qui aurait dû être imprimé.
L'état est architecturé comme suit au niveau des blocs:
Haut de page: BLOC_HAUT
Debut de rupture: BLOC_DRPT
Corps: BLOC_CORPS
Bas de rupture: BLOC_FRPT
Bas de page: BLOC_BAS
Fin de document: BLOC_FIN
Dos de page (itération): BLOC_DOS
Bas de dos (itération): BLOC_BAS_DOS
Les éléments de code que j'ai ajouté pour gérer ce dos sont les suivants:
Debut de rupture: Après impression:
Dos de page: avant impression
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SI gererDos=Vrai ALORS iSubstBloc(BLOC_HAUT,BLOC_DOS) SINON iSubstBloc(BLOC_HAUT,BLOC_DRPT) FIN iSubstBloc(BLOC_BAS,"")
Dos de page: après impression
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 BLOC_DOS..Hauteur =iHauteurRestantePage()-0.001 TEXTEDEDOS..Hauteur =iHauteurRestantePage()-0.001 iSubstBloc(BLOC_BAS,BLOC_BAS_DOS)
Fin de document: Avant impression
Code : Sélectionner tout - Visualiser dans une fenêtre à part iSubstBloc(BLOC_HAUT,BLOC_DRPT)
Sans tout ces ajouts la coupure du champ entre deux pages est bien gérée, mais comme je n'ai pas beaucoup l'habitude de manipuler les états, j'ai sans doute fait un truc pas terribles
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 BLOC_FIN..Hauteur=0 SI gererDos=Vrai ALORS BLOC_HAUT..Visible=Faux iSubstBloc(BLOC_HAUT,"") iTerminePage() iImprimeBloc(BLOC_DOS) FIN
D'avance merci pour vos conseils !
Partager