Je cherche à développer une méthode pour contrôler la génération de PDF à partir de données de rapport. Je souhaite pouvoir modifier la mise en forme de l'en-tête et du pied de page, et y intégrer un logo. Auriez-vous des suggestions ?
Ah, je viens de passer par là pour créer des rapports PDF multipages dans JMP 19, alors laissez-moi vous épargner les maux de tête que j'ai endurés.
Franchement : vous avez un certain contrôle, mais pas autant que vous l'espériez, et il vaut mieux le savoir avant de se lancer que de le découvrir à ses dépens comme moi.
For headers and footers, you've got Set Print Headers(left, center, right) and Set Print Footers(...) to match — three little text slots each. They take plain text plus some handy tokens, so "Page &pn; of &pc;" dropped in the right footer slot gives you "Page 1 of 5" and so on. Works great. But here's what got me: they're texte uniquement, and you can't set the font size in the script at all — it secretly follows the "Small" font role tucked away in File ▸ Preferences ▸ Fonts. Took me forever to realize that's why my footer wouldn't shrink. And if you try to stack two lines in one slot, watch out — the \!N newline thing the docs mention straight-up didn't work on my JMP 19 build and silently nuked the entire header. No error, just gone.
Page setup itself is actually solid, no complaints there. Set Page Setup(margins(...), scale(n), portrait(0), paper size("Letter")) handles orientation, margins, scaling, all fine. Just remember to tack on Save PDF(path, Show Page Setup(0)) — that little Show Page Setup(0) shuts off the print dialog popup, which you'll really want once you're cranking out a stack of these unattended.
Le logo pose problème. Comme les en-têtes et les pieds de page ne contiennent que du texte, il est impossible d'y insérer le logo ; il n'existe donc aucune solution intégrée pour l'afficher sur chaque page. La solution consiste à l'intégrer dans le corps du rapport sous forme de zone d'image, et vous pouvez l'encoder directement en base64 pour éviter de gérer un fichier image séparé.
<SPAN>Picture Box( New Image( Char To Blob( logoB64, "base64" ), "png" ) )</SPAN>
Park that at the top of your outer V List Box and boom, you've got a letterhead — but page 1 only, 'cause the body just renders wherever it lands.
Si vous tenez absolument à ce logo sur chaque page, je dois vous avouer que JMP 19 ne le fera pas automatiquement. J'ai donc opté pour une solution en deux étapes : j'ai d'abord généré le PDF avec JMP, puis j'ai exécuté un petit script pour ajouter le logo sur chaque page. Python, avec pypdf ou reportlab, permet de le faire en quelques lignes sur tout le dossier. Ce n'est pas très esthétique, mais c'est extrêmement fiable, et une fois configuré, on l'oublie complètement.
En résumé : JMP 19 est excellent pour la gestion des données et offre des en-têtes/pieds de page et une mise en page corrects, ainsi qu'un logo en première page. En revanche, il ne permet pas d'ajouter d'images par page ni de contrôler les polices depuis le script. Si la présence d'un logo sur chaque page est essentielle pour vous, laissez JMP générer le PDF et apposez votre logo ensuite, plutôt que de vous acharner à tout forcer dans JMP comme je l'ai fait.
Merci d'avoir partagé votre expérience.