La fonction ImprimeTable, de la collection COL_Impression de Betula, va imprimer la table passée en paramètre « tel qu’à l’écran » (contenu, largeur des colonnes). En soi, c’est proche de la fonction TableImprime mais avec une 50aine de paramètres supplémentaires que vous pouvez ajuster à votre goût. Voyez ce que ça donne dans cette présentation vidéo.
Cette table peut être une table classique ou hiérarchique, mémoire ou fichier. Dans ce dernier cas, l’impression ne tient pas compte de la hiérarchie (tous les éléments de la colonne hiérarchique seront imprimés sur le même niveau). De même, toute rupture est également ignorée dans cette fonction.
Pour aider à bien paramétrer votre impression, voici un projet test qui fait appel à la fenêtre interne présente dans Betula. Vous pouvez cliquer dans cette fenêtre interne/page pour changer les couleurs de texte, de fond, de séparateurs, … Téléchargez l’exemple en cliquant ici.
Si vous le souhaitez, vous pouvez personnaliser et intégrer la fenêtre illustrée ci-dessous à vos projets (disponible dans l’exemple) pour donner accès, à l’utilisateur final, à toutes ces options. Des profils sont gérés via un fichier INI.
Syntaxe
ImprimeTable (<xNomTable> [, <stOptions> est un stImpressionTableOption) : entier
Paramètres
xNomTable : Nom de la table (soit Table_Valeurs..nom, soit « Table_Valeurs »)
stImpressionTableOption (structure) :
sTitrePage (chaîne – valeur par défaut=NULL) | Titre de l’impression. S’affichera en haut de la première page (au-dessus des titres de colonnes si demandé, sinon au-dessus des données) et sur toute les autres pages (si demandé avec l’option RépèteTitreChaquePage). Le titre peut contenir des RC pour avoir plusieurs lignes. La première ligne est toujours imprimée avec une police 20% plus grande, les autres lignes auront une taille standard (comme la taille du texte des données). Le titre peut aussi contenir le chemin complet d’une image. Celle-ci s’imprimera dans le coin haut à gauche de la page (voir remarques) |
polTexte (police – valeur par défaut=xNomTable..police) | Caractéristique de la police de caractères qui sera utilisée pour imprimer la table (voir remarques) |
xLogo | Image (objet image ou chaîne de caractères) pour afficher le logo de la compagnie en haut à gauche du document. |
nNbExemplaire (entier – valeur par défaut 1) | Nombre d’exemplaires à imprimer (est prioritaire sur l’option PasFinImprime) |
nNbPagesMax (entier – valeur par défaut=0) | Nombre de page à imprimer, depuis la première. Mettre 0 (zéro) pour imprimer toutes les pages. Attention, si l’on utilise une valeur > 0, l’ordre d’impression dépendant du type d’assemblage choisi (voir remarques) |
rHauteurMaxLigne (réel – valeur par défaut=0.0) | Hauteur d’une ligne de données (est influencé par le facteur de « zoom ») |
rMargeHaut(réel – valeur par défaut 5.0) | Marge de haut de page en millimètres |
rMargeBas (réel – valeur par défaut 5.0) | Marge de bas de page en millimètres |
rMargeGauche (réel – valeur par défaut 5.0) | Marge de gauche en millimètres |
rMargeDroite (réel – valeur par défaut 5.0) | Marge de droite en millimètres |
sColonneAncrée (chaîne – valeur par défaut=vide) | Nom de la colonne qui est susceptible de s’élargir pour imprimer la table sur toute la largeur de la page |
sColonneSélection (chaîne – valeur par défaut=vide) | Nom complet de la colonne à imprimer |
sFormatDate (chaîne – valeur par défaut= »JJ/MM/AAAA ») | Voir la documentation PC SOFT de DateVersChaine |
sFormatHeure (chaîne – valeur par défaut= »HH:MM:SS ») | Voir la documentation PC SOFT de HeureVersChaine |
sFormatMonétaire (chaîne – valeur par défaut= »10.2fS ») | Voir la documentation PC SOFT de NumériqueVersChaine |
nNumPageDépart (entier – valeur par défaut=1) | Valeur de début de numérotation de page (ne fonctionne que si l’on choisi d’imprimer le numéro de page) |
sPiedDePageGauche, sPiedDePageDroite, sPiedDePageCentre (chaîne – valeur par défaut=vide) | Textes à imprimer en bas de page (1 seule ligne est prise en compte) |
eTraitH (énumération EImpressionTableTrait = TypeAucun (par défaut), TypeContinu, TypePointillé, TypeMixte, TypeTiret) | type de trait du séparateur horizontal |
eTraitV (énumération EImpressionTableTrait = TypeAucun (par défaut), TypeContinu, TypePointillé, TypeMixte, TypeTiret) | type de trait du séparateur vertical |
taCouleurs (tableau associatif d’entiers (couleur) – valeur par défaut=vide) | Exemple : taCouleurs[CouleurLignePaire]=CyanClair
La couleur est un entier de 0 a 16777216 (voir la documentation PC SOFT). Les constantes reconnues pour le type sont :
|
taColonnes (tableau associatif de stImpressionTableColonne – valeur par défaut=vide) | stImpressionTableColonne (structure) :
|
coAutresOptions (combinaison COImpressionTableOption) |
|
Valeur de retour :
entier : nombre de pages imprimées
Contraintes techniques
La fonction ImprimeTable ne peut pas être appelée dans un état (comme pour imprimer un sous-état);
Le texte du titre et le texte du pied de page ne peuvent pas contenir de TAB si l’on utiliser un profil (le fichier ini n’accepte pas ces caractères);
L’option d’impression en tons de gris ne fonctionne que pour les textes, les lignes et les couleurs de fond; pas pour les images.
La fonction n’imprime que les colonnes visibles à l’écran, même si l’on insère le nom d’une colonne invisible dans le paramètre taColonnes. En effet, l’impression se base sur la largeur des colonnes à l’écran. Ces dernières doivent donc être visibles de l’utilisateur (qui pourrait alors les modifier pour modifier la présentation de son rapport).
Lors de l’utilisation de l’option OptionCouleurTable, seules les couleurs de fond et de caractères des lignes paires, des lignes impaires et des cases sont prises en compte. Les autres propriétés ne sont pas accessibles par programmation en WinDev.
Astuces
- Le nom des colonnes à imprimer doit être sous forme NomDeFenêtre.NomDeTable.NomDeColonne, ceci pour garantir l’exacte correspondance entre ce qui est vu et ce qui est imprimé (car parfois le même nom de colonne peut se retrouver dans plusieurs table de la fenêtre).
- La fonction ne gère pas le paramètre iAperçu. Vous devez donc, dans le code, utiliser (ou pas) iAperçu avant d’appeler la fonction ImprimeTable.
- Lors d’un aperçu avant impression, si l’on utilise ImprimeTable et ensuite un iImprimeEtat() standard, il faut mettre un iAperçu avant chacune des deux instructions.
- Malgré que la procédure n’imprime que les colonnes « visibles » (celles dont la propriété ..visible = vrai), il n’est pas interdit d’avoir la table invisible ou cachée dans une partie non visible de l’écran. Cela permet de « préparer » le contenu à imprimer dans une table non visible de l’utilisateur et d’ensuite lancer une impression dessus. Cette astuce peut être utilisée notamment lors de l’impression de table trop complexes ou contenant des fond de lignes images, …
Adaptation de l’impression à la largeur de la page
La fonction est construite de telle sorte à adapter la taille des caractères (et donc la hauteur et largeur des colonnes) automatiquement. En effet, lorsque la largeur de la table dépasse la largeur d’une page (selon l’orientation demandée dans un autre paramètre), la procédure commence par diminuer la taille de caractères pour voir si la table peut finir par entrer dans la page (la taille minimale est de 3). Si ce n’est pas possible, et que l’orientation portrait avait été choisie, la procédure passe automatiquement en paysage et refait le même calcul. Pour éviter ce passage automatique en mode paysage, il faut explicitement cocher « Force orientation portrait » ou utiliser OptionForcePortrait. Si finalement la ligne de table ne rentre pas dans la largeur de page, plusieurs pages seront alors imprimées sur la largeur. Dans ce cas, il faut être attentif aux options d’assemblage.
Dans l’autre sens, si une impression de table ne rempli pas la largeur de la page, et pour éviter que la dernière colonne soit plus large qu’elle n’apparaît, il est possible de sélectionner une colonne « ancrée » dont la largeur va s’adapter et gardera ainsi la proportion des autres colonnes. Habituellement, l’on ancre la première colonne.
Option d’assemblage
Grâce à ces fonctions, il est donc possible d’imprimer soit toutes les pages en largeur et ensuite les prochains enregistrements, soit les premières colonnes sur tous les enregistrements et ensuite les colonnes suivantes sur tous les enregistrements. Exemple : l’impression a besoin de 3 pages en largeur (pour contenir toutes les colonnes), soit a,b,c et 10 pages en hauteur (pour les 847 enregistrements) soit 1,2,3,4,..10. Chaque page est alors identifiée comme 1a, 1b, 1c, 2a, 2b, 2c, 3a, 3b, 3c … 10a, 10b et 10c.
- L’option « Assemblé » ou l’absence de OptionNonAssemblée imprimera les pages dans l’ordre suivant : 1a, 2a, 3a, 4a, … 10a, 1b, 2b, 3b, 4b … 10b, 1c, 2c, 3c, 4c … 10c
- L’option « Non assemblée » ou l’utilisation de OptionNonAssemblée imprimera les pages dans l’ordre suivant : 1a, 1b, 1c, 2a, 2b, 2c, … 10a, 10b, 10c
Attention, si l’on choisi un nombre de pages limité (différent de 0 qui imprime toutes les page), l’on imprime évidemment la table selon l’ordre précité.
Impression des lignes sélectionnées
La fonction ImprimeTable() permet de n’imprimer que les lignes sélectionnées. Pour faire cela, il faut d’une part ajouter OptionLigneSélectionnée et il faut ensuite être dans un des cas suivant : soit la table est multi-sélection (propriété ..MultiSélection) et l’impression se basera sur la propriété ..Sélectionnée de chaque ligne de la table, soit la première colonne est de type « coche » et elle sera utilisé comme élément de sélection. Dans ce dernier cas, la première colonne est la première visible de la table.
Impression d’un logo (image)
La fonction ImprimeTable() permet d’imprimer un logo dans le coin supérieur gauche. Il faut, pour cela, que l’image soit sous forme de fichier (les images issues d’un mémo image doivent d’abord est sauvegardées sous forme de fichier). Ensuite, il suffit juste de mettre le chemin de l’image dans le paramètre xLogo. Ex : « D:\Images\LogoCompagnie.png ».
Attention, le logo s’imprimera sans « marges » programmées. Si le logo est au bord de l’image, le cadre s’imprimera à raz de l’image. Pour éviter cet effet visuel indésirable, ajoutez quelques pixels (grâce un logiciel de traitement d’image comme Paint livré en standard dans Windows) de chaque côté de l’image pour qu’il puisse, visuellement, se distancier du reste des éléments qui seront imprimés autour de lui.
La taille de l’image imprimée est basée sur les deux instructions standards : iHauteurImage() et iLargeurImage(). Si l’image semble trop petite ou trop grande, merci de vérifier, grâce à ces instructions, combien de mm l’image prend en hauteur et largeur. Pour changer la taille du logo, utilisez un logiciel de traitement d’image (comme Paint livré en standard dans Windows).
Le logo s’imprime dans la zone de titre et en avant plan de la couleur de fond de titre.
Attention, la zone de titre peut s’agrandir si la hauteur du logo dépasse celle des lignes de titre. Les titres imprimés dans cette zone seront alors centrés verticalement sur la hauteur de la zone (et donc de l’image).