IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Gestion du champs PDF en .NET


Sujet :

WinDev

  1. #1
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2003
    Messages : 1 139
    Points : 4 807
    Points
    4 807
    Billets dans le blog
    22
    Par défaut Gestion du champs PDF en .NET
    Hello tout le monde,

    Je viens vers vous pour avoir votre aide sur un point que je n'arrive pas à solutionner.

    Je voudrais afficher dans un champ PDF WinDev un formulaire et pouvoir remplir et récupérer les données par programmation.
    La version actuelle de WinDev ne donne pas cette possibilité et la version 27 ne le donnera pas non plus (confirmation du support par mail), je me demandais si en ajoutant l'assemblage .Net on pourrait communiquer avec le champs PDF.

    Avez-vous déjà implémenté ce type de programmation ?
    Avez-vous des idées, pistes que je pourrais explorer ?

    Merci par avance pour votre aide.
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  2. #2
    Membre expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    juin 2017
    Messages
    2 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : juin 2017
    Messages : 2 098
    Points : 3 662
    Points
    3 662
    Par défaut
    Bonjour,
    Il faut passer par l'assemblage iText7. Bon courage car la doc est très succincte et les info que l'on trouve sur le net se rapportent souvent à iTextSharp 5 qui est l'ancienne mouture mais (quasiment) totalement différente. Toutefois, avec beaucoup de patience, on obtient ce qu'on désire. Entre autre, pour ce qui m'intéressait la fusion de documents avec signets.
    Il y a peut être plus simple, mais ça tourne

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    juin 2002
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2002
    Messages : 109
    Points : 61
    Points
    61
    Par défaut
    Bonjour,

    Je n'ai jamais utilisé iText7.
    En revanche iTextSharp fonctionne très bien et permet sans problème de faire de la manipulation de champs PDF en .NET.

    Bon courage

  4. #4
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2003
    Messages : 1 139
    Points : 4 807
    Points
    4 807
    Billets dans le blog
    22
    Par défaut
    Un grand merci pour vos réponses.

    A tout hasard, auriez-vous déjà un bout de code qui montre comment on manipule un champs PDF WinDev avec ces librairies.

    Merci par avance
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  5. #5
    Membre expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    juin 2017
    Messages
    2 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : juin 2017
    Messages : 2 098
    Points : 3 662
    Points
    3 662
    Par défaut
    iText7 et feu iTextSharp manipulent le fichier PDF.
    Ce sont des alternatives à la variable pdfDocument.
    Il suffit d'ajouter des boutons qui incluent le code que tu a crée ou alors (et c'est préférable car on ne se "trimbale" qu'ne classe) de remplacer le code des bouton existant (il faut dans ce cas surcharger la FI_WindevFAA_RubanLecteurPDF )
    Il y a peut être plus simple, mais ça tourne

  6. #6
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2003
    Messages : 1 139
    Points : 4 807
    Points
    4 807
    Billets dans le blog
    22
    Par défaut
    Hello,

    je crains d'avoir mal exprimé mon besoin, je ne veux pas modifier le fichier PDF directement mais communiquer avec le champs PDF.

    Dans une fenêtre je veux intégrer un champ PDF et lié un formulaire PDF.
    1. Par programmation récupérer en BDD les données et les insérer dans le champs PDF (maj du formulaire affiché)
    2. Par programmation récupérer les données du formulaire affiché dans le champs PDF et faire une MAJ de la BDD.



    Comme WinDev n'a pas de fonction pour gérer ce besoin, je m'orientais sur programmer ces échanges en .NET


    Merci par avance pour votre aide.
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    juin 2002
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2002
    Messages : 109
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par dsr57 Voir le message
    Hello,

    je crains d'avoir mal exprimé mon besoin, je ne veux pas modifier le fichier PDF directement mais communiquer avec le champs PDF.

    Dans une fenêtre je veux intégrer un champ PDF et lié un formulaire PDF.
    1. Par programmation récupérer en BDD les données et les insérer dans le champs PDF (maj du formulaire affiché)
    2. Par programmation récupérer les données du formulaire affiché dans le champs PDF et faire une MAJ de la BDD.



    Comme WinDev n'a pas de fonction pour gérer ce besoin, je m'orientais sur programmer ces échanges en .NET


    Merci par avance pour votre aide.

    Hmmm, le problème c'est que :
    L'affichage du PDF se fera très bien directement en Windev.
    Et l'idée serait de "sous-traiter" la partie qui concerne la lecture et l'écriture des champs du PDF à une librairie conçue pour ça, et pilotée en .NET, qui fera ça très bien aussi.

    En revanche, pour faire de la manipulation de champs de PDF depuis .NET sur un document affiché via Windev et synchroniser tout ce petit monde... Cela va être plus délicat.
    J'ai pour ma part utilisé iTextSharp uniquement pour traiter des PDF en ouvrant directement les fichiers sans les visualiser en même temps.

    Il faudrait regarder la doc du SDK de iText (https://kb.itextpdf.com/home/it7kb) pour voir si c'est possible mais je ne crois pas que cette API fournisse des fonctions de prévisualisation

    Une piste pourrait être de récupérer le PDF sous forme de "stream" depuis le composant Windev pour l'envoyer à iText, mais pas sûr que cela soit faisable côté Windev.

  8. #8
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    2 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 2 440
    Points : 6 155
    Points
    6 155
    Par défaut
    hello,
    Citation Envoyé par dsr57 Voir le message
    Hello,

    je crains d'avoir mal exprimé mon besoin, je ne veux pas modifier le fichier PDF directement mais communiquer avec le champs PDF.

    Dans une fenêtre je veux intégrer un champ PDF et lié un formulaire PDF.
    1. Par programmation récupérer en BDD les données et les insérer dans le champs PDF (maj du formulaire affiché)
    2. Par programmation récupérer les données du formulaire affiché dans le champs PDF et faire une MAJ de la BDD.



    Comme WinDev n'a pas de fonction pour gérer ce besoin, je m'orientais sur programmer ces échanges en .NET


    Merci par avance pour votre aide.
    Je ne sais pas si j'ai bien compris. Veux tu Modifier un formulaire PDF affiché dans windev et récupérer les nouvelles données ? Comment peut-on faire alors sans enregistrer le document ? On peut afficher un formulaire dans un champ HTML ou un activex , contrôle dotnet webbrowser. IE 11 sait lire les PDF et on peut les remplir aussi et les sauvegarder. On peut également se promener de champ en champ en utilisant la touche tab et le champ dans lequel on arrive est alors sélectionné. Avec un copier on peut alors récupérer son contenu.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  9. #9
    Membre expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    juin 2017
    Messages
    2 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : juin 2017
    Messages : 2 098
    Points : 3 662
    Points
    3 662
    Par défaut
    Tu devrais trouver ton bonheur ici,
    le code complet de l'exemple se trouve ici.
    Avec les methodes associée à fields tu devrais pouvoir récupérer les données souhaitées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    1-Affichage du pdfReader dans un champ windev(lecteur PDF, ou image)
    2-Récupération des données dans le pdfWriter (qui va devenir un pdfReader)
    Pour la récupération de la valeur d'un champ, il faut utiliser un truc du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MesRésultat.Nom=fields.get("Nom").GetValue()
    Par contre la question est : "Pourquoi afficher le document ?"
    Il y a peut être plus simple, mais ça tourne

  10. #10
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2003
    Messages : 1 139
    Points : 4 807
    Points
    4 807
    Billets dans le blog
    22
    Par défaut
    Bonjour tout le monde,

    Merci à tous pour vos retours, je vais essayer de répondre à vos questions.

    Veux tu Modifier un formulaire PDF affiché dans windev et récupérer les nouvelles données ?
    Comment peut-on faire alors sans enregistrer le document ?
    Réponses aux 2 questions : Oui

    Pourquoi afficher le document ?
    Pour permettre à l'utilisateur de le modifier. Pour donner plus d'informations sur le contexte, actuellement dans notre solution on redessine les formulaires à l'écran (et impressions)
    ou on affiche à l'écran (et impresssion) le fond PDF et on ajoute les champs de saisie pour que l'utilisateur effectue sa saisie comme sur le formulaire papier.

    Le but est d'améliorer ce processus au niveau de la programmation et c'est pour cette raison que nous analysons la possibilité d'afficher le formulaire PDF à l'écran et communiquer.

    J'ai essayé de faire des tests avec WinDev 26, le champs HTML et la fonction htmlvaleurchamp mais j'obtiens une erreur qui ait dû je pense au fait que quand on affiche un PDF dans un navigateur celui-ci est affiché dans une balises <embed>

    J'ai fait des tests avec un champ ActiveX "Adobe PDF Reader", avec la ligne de code suivante je charge le PDF

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveX1>>LoadFile("C:\formulaire.pdf")
    Je n'arrive pas à trouver comment modifier la valeur d'un champ du PDF, j'ai regardé dans l'outil WDXView mais je ne trouve pas...

    Si quelqu'un a une piste je suis preneur

    Merci par avance pour votre aide
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  11. #11
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    2 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 2 440
    Points : 6 155
    Points
    6 155
    Par défaut
    hello,
    voici ce que je te propose:
    Le principe :
    1 - On choisit un fichier formulaire modèle PDF interactif
    3 - On le copie dans un fichier qui servira de fichier PDF temporaire.
    4 - On ouvre ce fichier PDF temporaire dans un champ HTML (le nouveau de Windev 26 basé sur Chromium)
    5 - On remplit le formulaire
    6 - Quand on a fini on clique sur un bouton qui sauvegarde ce qu'on a rempli dans le formulaire PDF temporaire.
    7 - On récupère les champs du formulaire et leur contenu par itextsharp.


    Comme je n'ai que windev 16 j'ai utilisé à la place du champ HTML, un contrôle dotnet WebView2 (voir ici )
    voici le code de chargement du fichier de formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sai_Formulaire=fSélecteur("", "", "Sélectionnez un fichier.....", "fichiers pdf (*.pdf)"+TAB+"*.pdf", "*.*", fselOuvre+fselExiste)
    SI Sai_Formulaire <> "" ALORS
    MonFormulaire est une chaîne = Remplace(Sai_Formulaire, ".pdf", "_tmp.pdf")
    fCopieFichier(Sai_Formulaire,MonFormulaire)
    MonUri = allouer System.Uri(MonFormulaire)
    MonWebView.Source = MonUri
    FIN
    et voici le code de récupération des champs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    MonFormulaire est une chaîne = Remplace(Sai_Formulaire, ".pdf", "_tmp.pdf")
    MonWebView.focus()
    EnvoieTouche("^s")
    Multitâche(-200)
    MonFichierPDF est un PdfReader(MonFormulaire)
    formulaire est un AcroFields dynamique
    formulaire = MonFichierPDF.get_AcroFields()
    POUR TOUT MONFieldElement DE formulaire.Fields
    	Trace(MONFieldElement.Key," -> ",formulaire.GetField(MONFieldElement.Key))	
    FIN
    On utilise l'envoi de touche Ctrl S pour sauvegarder le document.
    J'ai utilisé la version 4.1.6 de itextSharp pour récupérer les champs:
    Pour récupérer cet assemblage dotnet :
    Télécharger le fichier nupkg ici (download package)
    Ouvrir le fichier nupkg avec 7zip et extraire le fichier lib/itextsharp.dll
    Utiliser cet assemblage dotnet dans son projet.
    Si on arrive pas à lire les champs avec ce composant, se tourner vers un assemblage plus moderne (itext 7 par exemple mais qui a une licence AGPL qui peut être contraignante pour une application commerciale distribuée)
    Voici un exemple de ce que cela peut donner avec un formulaire interactif PDF d'Ameli :
    Nom : WD_RemplissageFormulaire.PNG
Affichages : 106
Taille : 197,8 Ko

    et voici le résultat de la récupération des champs :
    Nom : RésultatsRemplissage.PNG
Affichages : 102
Taille : 21,2 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  12. #12
    Membre expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    juin 2017
    Messages
    2 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : juin 2017
    Messages : 2 098
    Points : 3 662
    Points
    3 662
    Par défaut
    La lbrairie PDFBox décrite dans la LST 98 pourrait éventuellement répondre à tes besoins.
    Il y a peut être plus simple, mais ça tourne

  13. #13
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2003
    Messages : 1 139
    Points : 4 807
    Points
    4 807
    Billets dans le blog
    22
    Par défaut
    Hello tout le monde,

    Désolé pour cette réponse tardive, je vous remercie pour vos retours.
    je vais essayer vos propositions dans les prochains jours.


    Je vous tiens au courant.
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  14. #14
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2003
    Messages : 1 139
    Points : 4 807
    Points
    4 807
    Billets dans le blog
    22
    Par défaut
    Hello tout le monde,

    Je viens de tester la solution proposée par jurassic pork, tout d'abord félicitation pour les explications qui étaient très claires ce qui a facilité le test.

    L'affichage du formulaire fonctionne, le parcours du PDF et l'affichage clé-valeur fonctionne également.
    Je renconre juste un pb pour l'enregistrement du PDF avec l'appel de la fonction EnvoiTouche, cette instruction n'a pas l'air de fonctionné

    J'ai ajouté dans le code du projet la ligne suivante

    j'ai tenté d'appeler les fonctions SysDonneFocus et DonneFocus mais sans résultat.

    Auriez-vous une idée pourquoi la fonction envoieTouche ne fonctionnerait pas.

    Merci par avance pour votre aide.
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/03/2010, 00h43
  2. Réponses: 1
    Dernier message: 25/07/2007, 16h45
  3. Gestion des highscorre en VB.net(need help plz :D)
    Par 10JoncT dans le forum Windows Forms
    Réponses: 34
    Dernier message: 10/09/2006, 19h15
  4. Réponses: 9
    Dernier message: 28/07/2006, 18h38
  5. gestion des Services Windows sans .NET
    Par zedoo dans le forum MFC
    Réponses: 1
    Dernier message: 17/05/2005, 00h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo