La fonction PDF

  • La fonction PDF

    Posté par Fabrice sur 9 février 2024 à 18h46

    Bonsoir,

    Je fais face à une difficulté à l’utilisation de la fonction PDF.
    Je souhaite générer un document pdf en format A4. J’ai deux écrans. A l’issue du second écran, je souhaite générer le pdf et l’envoyer par mail. Normalement, cette dernière partie devrait fonctionner.

    En consultant la documentation Microsoft, il est écrit

    Vous ne pouvez générer un PDF qu’à partir du contenu existant sur l’écran où vous avez appelé la fonction PDF. Par exemple, si vous avez ajouté la fonction PDF sur l’écran deux, seul le contenu de l’écran deux peut être inclus dans le PDF généré.”

    Les formules que j’utilisent sont les suivantes :

    Faut-il que je mette toutes mes données sur un écran ? 🤔

    En fait j’ai à peu près tout essayer 😅.

    Je vous remercie pour vos lumières.

    Geoffroy a répondu Il y a 1 mois, 1 semaine 5 Membres · 36 Réponses
  • 36 Réponses
  • Geoffroy

    Membre
    9 février 2024 à 18h53

    Bonjour Fabrice,

    Effectivement, on ne peut utiliser la fonction PDF que sur l’écran en cours.

    Il existe une astuce pour imprimer plusieurs pdf (un pour chaque écran) en utilisant des timers. Si ça peut répondre à ton besoin, je te passe la marche à suivre.

  • Fabrice

    Membre
    9 février 2024 à 18h58

    Merci Geoffroy pour ta réponse. Je m’en doutais un peu…

    Oui je veux bien stp ta procédure pour l’impression.

    Merci d’avance

  • Geoffroy

    Membre
    9 février 2024 à 19h06

    <div class=”x1e56ztr”>

    Le principe est le suivant : le bouton d’impression lance un premier timer qui va générer le PDF sur son OnTimerEnd, ainsi que le changement d’écran puis le lancement du second timer qui va exécuter les mêmes actions sur un autre écran. Et ainsi de suite, jusqu’au timer final qui va, en plus, envoyer un mail contenant tous les pdf générés en pièce jointe.

    Les propriétés du timer n° N placé sur l’écran Screen_N sont :
    Duration : 0
    Start : varDébut_N
    OnTimerEnd : Set(Impression_N;PDF(Screen_N));; Set(varDébut_N;false);; Set(varDébut_N+1;true);; Navigate(Screen_N+1)

    Le OnTimerEnd du dernier timer sur l’écran Screen_X sera un peu différent :
    Set(Impression_X;PDF(Screen_X));; Set(varDébut_X;false);;
    Office365Outlook.SendEmailV2(User().Email;”Titre du mail”;”Corps du mail”; {Attachments:Table({Name:”Impression_1.pdf”;ContentBytes: Impression_1};… ;{Name:”Impression_X.pdf”;ContentBytes: Impression_X})})
    On crée une table avec les différents pdf qu’on place dans la propriété Attachments de la fonction SendMailV2.

    Pendant le processus, chaque écran va apparaitre pendant une demi-seconde environ, le temps que la fonction PDF fasse son œuvre (car elle ne marche pas sur un contrôle non visible).

    Dernier point : pour faire tes tests, il faut impérativement te placer en mode Aperçu. Si tu lances l’action avec le bouton Alt, ça va bloquer le timer et tu devras sortir de l’appli et la rouvrir.

    Si quelqu’un a des idées pour améliorer cette méthode, je suis preneur.

    </div>

    • Cette réponse a été modifiée Il y a 9 mois, 2 semaines par  Geoffroy.
  • Fabrice

    Membre
    13 février 2024 à 15h42

    Bonjour,

    Merci beaucoup pour le partage 🍾

  • Fabrice

    Membre
    16 février 2024 à 17h03

    J’ai retravaillé mes écrans et je ne suis pas loin de réussir.

    Je réceptionne bien mon fichier PDF, les données sont bien enregistrées mais lorsque j’envoie le pdf par mail, j’ai, à l’écran, une page vierge !

    Avez vous une idée svp ?
    Merci d’avance

  • Geoffroy

    Membre
    16 février 2024 à 18h42

    Bonjour Fabrice,

    Tu PDFises un écran complet ou un contrôle ?

  • Fabrice

    Membre
    17 février 2024 à 10h42

    Bonjour Geoffroy,

    Merci encore pour ton retour.

    Oui, je sélectionne bien l’écran avec l’écran PDF(Screen1). Je n’ai aucun message d’erreur.

    Je pense être “victime” de cette limitation connue :

    “Les types d’écritures non latines et les poids et styles de police tels que le gras et l’italique peuvent ne pas apparaître dans le PDF généré pour certaines polices.”

    A l’écran, il y a pas mal de contrôles avec des caractères gras et j’utilise par défaut la police de power apps. J’ai commencé à supprimer plusieurs champs et les données commencaient à apparaitre sur le PDF. Je pense devoir “allèger” le formulaire ou trouver un autre moyen.

    Je continue de creuser😅.

    Merci encore !

  • Geoffroy

    Membre
    17 février 2024 à 12h00

    Une piste à explorer : voir si le problème ne vient pas en priorité du contrôle qui se trouve au premier plan et qui pourrait donc masquer le reste.

  • Fabrice

    Membre
    18 février 2024 à 11h38

    Comment je peux le vérifier ?

    (pardon si ma question est bête)

  • Geoffroy

    Membre
    18 février 2024 à 11h43

    Tu peux déplacer les éléments de l’écran dans le menu de gauche avec la fonction “Réorganiser”. Il y a aussi des raccourcis clavier (Ctrl+) pour reculer, Ctrl+^ pour avancer).

    Ce n’est qu’une hypothèse, rien ne dit que ça va marcher.

    P.S : il n’y a jamais de question bête 😉

  • Fabrice

    Membre
    18 février 2024 à 12h40

    Ok, je testerai.
    Merci.

  • R3dKap

    Membre
    19 février 2024 à 11h37

    Salut Fabrice,

    Sur une grosse app actuellement, j’utilise la fonction PDF() sur un écran où j’ai énormément de contrôles et de contenu, avec du gras, de l’italique, etc. et ça fonctionne très bien (c’est juste un peu long à se générer). Selon moi, tant que tu utilises la police par défaut de Power Apps (la Open Sans par ex.) y’aura pas de soucis de ce côté-là.

    Ton problème doit se situer ailleurs…

    Est-ce que tu peux préciser :

    1. Comment le PDF est envoyé par mail ? Via un flux Power Automate ou directement à partir de ton app via le connecteur Outlook ?
    2. Qu’est-ce qui est vide exactement ? Le contenu du PDF ou l’écran de ton app suite à l’envoi ?
    3. Est-ce que tu as du code juste après l’appel de la fonction PDF() (genre une navigation vers un autre écran) ? Car il faut laisser le temps à la fonction PDF() de faire son travail. Si tu navigues trop vite, il y a un risque que ton écran ne soit plus actif pour la fonction PDF().
  • Fabrice

    Membre
    19 février 2024 à 13h41

    Salut R3dKap,

    Merci de te soucier de ma difficulté.

    Pour répondre à tes questions :

    1. Le mail est envoyé depuis l’app avec le connecteur Outlook.
    2. l’écran est vide suite à l’envoi. J’ai uniquement un logo sur 3 qui s’affiche. Tous les labels et contrôles n’apparaissent pas.
    3. Oui, il y a un code de navigation.

    Merci d’avance

  • Fabrice

    Membre
    19 février 2024 à 14h20

    Bonjour Geoffroy,

    J’ai touché à la fonction “réorganiser”, mais rien y a fait…

    Je sais que je ne suis pas loin de réussir mais là je sèche…

  • R3dKap

    Membre
    19 février 2024 à 14h43
    1. Du coup le contenu du PDF est bien généré ? Il y a le bon contenu dedans ?
    2. Puisque tu as un Navigate() après ta fonction PDF() est-ce l’écran que tu quittes (celui qui a servi à la génération du PDF) ou celui sur lequel tu arrives (suite au Navigate()) qui est vide ?
Page 1 sur 3

Connectez-vous pour répondre.