Donnez vie à vos documents numériques !
 

Formulaire PDF – format des champs lors d’un import de données

abracadabraPDF Forums PDF – Général Formulaire PDF – format des champs lors d’un import de données

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45519
    Yann
    Membre

    Bonjour,

    Tout nouveau sur le forum et novice en JavaScript, j’aimerais votre aide pour un problème dont je n’ai pas trouvé la solution dans les différents sujets.
    J’ai créé un formulaire PDF (j’utilise Adobe Acrobat Pro XI) à partir d’un fichier PDF existant à imprimer et à compléter à la main (voir 1er fichier joint). J’ai simplement ajouté des champs par dessus les zones en pointillés ou les cases (voir 2e fichier joint).

    Le remplissage des champs que j’ai créés se fait à partir des données d’un fichier .FDF en faisant « Importer des données… » et en sélectionnant le fichier FDF approprié. Lorsque j’importe les données, le format d’arrivée est le format d’origine du fichier FDF et n’est donc pas ajusté à la trame (voir 3e fichier joint avec exemple du numéro de téléphone).

    Je voudrais, avec un script au bon endroit, soit au moment de l’import (idéalement), soit juste après (peut-être avec un bouton), que le format, par exemple du numéro de téléphone, puisse entrer dans les cases de la trame. Pour cela, les chiffres doivent prendre la forme « 9  9    9  9    9  9    9  9  9  9 »
    En mettant « 9  9    9  9    9  9    9  9  9  9 » dans « Format > Spécial > Masque arbitraire », au moment de l’import des données il renvoie un message d’erreur en disant que « La valeur indiquée ne correspond pas au format du champ », ce qui est normal.

    Donc ma question est : quel script mettre et où pour que le format s’adapte lors de l’import, ou (si pas possible), comment mettre un bouton avec le bon script au bon endroit pour que tous les formats à changer s’adaptent lorsque je clique sur ce bouton ?

    En effet, là j’ai donné l’exemple du numéro de téléphone, mais j’ai le même souci avec la date de naissance qui arrive au format « dd/mm/yyyy » et que je dois avoir au format « d d    m  m    y  y  y  y » (donc prévoir la suppression du symbole « / ».

    Merci d’avance pour votre aide.

Affichage de 25 réponses de 1 à 25 (sur un total de 28)
  • Auteur
    Réponses
  • #61545
    Merlin
    Maître des clés

    Bonjour et bienvenue.

    Changer ainsi les formats de plusieurs champs lors de l’importation est possible mais ça requiert de bonnes connaissances en JavaScript et en manipulation de données.

    Donc je crois que la vraie première bonne question à se poser c’est de savoir s’il ne serait pas plus simple d’importer des fichiers FDF correctement formatés ?
    Parce-que c’est très facile à refaire, même si tout dépend de la quantité…

    #61546
    Yann
    Membre

    Merci pour ce retour.
    Le fichier FDF est créé à partir d’un autre formulaire PDF (en faisant « exporter les données »).
    Mais j’ai la sensation que modifier les formats dans le fichier FDF requiert les mêmes manipulations que celles qui m’intéressent, non?

    J’aurai à chaque fois un fichier PDF différent (même format) duquel je vais extraire les données dans un FDF (qui aura donc le même format), et duquel je vais importer les données dans différents autres formulaires PDF différents, dont celui que j’ai montré.

    Une piste? Si trop complexe je ferai manuellement.

    #61547
    Merlin
    Maître des clés

    Le fichier FDF est créé à partir d’un autre formulaire PDF (en faisant « exporter les données »).

    J’aurai à chaque fois un fichier PDF différent (même format) duquel je vais extraire les données

    :Euuuh:
    Combien de formulaires différents servent à générer les FDF ?
    As-tu la main dessus et la possibilité de les modifier ?
    Parce-qu’a priori le plus simple c’est de formater les champs dans un formulaire « de base » et ensuite de les copier-coller dans les autres formulaires. Quitte à les réajuster et à les redimensionner au besoin.

    #61548
    Yann
    Membre

    Les formulaires de base qui servent à générer les FDF ont tous le même format d’origine et la même configuration (juste pas le même contenu ni le même nom) et j’ai effectivement la main dessus pour faire ce que je veux de ce formulaire (du moment que c’est automatisé). Mais évidemment chaque formulaire PDF de base qui est généré (export automatique d’un logiciel) a le format de base.

    Ce que je ne comprends pas c’est la différence entre modifier le format du formulaire PDF de base et modifier le format du formulaire final après l’import. En gros c’est comme si le formulaire final devenait un formulaire de base.

    Mais je suis preneur, c’est ce qui m’intéresse, je veux modifier les formats des différents champs de façon automatique (même si cela demande plusieurs manipulations).

    #61549
    Merlin
    Maître des clés

    Je crois qu’on ne parle pas le même langage.  :doute:

    Pour moi il ne peut y avoir qu’un seul formulaire de base : c’est celui qui contient les champs de formulaire qui seront ensuite copiés-collés à l’identique dans les autres formulaires.

    Ce que je ne comprends pas c’est la différence entre modifier le format du formulaire PDF de base et modifier le format du formulaire final après l’import.

    Une fois que tous les formulaires auront des champs identiques il n’y aura plus besoin de modifier quoi que soit lors de l’importation d’un formulaire à l’autre puisque les données auront par conséquent elles aussi le même format.

    C’est de loin la méthode la plus simple et la plus facile pour exporter-importer des données, sans se prendre la tête avec des conversions multiples et des kilomètres de JavaScript lors de l’importation.

    :Smiley15:

    #61550
    Yann
    Membre

    Ok. Et comment je fais pour modifier le format dans le formulaire d’origine? Par exemple pour le champ numéro de téléphone?

    #61551
    Merlin
    Maître des clés

    – À partir de n’importe lequel des formulaires il faut faire un enregistrer-sous et nommer le nouveau formulaire : Ma-bibliotheque-de-champs.pdf (par exemple).

    – Dans ce formulaire il faut formater tous les champs comme ils doivent l’être au final, en les paramétrant correctement dans l’onglet Format des Propriétés du champ.

    – Ensuite il faut ouvrir tous les formulaires un par un, y supprimer les champs existants et les remplacer par ceux de Ma-bibliotheque-de-champs.pdf (copier-coller). (D’où ma question sur la quantité de formulaires à gérer…)

    – Les paramètres de l’onglet Apparence des Propriétés du champ (police, couleur, contour…) peuvent être modifiés pour adapter chaque champ à chaque formulaire, ça n’a pas d’incidence sur le format des données échangées.

    #61552
    Yann
    Membre

    – À partir de n’importe lequel des formulaires il faut faire un enregistrer-sous et nommer le nouveau formulaire : Ma-bibliotheque-de-champs.pdf (par exemple).

    – Dans ce formulaire il faut formater tous les champs comme ils doivent l’être au final, en les paramétrant correctement dans l’onglet Format des Propriétés du champ.

    Je dois mal me faire comprendre. J’ai un logiciel de CRM dans lequel j’ai entré tout un tas de données sur des clients, plusieurs dizaines de clients, et je ne peux pas modifier le formalisme dans ce logiciel.
    J’ai la possibilité, pour chaque client, d’exporter depuis le logiciel toutes ses données dans un formulaire pdf modifiable, que j’appelle, le formulaire pdf de base et dont le texte des champs a le format des données du logiciel (donc numéro de tel sous la forme XX XX XX XX XX, et date de naissance sous la forme dd/mm/yyyy, etc.).

    Par ailleurs, j’ai des documents pdf différents (disons une dizaine), qui ne sont pas des formulaires (et que je n’ai pas le droit de recréer de toute pièce comme ça m’arrange), et que je devais, jusqu’à présent, imprimer et compléter au stylo (voir 1er fichier joint de mon message initial). Au lieu d’écrire à la main, j’ai mis, par dessus la trame existante, des champs de formulaire pour pouvoir entrer les données directement au clavier, mais c’est fastidieux (voir 2ème fichier joint dans mon message d’origine). Appelons ces formulaires des bulletins.

    Donc j’ai pensé à importer directement les données du formulaire pdf de base, dans ces champs des bulletins. Je fais ça pour ne pas avoir à taper au clavier, pour chaque client et dans différents bulletins par client, alors que beaucoup d’informations (état civil, adresse, mobile,…) sont identiques.
    Pour importer les données du formulaire de base vers le bulletin pour un client, j’ai nommé les champs du bulletin avec le même nom que les champs du formulaire de base. Pour importer les données, il faut le faire depuis un fichier FDF, d’où le fait, depuis le formulaire de base, d’exporter vers un fichier FDF.
    Donc depuis le bulletin je fais « importer des données » et et je sélectionne le fichier FDF que j’ai créé à partir du formulaire de base.

    Le problème est que, les formats de certains champs (du formulaire de base, du fichier FDF) ne collent pas à la trame du bulletin (voir 3ème fichier joint).

    Mais pour chaque client dans le logiciel, je vais exporter ses données dans un formulaire de base, mais qui n’est pas le même fichier que pour un autre client par définition (et je ne peux pas choisir le nom du fichier pour éventuellement écraser les anciennes données d’un autre client avec les nouvelles en conservant le format).

    Donc ce que tu me demandes dans ton étape 2, ne me permet pas d’automatiser le process. En gros tu me dis, pour chacun de mes clients, je dois modifier à la main le format du champ pour que ça colle au bulletin. Dans ce cas, autant taper les données directement à la main dans le bulletin, dont le champ aura le bon format, et c’est ce que je veux éviter.

    #61553
    Merlin
    Maître des clés

    Je dois mal me faire comprendre.

    Effectivement, quand tu expliques la problématique depuis le départ je comprend mieux.  :geek:

    Dans ce cas il n’y a pas d’autre choix que de convertir les formats de données lors de leur importation, mais j’espère que le format d’arrivée est le même dans tous les bulletins…

    #61554
    Yann
    Membre

    mais j’espère que le format d’arrivée est le même dans tous les bulletins…

    Euh…lol…pas tous  :jerisjaune:, mais je peux me contenter de ceux pour lesquels le format est identique et qui correspondent à la demande initiale.
    Peut-être qu’une solution « simple » serait de séparer la chaine de caractère au niveau de chaque caractère, et de reconstruire le format final en alignant les caractères avec le bon format (le bon nombre d’espaces aux bons endroits). J’ai cru voir des scripts avec (de mémoire) chaque caractère de la chaine qui était identifiable avec un numéro.

    J’essaie d’illustrer mon propos :
    J’ai la chaine de caractères « doremifasol » du champ « notes », je sépare chaque caractère, donc notes(0), notes(1), notes(2), qui correspondrait à « d », « o », « r » etc.
    Et ensuite, je les aligne (je ne connais pas la syntaxe) du genre notes(0)[espace espace]notes(1)[espace espace espace espace]notes(2) etc..

    #61555
    Yann
    Membre

    Ou alors, dans le bulletin je crée un champ de formulaire par caractère (et bien positionné pour que ça corresponde à la trame de mon bulletin), et je mets un script qui va sélectionner et importer uniquement le 1er caractère de la chaine dans le 1er champ, le 2ème caractère de la chaine dans le 2ème champ, etc..

    En gros il me faudrait un exemple de syntaxe, et surtout savoir où le mettre (dans l’onglet format personnalisé par exemple), et ensuite je pourrai peut-être adapter.
    Mais peut-être que le faire au moment de l’import complexifie largement le travail, et dans ce cas, je peux importer dans le bulletin sous le mauvais format (comme ça, c’est fait). Ensuite j’ai des boutons (discrets, voire invisibles si on ne sait pas où les chercher), et quand je clique sur le bouton ça fait la manipulation sur les caractères comme j’ai expliqué avant.

    #61556
    Merlin
    Maître des clés

    Ou alors, dans le bulletin je crée un champ de formulaire par caractère (et bien positionné pour que ça corresponde à la trame de mon bulletin),

    Le mieux est d’oublier ça tout de suite.  :tutut:

    En gros il me faudrait un exemple de syntaxe, et surtout savoir où le mettre

    On va te trouver ça, mais d’abord il faudrait que tu postes une maquette avec les champs aux formats de départ (de base) et avec les champs aux formats d’arrivée bulletin).
    Parce-que sans ça on ne peut rien faire.

    Mais peut-être que le faire au moment de l’import complexifie largement le travail, et dans ce cas, je peux importer dans le bulletin sous le mauvais format (comme ça, c’est fait). Ensuite j’ai des boutons (discrets, voire invisibles si on ne sait pas où les chercher), et quand je clique sur le bouton ça fait la manipulation sur les caractères comme j’ai expliqué avant.

    Que dirais tu d’une simple Action, à exécuter d’un clic depuis le panneau Actions d’Acrobat (ou depuis la barre d’icônes « Outils rapides ») ?

    #61557
    Yann
    Membre

    On va te trouver ça, mais d’abord il faudrait que tu postes une maquette avec les champs aux formats de départ (de base) et avec les champs aux formats d’arrivée bulletin).
    Parce-que sans ça on ne peut rien faire.

    J’ai joint le formulaire de base, le fichier FDF (si nécessaire), et le bulletin (j’ai ajusté les chiffres à la main pour montrer ce que je veux obtenir, mais après l’import ils ont le même format que le fichier d’origine, et si je modifie le format d’arrivée dans les propriétés du bulletin, l’import ne se fait pas).

    Que dirais tu d’une simple Action, à exécuter d’un clic depuis le panneau Actions d’Acrobat (ou depuis la barre d’icônes « Outils rapides ») ?

    Oui ça me va parfaitement.

    Merci pour ton aide.

    #61558
    Merlin
    Maître des clés

    J’ai une bonne nouvelle : en fait je crois que les conversions sont inutiles…
    Il me semble que tu étais passé à coté d’une option importante, celle qui permet de « tirer » la chaine de caractères bord à bord à l’intérieur d’un champ texte : l’option Bande de n caractères.

    Regarde dans le PDF ci-joint, aucune conversion n’a été effectuée, j’ai juste adapté les peignes et les champs.
    Est-ce que c’est OK ?

    #61559
    Yann
    Membre

    Oui c’est pas mal, c’est une solution possible sans script.
    Avant de voir ton dernier message, j’avais un peu bossé aussi dessus et j’ai réussi à le faire avec un script très « artisanal » qui fonctionne en simultané avec l’import. J’ai mis le script dans l’onglet Calcul des Propriétés de champ -> Script personnalisé, et j’ai mis les champs en lecture seule parce que si on s’amuse à cliquer dessus et à les désactiver ensuite je crois que le script s’applique de nouveau et ça change tout (voir modèle joint).
    Voici la forme des scripts que j’ai mis :

    var A = this.getField(« mobile »).valueAsString;
    var B = A.charAt(0) +  »  » +  »  » + A.charAt(1) +  »  » +  »  » +  »  » +  »  » + A.charAt(3) +  »  » +  »  » + A.charAt(4) +  »  » +  »  » +  »  » +  »  » + A.charAt(6) +  »  » +  »  » + A.charAt(7) +  »  » +  »  » +  »  » +  »  » + A.charAt(9) +  »  » +  »  » + A.charAt(10) +  »  » +  »  » +  »  » + A.charAt(12) +  »  » +  »  » + A.charAt(13);
    event.target.value = B;

    Du coup, 2 solutions au même problème, c’est vraiment cool.

    Je te remercie pour ton aide.

    #61560
    Yann
    Membre

    Ah ben non, fausse joie.
    Dès qu’un autre champ du formulaire est activé, les scripts s’appliquent à nouveau et la mise en forme s’applique au format qui avait déjà été ajusté.

    Une idée?

    #61561
    Merlin
    Maître des clés

    var A = this.getField(« mobile »).valueAsString;
    var B = A.charAt(0) +  »  » +  »  » + A.charAt(1) +  »  » +  »  » +  »  » +  »  » + A.charAt(3) +  »  » +  »  » + A.charAt(4) +  »  » +  »  » +  »  » +  »  » + A.charAt(6) +  »  » +  »  » + A.charAt(7) +  »  » +  »  » +  »  » +  »  » + A.charAt(9) +  »  » +  »  » + A.charAt(10) +  »  » +  »  » +  »  » + A.charAt(12) +  »  » +  »  » + A.charAt(13);
    event.target.value = B;

    Du coup, 2 solutions au même problème, c’est vraiment cool.

    – Non, non, non.  :tutut:
    Ce que tu proposes ci-dessus n’est pas une solution, c’est un bricolage.
    Ajouter des espaces partout c’est « interdit », aussi bien en programmation qu’en mise en page.

    Imagine la tête de celui qui devra récupérer les données ! J’espère qu’il sera chauve, ça lui évitera de s’arracher les cheveux.  :Smiley08:

    – Si tu comptais quand même l’utiliser, tu devrais placer ton script en script de validation, et non pas en script de calcul.

    #61562
    Yann
    Membre

    – Si tu comptais quand même l’utiliser, tu devrais placer ton script en script de validation, et non pas en script de calcul.

    Le traitement du bulletin c’est impression papier pour signature des clients, donc aucun traitement numérique prévu derrière, d’où le fait que je me contente du bricolage.

    ça ne fonctionne pas en script de validation. Aucun conversion n’est faite. Et en plus dans le formulaire complet, lorsque je coche une case par exemple, les scripts s’exécutent à nouveau (avec ou sans script en validation).

    #61563
    Merlin
    Maître des clés

    Les scripts de calcul se déclenchent à chaque action de l’utilisateur, contrairement aux scripts de validation.
    Voir absolument L’ordre d’exécution des événements dans les champs de formulaire PDF enfin expliqué clairement :
    http://abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/lordre-dexecution-des-evenements-dans-les-champs-de-formulaire-pdf/

    #61564
    Merlin
    Maître des clés

    Le traitement du bulletin c’est impression papier pour signature des clients

    Avec mise sous pli, timbrage et envoi par La Poste ?
    C’est cher, lent et totalement has-been, pour mémoire nous sommes en 2016.  :geek:  :Smiley03:
    Que ce soit demain ou après-demain, tu risques d’être em**rdé avec tes kilomètres d’espaces le jour où le processus passera en signature numérique.

    Aujourd’hui c’est devenu simple : on envoie le PDF par email et le destinataire a juste à cliquer dans le champ « Signature ». Il n’a pas besoin d’avoir Acrobat ni Acrobat Reader ni rien de spécial : un navigateur web suffit.
    Le destinataire n’a pas non plus d’inscription ni de formulaire long et chiant à remplir préalablement, ça se fait en un tournemain.

    Bien entendu tout ceci est parfaitement légal et compatible internationalement (Europe, États-Unis et quasiment tous les pays stables).

    ==> https://na1.documents.adobe.com/account/home
    :idee:

    #61565
    Yann
    Membre

    Les scripts de calcul se déclenchent à chaque action de l’utilisateur, contrairement aux scripts de validation.
    Voir absolument L’ordre d’exécution des événements dans les champs de formulaire PDF enfin expliqué clairement :
    http://abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/lordre-dexecution-des-evenements-dans-les-champs-de-formulaire-pdf/

    Ok, je suis bien d’accord, mais le script ne fonctionne tout simplement pas quand il est placé en validation.

    #61566
    Merlin
    Maître des clés

    Mais euuhhh… Ce n’était pas plus simple d’utiliser les « Bande de » ?
    :Euuuh:

    #61567
    Yann
    Membre

    Mais euuhhh… Ce n’était pas plus simple d’utiliser les « Bande de » ?
    :Euuuh:

    En théorie oui, mais la réalité me rattrape parce que les changements que tu fais dans l’espacement de la trame (les cases prévues pour les chiffres) doivent s’intégrer dans le document complet et demandent de bouger les autres éléments à côté.
    Au final, ça revient à adapter l’architecture du document aux contraintes de programmation, et ce n’était pas l’idée de départ.

    Mais laisse, j’ai mis un bouton invisible pour effectuer les conversions basées sur mon script, et du coup tant que je ne clique pas dessus à nouveau, la conversion reste conforme même si je clique sur les autres champs.

    Oui, c’est du bricolage.

    #61568
    Merlin
    Maître des clés

    Effectivement, vu sous cet angle là seule la bricole permet de s’en sortir.
    L’essentiel est que ça fonctionne et que tu sois satisfait.
    :Smiley15:

    Mais promet moi de penser aux signatures numériques.  :Smiley03:

    #61569
    Yann
    Membre

    Mais promet moi de penser aux signatures numériques.  :Smiley03:

    Ah mais tu prêches un convaincu sur ce sujet. Mais je n’ai pas d’autres choix que d’aller au rythme de certaines institutions qui n’ont pas franchi le cap psychologique. En gros ce n’est pas moi qui décide si ces institutions acceptent les signatures électroniques ou pas, même si un certain lobbying est en cours.
    Ceci étant dit, dans certains domaines, il existe certaines considérations juridiques, voire des vides juridiques qui ne sont pas encore tranchés. Parfois, il est nécessaire d’avoir la certitude absolue que c’est bien la personne en question qui a signé le document (avec conséquence de responsabilité pénale), et avec la signature numérique, actuellement le doute peut subsister sur les possibilités de fraude ou de se faire passer pour quelqu’un.

    Mais c’est en train de changer à toute vitesse.

Affichage de 25 réponses de 1 à 25 (sur un total de 28)
  • Vous devez être connecté pour répondre à ce sujet.