Donnez vie à vos documents numériques !
 

Copier les données de plusieurs champs texte dans d’autres. – RÉSOLU

abracadabraPDF Forums PDF – Général Copier les données de plusieurs champs texte dans d’autres. – RÉSOLU

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #44357
    adrith
    Participant

    Bonjour,

    Je me lance dans tout ce qui est scripting sous acrobat et je dois dire que votre forum et site m’a été d’une grande aide. Merci bien :)

    En fait, je duplique deux templates (avec spawn) où il y a des champs. Je veux que ce que j’entre dans le template 1 soit copier automatiquement dans les champs du template 2
    Exemple :
    Je voudrais que le continu des cellules P1.template1.Texte1, P2.template1.Texte1, P3.template1.Texte1, etc… soit copié dans les cellules P7.template2.Texte1, P8.template2.Texte1, P9.template2.Texte1, etc… (il y aura toujours ce facteur +6 pages)

    C’est presque que comme dans ce topic sauf que je voudrais le faire pour tous les champs « en même temps » :
    http://abracadabrapdf.net/forum/index.php?topic=1337.0
    Afin que je ne n’aille pas sur chaque champ pour lui indiquer le code.

    Peut-être quelque chose du genre :

    Code:
    this.getField(« NOM-DU-CHAMP-TEXTE-SOURCE »).value = this.getField(« NOM-DU-CHAMP-TEXTE-CIBLE »).value;

    J’espère avoir été assez clair.
    Merci pour vos réponses.

