La classe Print
cs.bspkComponent.Print imprime des formulaires 4D de votre application, sur une imprimante ou en PDF, avec des en-têtes répétés à chaque page, un pied de page poussé en bas de page, la pagination, et des objets qui s'agrandissent selon leur contenu.
Un exemple
$vo_Param:={vt_Mode: "pdf"; vt_TypeFile: "pdf"; vb_Erase: True; vb_Preview: False}
$vo_Param.vt_PathFolder:=Folder(Data folder; *).folder("temporary files").platformPath // se termine par un séparateur
$vo_Param.vt_Filename:="Commande_"+$vt_Numero
$Print:=cs.bspkComponent.Print.new($vo_Param) // ouvre le travail d'impression
If ($vo_Param.vb_OK_Print)
vo_Form:=New object // variable process de VOTRE application, lue par le formulaire
vo_Form.vt_Numero:=$vt_Numero
$Print.printForm("CommandePrint"; Form header)
$Print.printForm("CommandePrint"; Form header1; "H2_ovt_Fournisseur") // l'objet s'agrandit selon son texte
// à partir d'ici, ces taquets sont réimprimés en haut de chaque nouvelle page
$Print.vc_ConstantMarkerHeader:=New collection(Form header4; Form header5)
$Print.vb_HeaderPage:=True
$vc_Bloc:=[{vt_FormName: "CommandePrint"; vl_ConstantMarker: Form detail; vl_NumberMarker: 1}; \
{vt_FormName: "CommandePrint"; vl_ConstantMarker: Form break0; vl_NumberMarker: 1}]
For each ($Ligne; $Commande.Lignes)
vo_Form.vt_Designation:=$Ligne.designation
If (Not($Print.canPrintBloc($vc_Bloc; True; 0))) // la ligne et la fermeture ne tiennent plus
$Print.printForm("CommandePrint"; Form break0)
$Print.nextPage(False; "CommandePrint") // imprime le pied, nouvelle page
End if
$Print.printForm("CommandePrint"; Form detail; "Body_ovt_Designation")
End for each
$Print.printForm("CommandePrint"; Form break0)
$Print.printForm("CommandePrint"; Form footer)
$Print.endPrint()
End if
return $Print.vt_PathFile
Trois règles :
- toujours
new()d'abord (il ouvre le travail d'impression) etendPrint()à la fin ; - la méthode formulaire d'un formulaire imprimé est
BSPK_EXEC_FC; - chaque formulaire imprimé garde ses deux derniers taquets à 1 pixel d'écart.
Les paramètres du constructeur
| Propriété | Par défaut | Rôle |
|---|---|---|
vt_Mode | "print" | "print" (imprimante), "pdf" (fichier), "file" (PDF envoyé au navigateur, dans une requête web) |
vt_PathFolder | — | Le dossier du fichier, terminé par un séparateur. Vide : un dialogue de choix s'ouvre. Créé s'il n'existe pas. |
vt_Filename, vt_TypeFile | "Print", "pdf" | Le nom du fichier, sans extension, et l'extension. |
vb_Erase | Faux | Faux : un fichier existant est gardé, le nouveau reçoit un suffixe (n). |
vb_Preview | Vrai | En mode "pdf", ouvre le PDF à la fin. |
vl_Orientation | 1 | L'orientation de la page. |
vb_NeedPrintSetting | vrai en mode "print" | Affiche les dialogues de réglage d'impression. |
vc_ConstantMarkerHeader | [] | Les taquets réimprimés en haut de chaque page (ou un seul : vl_ConstantMarkerHeader). |
vb_FooterEndPage | Vrai | Pousse le pied de page en bas de page. |
vt_Lang | — | La langue des traductions pendant l'impression. |
vt_Printer, vl_NumberCopy, vl_Scale, vl_PaperWidth / vl_PaperHeight, vl_DoubleSided, vl_RangeStart / vl_RangeEnd | — | Transmis aux options d'impression de 4D. |
Il n'y a pas de réglage de marges : elles sont mises à zéro.
Les fonctions
| Fonction | Rôle |
|---|---|
printForm($formulaire; $taquet; $objetAgrandi; $finDePage) | Imprime une zone du formulaire. Si elle ne tient plus, imprime le pied et passe à la page suivante ; imprime l'en-tête de page si besoin. $objetAgrandi : le ou les objets (séparés par ;) à agrandir selon leur contenu, dont le bas est sur le taquet. |
canPrintBloc($zones; $avecPied; $marge) → Booléen | Ce groupe de zones tient-il encore dans la page ? |
nextPage($sansPied; $formulaire) | Termine la page (avec ou sans pied). |
endPrint() | Ferme l'impression, ouvre le PDF ou l'envoie au navigateur. Ne renvoie rien. |
Le fichier produit est dans $Print.vt_PathFile. Pour l'envoyer par mail : $Mail.addAttachements($Print.vt_PathFile; "Commande.pdf") (voir La classe Mail).
Le composant imprime vos formulaires par la méthode BSPH_Print_Form de votre projet : ne la supprimez pas.
Selon la plateforme
- Sous Windows, le PDF passe par le pilote Generic PDF driver s'il est installé, sinon par Microsoft Print to PDF. L'imprimante courante n'est pas restaurée après l'impression.
- Sous macOS, par la sortie PDF de 4D.
- Sur 4D Server, évitez les modes qui ouvrent des dialogues (choix du dossier, réglages d'impression).
Bon à savoir
- Avec
vb_Preview, le composant ouvre déjà le PDF : ne l'ouvrez pas une seconde fois. - Si le choix du dossier est annulé, aucun chemin de fichier n'est défini.
vo_Formest une variable process de votre application : initialisez-la aprèsnew().