Affichage de 22 réponses de 1 à 22 (sur un total de 22)
  • Auteur
    Réponses
  • #54102
    adrith
    Participant

    Bonjour,

    Je n’ai pas eu beaucoup de succès.

    Si c’est compliqué, peut-être que la copie des valeurs des pages spawned peut se faire lorsque l’utilisateur cliquera sur le bouton envoyer, mais j’ai le même problème quelle serait la syntaxe pour copier le contenu d’une cellule vers une autre ?

    Merci.

    #54103
    Lionel
    Membre

    Bonjour,

    Il y a des experts de ce style de problème sur le forum. Il faut juste attendre un peu qu’ils passent.  :Smiley01:

    Patience…

    Lionel :alien2:

    #54104
    Merlin
    Maître des clés

    Bonjour et bienvenue,

    – Sais tu que cette façon de générer des pages (spawn) ne fonctionne pas avec Reader version X et antérieures ?
    – Pourquoi ce besoin de dupliquer une séquence de 6 pages ?
    Est-ce que je comprend bien : l’utilisateur à 6 pages à remplir, et ensuite ces 6 pages sont dupliquées une fois ?

    :Smiley01:

    #54105
    adrith
    Participant

    Bonjour et bienvenue,

    – Sais tu que cette façon de générer des pages (spawn) ne fonctionne pas avec Reader version X et antérieures ?
    – Pourquoi ce besoin de dupliquer une séquence de 6 pages ?
    Est-ce que je comprend bien : l’utilisateur à 6 pages à remplir, et ensuite ces 6 pages sont dupliquées une fois ?

    :Smiley01:

    Bonjour, merci pour vos retours.

    – Concernant le spawn et le reader, je dirais oui et non. Effectivement je sais que ça ne fonctionne pas, mais on m’a dit qu’avec un outil adobe (adobe livecycle reader extension), en passant le fichier pdf terminé dans une moulinette, ça le rendait compatible avec un reader 9, j’espère que c’est vrai. Tu ne penses pas ?

    – Oui c’est ça, pour être un peu plus complet, il y a une fiche de suivi à remplir avec les informations du client, les informations sont ensuite copier dans le contrat (quelques pages plus bas). Là où ça devient intéressant c’est qu’il peut y avoir plusieurs clients. Donc sur la 1ère page, j’ai une liste déroulante de 1 à 12 que me génère (si je choisi par ex 6), 6 fiches de suivi ET 6 pages dans le contrat plus bas (je passe le fait que le contrat est également en 3 exemplaires  :Smiley01:). Ce que j’essaye de faire c’est donc de faire correspondre les champs des 6 fiches de suivi avec les 6 pages de contrat. J’espère que c’est plus clair :)
    Je vais me débrouiller (je pense) pour associer les bonnes pages ensembles mais ce que je ne sais pas encore faire c’est comment remplir les champs à la volée (car ils n’ont pas le même nom) ou bien lorsque l’on clic sur un bouton.

    Merci

    #54106
    Merlin
    Maître des clés

    – Concernant le spawn et le reader, je dirais oui et non. Effectivement je sais que ça ne fonctionne pas, mais on m’a dit qu’avec un outil adobe (adobe livecycle reader extension), en passant le fichier pdf terminé dans une moulinette, ça le rendait compatible avec un reader 9, j’espère que c’est vrai.

    Oui, c’est vrai.
    Mais avant d’aller plus loin il faut absolument que tu saches que pour LiveCycle Reader Extensions le ticket d’entrée se compte en dollars, avec 4 zéros derrière le 1er chiffre…
    Toujours partant ?
    :idee:

    #54107
    adrith
    Participant

    Ah quand même, ils se font pas chier.
    Et oui oui toujours partant, car celui qui m’a « commandé » le pdf a acquis le logiciel, mais je n’ai pas encore eu l’occasion de le tester.

    #54108
    Merlin
    Maître des clés

    A-priori il faut détecter et associer les numéros de page et les noms de champs avec JavaScript, mais c’est hors de mes compétences.
    Attendons le passage d’un JediScripteur…
    :joker:

    #54109
    adrith
    Participant

    Ok merci quand même Merlin.
    Pour associer les numéros de pages, je pense y arriver, par contre je n’arrive même pas à associer 2 champs texte de pages différentes, est-ce que tu sais m’aider ?
    Disons que les 2 pages 1 et 3 ont été générés, et lorsque j’écris dans mon champ nom de la page 1, je voudrais qu’il soit copié en page 3.
    J’ai essayé des trucs du genre (ainsi que d’autres choses):

    Code:
    getField(« P1.fiche.1_m_nom »).value = getField(« P3.contrat.1_m_nom »).valueAsString;

    mais sans succès, j’ai essayé de placé ça dans un script du document et même sur ma liste déroulante mais rien n’y fait.
    Est-ce que déjà ce code est correct ? Et où dois-je le placer afin d’avoir juste cette copie de champ texte à champ texte ?
    Merci de ton aide.

    #54110
    Merlin
    Maître des clés

    La bonne syntaxe serait plutôt :

    this.getField(« P1.fiche.1_m_nom« ).value = this.getField(« P3.fiche.1_m_nom« ).value;

    Que l’on peut simplifier ainsi puisqu’il n’est pas besoin de préciser le nom du champ source quand c’est lui qui est source de l’évènement, on n’a besoin que du nom de la cible :

    this.getField(« P3.fiche.1_m_nom« ).value = event.value;

    :Smiley01:

    #54111
    adrith
    Participant

    Merci ça fonctionne partiellement bien. :) Mais j’ai galéré ça ne fonctionnait pas quand je mettais le code dans l’onglet « Action/Exécuter un script javascript » mais par contre ça fonctionne bien quand je met dans « Format/Script de touches personnalisé ».
    Pourquoi ? Vous pouvez me dire la différence entre ces 2 options svp ?

    Ensuite le second code fonctionne mais le 1er, pas de tout. Or j’aimerais bien que le 1er fonctionne également car j’aimerais par exemple le mettre sur un bouton afin que cela copie tout le contenu des champs dans les autres, ça doit être possible non ? Mais je ne peux donc pas utiliser le 2ème code car je ne serais pas sur le champ source.

    Un grand merci.

    #54112
    Merlin
    Maître des clés

    Ni l’un ni l’autre.  :geek:

    Ce script doit être placé soit en script de validation, soit en script de calcul pour qu’il fonctionne automatiquement.
    Ou bien en action « Souris enfoncée » : Exécuter un JavaScript » si àa doit répondre à une action de l’utilisateur.

    :Smiley15:

    #54113
    adrith
    Participant

    Merci pour l’info. Ça fonctionne donc de plusieurs façons car je te confirme que dans « script de touches personnalisé », ça fonctionne bien, et en automatique. Mais dans mon cas, ça me fait placer ce code sur chaque champ, et comme j’ai des pages générées à la volée, ça ne va pas être possible.
    J’ai testé en plaçant dans « Scripts Javascript du document », ça m’aurait arrangé mais malheureusement ça ne fonctionne pas.
    J’ai aussi testé avec un bouton et ça fonctionne bien. Je vais surement faire comme ça, en fonction de la liste déroulante de ma 1ère page, je vais récupéré le nombre choisi et ainsi je pourrais calculer sur quels pages les champs doivent être copiés. Ça doit marcher.
    Merci bien

    #54114
    Merlin
    Maître des clés

    Il faudrait voir ton doc pour répondre plus précisément.

    #54115
    adrith
    Participant

    Bonjour,

    Je me sert de ceci pour copier des champs textes dans d’autres champs texte en cliquant sur un bouton.

    this.getField(« P1.fiche.1_m_nom« ).value = this.getField(« P3.fiche.1_m_nom« ).value;

    Je ne trouve pas de la même manière pour copier des checkbox. Je voudrais que si une checkbox est cochée, elle soit aussi cochée dans une autre page lorsque je clique sur ce bouton. Savez-vous quel code prendre ?
    Merci bien

    #54116
    alex
    Membre

    La ligne de code suivante fera l’affaire:
    this.getField(« CaseDestination »).checkThisBox(0, this.getField(« CaseOrigine »).isBoxChecked(0));
    Si vous préférez quelque chose de plus pédagogique en deux lignes:
    statut=this.getField(« CaseOrigine »).isBoxChecked(0);
    this.getField(« CaseDestination »).checkThisBox(0, statut);

    Nota: on peut écrire un script traitant globalement la recopie de tous les champs d’un template vers un autre.

    #54117
    Merlin
    Maître des clés

    Nota: on peut écrire un script traitant globalement la recopie de tous les champs d’un template vers un autre.

    Si j’ai tout compris à la question ça devrait effectivement faire plaisir à notre ami…
    :priere:
    :Smiley03:

    #54118
    adrith
    Participant

    La ligne de code suivante fera l’affaire:
    this.getField(« CaseDestination »).checkThisBox(0, this.getField(« CaseOrigine »).isBoxChecked(0));
    Si vous préférez quelque chose de plus pédagogique en deux lignes:
    statut=this.getField(« CaseOrigine »).isBoxChecked(0);
    this.getField(« CaseDestination »).checkThisBox(0, statut);

    Merci bien pour ce code, je le garde sous la main.
    Car pour la petite histoire, finalement ce sont des radios que j’ai et non des checkbox. Elles étaient de type ‘coche’ d’où mon erreur sur le coup. Tout fonctionne bien à présent et j’avance  :Smiley01: Merci

    Nota: on peut écrire un script traitant globalement la recopie de tous les champs d’un template vers un autre.

    Oui ce que j’ai fait c’est finalement la recopie de tous les champs d’un template vers un autre mais uniquement lorsque je clic sur un bouton. Mais est-ce possible à la volée ? Vous en pensez quoi ?

    #54119
    adrith
    Participant

    J’en profite pour vous demander encore une petite chose.
    Sur mon template, j’ai coché par défault un des choix d’une liste de bouton radio.
    Mais lorsque que ma page est spawné, la radio n’est pas coché. J’en tenté plein de truc/code mais en vain  :Smiley02:
    Auriez vous le petit bout de code qui peut faire ça ? En fait dès que ma page sera dupliquée, je lui dirais de coché direct la radio en question.
    Merci bien

    #54120
    Merlin
    Maître des clés

    Salut,

    Bouton-radio ou case-à-cocher : le code est le même.
    Il te suffit de reprendre celui ci-dessus en modifiant le nom de champ.

    :Smiley15:

    #54121
    adrith
    Participant

    Merci pour l’info Merlin,

    Finalement j’ai réussi avec ce code:

    Code:
    this.getField(« mapage.template.monchamp »).checkThisBox(0,true);
    #54122
    adrith
    Participant

    Je reviens avec mes problématiques de pages, comme j’ai mes pages qui sont générées à la volée, pour faire du code ce n’est pas facile.
    J’ai justement un problème avec un « case ».
    Je tente des choses comme ça mais ça ne passe pas.  :Euuuh:

    Code:
    case « P/[[:digit:]]/.template.nom »:

    qui devrait autoriser P1.template.nom, P2.template.nom, …, jusqu’à P9.template.nom

    Je cherche surtout à aller jusqu’à 12, donc quelque chose comme ça devrait fonctionner:

    Code:
    case « P/[1-12]/.template.nom »:

    mais non.

    Est-ce que c’est possible ? Quelle serait la syntaxe correcte ?
    Merci bien

    #54123
    adrith
    Participant

    Est-ce que quelqu’un aurait une réponse à ma question ci-dessus ?

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