Donnez vie à vos documents numériques !
 

Multiliste déroulante

abracadabraPDF Forums PDF – Général Multiliste déroulante

  • Créateur
    Sujet
  • #74372
    Berbyc
    Participant

    Bonjour à tous,

    Comme je suis débutant et que je n’ai aucune expérience, aidez-moi s’il vous plaît.
    J’ai un formulaire contenant 39 listes déroulantes et un fichier Excel, et j’aimerais faire une synchronisation entre les deux fichiers PDF et Excel via JavaScript comme suit :

    Une synchronisation entre les deux fichiers PDF et Excel, comme suit:
    1. Je souhaite que les menus déroulants Chez moi/Absent soient inactifs, sauf si une chaîne est sélectionnée dans le menu déroulant Chaîne.
    2. Chaque canal possède sa propre liste d’accueil/retour selon le deuxième tableau Excel

    Cordialement.

     

    Attachments:
    You must be logged in to view attached files.
Affichage de 34 réponses de 1 à 34 (sur un total de 34)
  • Auteur
    Réponses
  • #74377
    Berbyc
    Participant

    Et serait-il possible que la deuxième page PDF soit masquée au besoin via une case à cocher non imprimable ?

    Merci

    #74380
    Merlin
    Maître des clés

    Bonjour et bienvenue

     

    Il n’y a qu’un seul PDF en pièce jointe, et dedans il n’y a pas de menu déroulant “Chez moi/absent” ni de menu déroulant “chaîne”, ça n’aide pas à la compréhension de ce que tu veux faire.

     

    Dans un PDF plusieurs champs qui ont exactement le même nom partagent leurs données. En clair ils affichent la même chose et en modifier un seul revient à les modifier tous en même temps.

    Donc en fait ton PDF ne contient que 3 champs : canal, départ et arrivée.

     

    Pour remplir de nombreux champs automatiquement avec un script il faut qu’ils utilisent une règle de nommage cohérente pour qu’une boucle puisse fonctionner. Par exemple : canal.0, canal.1, canal.2, canal.3, etc.

    En général dans les PDF on utilise le point comme séparateur dans le nom des champs pour les raisons qui sont expliquées ici, ainsi que la méthode la plus simple pour les créer : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/duplication-rapide-de-champs-de-formulaire/

     

    Si tu veux que tes champs fonctionne correctement il faut les nommer en respectant la syntaxe web : pas de slash, pas d’accent, pas d’espace, ni aucun caractère spécial.

     

    Concernant la deuxième question, c’est possible mais ce n’est pas quelque chose de simple à faire pour un débutant. D’autant que ton PDF contient 3 pages.

    Fait une recherche sur “template” et sur “page modèle” dans ce forum pour bien comprendre de quoi il s’agit.

     

    #74393
    bebarth
    Maître des clés

    bonjour,
    Moi je veux bien aider, mais il faudrait m’expliquer car je n’ai rien compris à ce que tu voulais faire…

    @+
    😎

    #74394
    Berbyc
    Participant

    Bonjour à tous,

    J’ai deux fichiers, un PDF et l’autre en Excel, ce que je veux c’est :

    Une synchronisation entre les deux fichiers, c’est-à-dire que les listes déroulantes dans le fichier PDF seront alimentées depuis les données du fichier Excel comme suit :

    La liste déroulante canal de la première page du PDF sera alimentée par la colonne canal dans la première feuille Excel, et chaque canal répertorie plusieurs départs (feuille Départ Excel)

    La liste déroulante Départ PDF sera alimentée par la colonne départ de la feuille2 Départ Arrivée de Excel, et chaque Départ regroupe plusieurs arrivées selon les données dans feuille2 Départ Arrivées de Excel

    Le reste des listes déroulantes de la page 2 du PDF seront alimentées séparément quand on sélectionnera un choix, et non pas toutes à la fois avec le même choix.

    Et serait-il possible que la deuxième page PDF soit masquée au besoin via une case à cocher non imprimable ?

    Merci.

     

    Attachments:
    You must be logged in to view attached files.
    #74397
    bebarth
    Maître des clés

    Je regarde ça dès que possible.

    @+
    😎

    #74398
    bebarth
    Maître des clés

    bonjour,
    Voici déjà un fichier pour la première partie. Les données doivent être en pièces jointes du fichier .pdf au format .csv. Il n’est donc pas possible d’avoir des onglets et il faut donc joindre 2 fichiers séparés.
    Et les scripts utilisés dans ce fichier :
    // Script de document
    //
    var fichier=this.getDataObjectContents("Départ.csv");
    var donnees=util.stringFromStream(fichier);
    var lignes=donnees.split("\r\n");
    var colonnes=new Array();
    for (var i=0 ; i<lignes.length ; i++) colonnes=lignes.split(";");
    var colonne0=[];
    for (var j=0 ; j<colonnes.length ; j++) {
    if (colonnes[j][0]) colonne0.push([colonnes[j][0]]);
    }
    for (var i=1; i<=colonne0.length; i++) {
    eval("var colonne"+(i+1)+"=[];");
    for (var j=0 ; j<colonnes.length ; j++) {
    if (colonnes[j]) eval("colonne"+(i+1)).push(colonnes[j]);
    }
    }
    colonne0[0].push(0);
    for (var i=1; i<colonne0.length; i++) {
    colonne0.push(eval("colonne"+(i+1)))
    }
    //
    var fichier1=this.getDataObjectContents("Départ Arrivée.csv");
    var donnees1=util.stringFromStream(fichier1);
    var lignes1=donnees1.split("\r\n");
    var colonnes1=new Array();
    for (var i=0 ; i<lignes1.length ; i++) colonnes1=lignes1.split(";");
    for (var i=1; i<=colonnes1[0].length; i++) {
    eval("var colonne"+(i+1)+"1=[\"- Sélectionnez -\"];");
    for (var j=1 ; j<colonnes1.length ; j++) {
    if (colonnes1[j]) eval("colonne"+(i+1)+"1").push(colonnes1[j]);
    }
    }
    //
    var leCanal=this.getField("Canal").value;
    this.getField("Canal").clearItems();
    this.getField("Canal").setItems(colonne0);
    this.getField("Canal").value=leCanal;

    // Script de touches personnalisé Menu "Canal"
    if (!event.willCommit) {
    this.getField("Départ").clearItems();
    this.getField("Arrivée").clearItems();
    if (event.changeEx!=0) {
    var leMenu=event.changeEx.split(",");
    var ind=leMenu[0].substr("Canal ".length);
    leMenu[0]=["- Sélectionnez -",0];
    for (var i=1; i<leMenu.length; i++) {
    leMenu=[leMenu,eval("colonne"+(i+1)+"1")];
    }
    this.getField("Départ").clearItems();
    this.getField("Départ").setItems(leMenu);
    }
    }

    // Script de touches personnalisé Menu "Départ"
    if (!event.willCommit) {
    this.getField("Arrivée").clearItems();
    if (event.changeEx!=0) {
    this.getField("Arrivée").clearItems();
    this.getField("Arrivée").setItems(event.changeEx.split(","));
    }
    }

    Le reste des listes déroulantes de la page 2 du PDF seront alimentées séparément quand on sélectionnera un choix, et non pas toutes à la fois avec le même choix. Et serait-il possible que la deuxième page PDF soit masquée au besoin via une case à cocher non imprimable ?

    Pour ça il me faudra quelques explications car je n’ai pas compris…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #74400
    Berbyc
    Participant

    Bonjour Bebarth, bonjour à tous,

    Merci Bebarth pour votre réponse et pour votre effort.

    Pour ça il me faudra quelques explications car je n’ai pas compris…

    On peut pas dupliquer le même choix de la liste déroulante (Départ) ou bien (Arrivée) de la page 1 sur les autre listes déroulante de la page 2.
    C’est-à-dire, si on sélectionne un choix (Départ et Arrivée) sur la page 1 pdf , les autres listes déroulantes de page 2 sera vide, afin qu’on aura la possibilité de sélectionner un autre choix diffèrent sur chaque liste déroulante (Départ et Arrivée) page2.

    (page 2 c’est une page supplémentaire, c’est pour cela que je voudrais que cette page soit masquer et elle sera afficher si besoin via case à cocher non imprimable).

    Et serait-il possible que la deuxième page PDF soit masquée au besoin via une case à cocher non imprimable ?

    D’autre question s’ils vous plait, serait-il possible masquer les pièces jointes (excel.csv) pour que les autres utilisateurs de ce fichier pdf ne pourront pas accéder au pièces jointes, et ils n’auront donc pas la possibilité de les modifier?

    • Cette réponse a été modifiée le il y a 3 mois et 1 semaine par Berbyc.
    • Cette réponse a été modifiée le il y a 3 mois et 1 semaine par Berbyc.
    • Cette réponse a été modifiée le il y a 3 mois et 1 semaine par Berbyc.
    #74404
    bebarth
    Maître des clés

    On peut pas dupliquer le même choix de la liste déroulante (Départ) ou bien (Arrivée) de la page 1 sur les autre listes déroulante de la page 2. C’est-à-dire, si on sélectionne un choix (Départ et Arrivée) sur la page 1 pdf , les autres listes déroulantes de page 2 sera vide, afin qu’on aura la possibilité de sélectionner un autre choix diffèrent sur chaque liste déroulante (Départ et Arrivée) page2.

    Ça demande réflexion… une chose est sûre c’est que ce n’est pas simple et que les différents noms de champs ne peuvent pas être identiques à ceux de la page 1.  Je regarderai ça jeudi.

    (page 2 c’est une page supplémentaire, c’est pour cela que je voudrais que cette page soit masquer et elle sera afficher si besoin via case à cocher non imprimable).

    Pages 2 et 3 donc ! Ça ne devrait pas être compliqué, dès que le problème précédent sera résolu.

    D’autre question s’ils vous plait, serait-il possible masquer les pièces jointes (excel.csv) pour que les autres utilisateurs de ce fichier pdf ne pourront pas accéder au pièces jointes, et ils n’auront donc pas la possibilité de les modifier?

    Ça c’est une bonne question dont je n’ai pas encore la réponse. On pourra peut-être caché ce panneau pour les utilisateurs de Reader, par exemple… Faut essayer.

    @Merlin
    : Tu as une idée ???

    @+
    😎

    #74406
    Merlin
    Maître des clés

    “D’autre question s’ils vous plait, serait-il possible masquer les pièces jointes (excel.csv) pour que les autres utilisateurs de ce fichier pdf ne pourront pas accéder au pièces jointes, et ils n’auront donc pas la possibilité de les modifier?”

    La réponse est non.

    Sécurité oblige, si c’était possible tous les antivirus rejetteraient le fichier car il serait soupçonné d’être malicieux.

    #74409
    Berbyc
    Participant

    Merci @Merlin pour votre réponse, @bebarth merci pour votre support

     

    • Cette réponse a été modifiée le il y a 3 mois par Berbyc.
    #74412
    Merlin
    Maître des clés

    Il est possible de placer les données dans le code JavaScript mais ça les rendrait difficilement actualisables.

    On peut éventuellement chiffrer le code JavaScript mais ça dépend à qui le document est destiné car on retombe dans le problème évoqué ci-dessus : un PDF contenant du code chiffré est systématiquement rejeté par les antivirus, qui empêchent donc son ouverture ou son téléchargement.

    #74413
    Berbyc
    Participant

    L’antivirus est déjà installé sur toutes les machines des utilisateurs de ce fichier

    • Cette réponse a été modifiée le il y a 3 mois par Berbyc.
    #74415
    bebarth
    Maître des clés

    bonjour,
    Voici ce que j’ai fait aujourd’hui. J’espère que cela te convient. Pour cacher les fichiers attaché on pourrait faire une tempo toutes les secondes par exemple, mais ça veut dire que le fichier est perpétuellement en calcul !

    Voici tous les scripts que j’ai utilisé. Si tu es débutant ça va peut-être un peu compliqué pour toi à comprendre : Il y a des scripts de document, des fonctions, une page modèle…

    // Script de document
    //
    var nbDepart=0;
    for (var i=0; i<this.numFields; i++) {
    if (/^Départ\.\d+/.test(this.getNthFieldName(i))) nbDepart++;
    }
    var fichier=this.getDataObjectContents("Départ.csv");
    var donnees=util.stringFromStream(fichier);
    var lignes=donnees.split("\r\n");
    var colonnes=new Array();
    for (var i=0 ; i<lignes.length ; i++) colonnes=lignes.split(";");
    var colonne0=[];
    for (var j=0 ; j<colonnes.length ; j++) {
    if (colonnes[j][0]) colonne0.push([colonnes[j][0]]);
    }
    for (var i=1; i<=colonne0.length; i++) {
    eval("var colonne"+(i+1)+"=[];");
    for (var j=0 ; j<colonnes.length ; j++) {
    if (colonnes[j]) eval("colonne"+(i+1)).push(colonnes[j]);
    }
    }
    colonne0[0].push(0);
    for (var i=1; i<colonne0.length; i++) {
    colonne0.push(eval("colonne"+(i+1)))
    }
    // Fichier "Départ Arrivée.csv"
    var fichierDA=this.getDataObjectContents("Départ Arrivée.csv");
    var donneesDA=util.stringFromStream(fichierDA);
    var lignesDA=donneesDA.split("\r\n");
    var colonnesDA=new Array();
    for (var i=0 ; i<lignesDA.length ; i++) colonnesDA=lignesDA.split(";");
    for (var i=1; i<=colonnesDA[0].length; i++) {
    eval("var colonne"+(i+1)+"DA=[\"- Sélectionnez -\"];");
    for (var j=1 ; j<colonnesDA.length ; j++) {
    if (colonnesDA[j]) eval("colonne"+(i+1)+"DA").push(colonnesDA[j]);
    }
    }
    //
    var leCanal=this.getField("Canal").value;
    this.getField("Canal").clearItems();
    this.getField("Canal").setItems(colonne0);
    this.getField("Canal").value=leCanal;
    //
    function menuCanal(laValeur) {
    try {
    for (var i=0; i<nbDepart; i++) {
    this.getField("Départ."+i).clearItems();
    this.getField("Arrivée."+i).clearItems();
    }
    if (laValeur!=0) {
    var leMenu=laValeur.split(",");
    var ind=leMenu[0].substr("Canal ".length);
    leMenu[0]=["- Sélectionnez -",0];
    for (var i=1; i<leMenu.length; i++) {
    leMenu=[leMenu,eval("colonne"+(i+1)+"DA")];
    }
    for (var i=0; i<nbDepart; i++) {
    this.getField("Départ."+i).clearItems();
    this.getField("Départ."+i).setItems(leMenu);
    }
    }
    } catch(e) {}
    }
    //
    function menuDepart(ind,laValeur) {
    this.getField("Arrivée."+ind).clearItems();
    this.getField("Arrivée."+ind).setItems(laValeur.split(","));
    }
    function menuArrivee(leChamp) {
    try {
    var ind=leChamp.name.substring(leChamp.name.indexOf(".")+1);
    var laTable=this.getField("Départ."+ind).value.split(",");
    for (var i=0; i<nbDepart; i++) {
    if (i==ind) continue;
    for (j=0; j<leChamp.numItems; j++) {
    if (this.getField("Départ."+i).getItemAt(this.getField("Départ."+i).currentValueIndices,false)==this.getField("Départ."+ind).getItemAt(this.getField("Départ."+ind).currentValueIndices,false) && this.getField("Arrivée."+i).value==laTable[j]) laTable.splice(j,1);
    }
    }
    var lArrivee=leChamp.value;
    leChamp.clearItems();
    leChamp.setItems(laTable);
    leChamp.value=lArrivee;
    } catch(e) {}
    }

    // Script de touches personnalisé Menu "Canal"
    if (!event.willCommit) menuCanal(event.changeEx);

    // Script de touches personnalisé Menu "Départ"
    if (!event.willCommit) menuDepart(event.target.name.substring(event.target.name.indexOf(".")+1),event.changeEx);

    // Ajout Script de touches personnalisé de tous les Menus "Départ"
    for (var i=0; i<30; i++) {
    this.getField("Départ."+i).setAction("Keystroke","if (!event.willCommit) menuDepart(event.target.name.substring(event.target.name.indexOf(\".\")+1),event.changeEx);");
    }

    // Souris entrée de tous les Menus "Arrivée"
    menuArrivee(event.target);

    // Ajout Script Souris entrée de tous les Menus "Arrivée"
    for (var i=0; i<30; i++) {
    this.getField("Arrivée."+i).setAction("MouseEnter","menuArrivee(event.target);");
    }

    // Script d'ouverture de page
    if (app.viewerType!="Exchange-Pro") this.viewState={overViewMode:2};
    this.viewState={overViewMode:5}

    // Script Affichage Page 2
    var modeles=this.templates;
    for (i=0; i<modeles.length; i++) {
    if (modeles.name=="page2") {
    modeles.hidden=(event.target.value=="Off");
    break;
    }
    }
    this.pageNum=0;

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #74495
    Berbyc
    Participant

    Bonjour a tous,

    Désolé pour le retard j’étais en formation de 06 jours.

    Merci beaucoup @bebarth pour votre efforts, ca me convient, c’est formidable

    Est-ce qu’on peut rendre les listes déroulantes de la page 2 inaccessibles sauf quand les listes déroulantes de page 1 sera remplis, et pour la case à coucher d’affichage de la page2 j’aimerais bien qu’elle ne soit pas imprimable

    Merci encore pour vos efforts

    Cordialement

    • Cette réponse a été modifiée le il y a 2 mois et 4 semaines par Berbyc.
    #74497
    Merlin
    Maître des clés

    Bonjour

     

    1. Il faut “emballer” le script de bebarth (orange) dans une condition qui vérifie la valeur de toutes les listes déroulantes de la page 1 :

    var nCompt = 0;

    for (var i=0; i<this.numFields; i++) {
    var oFld = this.getField(this.getNthFieldName(i));
    if (oFld != null && oFld.type == "combobox" && oFld.page === 0 && oFld.value === oFld.defaultValue)
    {nCompt = nCompt +1;}
    }

    if (nCompt === 0) {
    var modeles=this.templates;
    for (i=0; i<modeles.length; i++) {
    if (modeles.name=="page2") {
    modeles.hidden=(event.target.value=="Off");
    break;
    }
    }
    this.pageNum=0;
    }

     

    2. Voir capture ci-jointe

     

    Attachments:
    You must be logged in to view attached files.
    #74500
    Berbyc
    Participant

    Bonjour Merlin,

    Vu que je suis très nul en JS, sincèrement j’ai rien compris au je peut mettre ce code dans le scripte de bebarth.

    Peux-tu m’aider s’il vous plait

    Cordialement

    #74504
    Merlin
    Maître des clés

    Il faut remplacer le script de bebarth par celui que j’ai posté ci-dessus.

    Dans les Propriétés de la case : onglet Actions (voir la capture ci-dessus).

    #74507
    Berbyc
    Participant

    Je l’ai remplacé mais ca ne fonctionne pas, la deuxième page ne s’affiche pas quand clique au-dessus sur Check Box1, serait-il possible de le mettre votre code sur le scripte de liste déroulante page 1 au lieu de Check Box1

    • Cette réponse a été modifiée le il y a 2 mois et 4 semaines par Berbyc.
    • Cette réponse a été modifiée le il y a 2 mois et 4 semaines par Berbyc.
    #74510
    bebarth
    Maître des clés

    bonjour,
    Voici un nouveau fichier. Ici, la case à cocher ne s’imprimera pas et la page 2 sera affichée uniquement si les 3 menus déroulants sont renseignés lorsque cette case est cochée.

    // Script Affichage Page 2
    if (this.getField(“Canal”).value && this.getField(“Départ.0”).value && this.getField(“Arrivée.0”).value) {
    var modeles=this.templates;
    for (i=0; i<modeles.length; i++) {
    if (modeles.name==”page2″) {
    modeles.hidden=(event.target.value==”Off”);
    break;
    }
    }
    this.pageNum=0;
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #74513
    Berbyc
    Participant

    Merci beaucoup pour votre réponse.

    Peut-on mettre la cas à cocher grisé inactive ou bien masquer et elle sera afficher seulement lorsqu’on remplir les trois listes déroulante, parce que actuellement dans le cas ou on cliquant cette case avant de remplir les 3 listes déroulante, la deuxième page ne s’affiche pas.

    #74514
    bebarth
    Maître des clés

    Du coup j’ai remis l’ancien script d’affichage de la page 2 et j’ai rajouter un script de calcul pour les menus déroulants :

    // Script Affichage Page 2
    var modeles=this.templates;
    for (i=0; i<modeles.length; i++) {
    if (modeles.name=="page2") {
    modeles.hidden=(event.target.value=="Off");
    break;
    }
    }
    this.pageNum=0;

    // Script de calcul des menus déroulants
    if (this.getField("Canal").value && this.getField("Départ.0").value && this.getField("Arrivée.0").value!="- Sélectionnez -") {
    this.getField("Check Box1").display=display.noPrint;
    } else {
    this.getField("Check Box1").display=display.hidden;
    this.getField("Check Box1").value="Off";
    var modeles=this.templates;
    for (i=0; i<modeles.length; i++) {
    if (modeles.name=="page2") {
    modeles.hidden=true;
    break;
    }
    }
    this.pageNum=0;
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #74533
    Berbyc
    Participant

    Merci pour votre réponse Bebarth, mais quand j’ai mis votre codes JavaScript sur mon fichier du travail, la deuxième feuille est toujours afficher et le CheckBox1 ne fonctionne pas, est-ce que il y a une manipulation a faire sur la deuxième page?

    • Cette réponse a été modifiée le il y a 2 mois et 3 semaines par Berbyc.
    • Cette réponse a été modifiée le il y a 2 mois et 3 semaines par Berbyc.
    #74536
    Merlin
    Maître des clés

    As tu transformé la deuxième page en “template”, ou “page modèle” ?

    #74537
    Berbyc
    Participant

    @Merlin comment faire ça? La page deux est une page pdf modifiable

    • Cette réponse a été modifiée le il y a 2 mois et 3 semaines par Berbyc.
    #74543
    bebarth
    Maître des clés

    bonjour,
    A vérifier que le script de document “init” est bien intégré à ton fichier et que la page modèle se nome bien “page2”, sinon il faut adapter le script.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #74546
    Berbyc
    Participant

    Pour le script de document est bien “init”, mais pour le nom de page 2 comme démontré votre capture d’écran 2, je ne sais pas comment le savoir, je travail sur Adobe Acrobate Pro 9

    #74548
    bebarth
    Maître des clés

    Je ne me souviens pas où on les trouvait sous Acrobat Pro 9, mais voici ce que j’ai trouvé :
    https://answers.acrobatusers.com/Where-Page-Templates-Windows-Adobe-Acrobat-9-Pro-q21342.aspx
    Menu “Avancé”, sélectionnez “Pages modèles”… ensuite tu devrais les trouver.

    @+
    😎

    #74553
    Merlin
    Maître des clés

    Mon vieil Acrobat 9 ne parle plus Français car il a perdu le réglage dans ses Préférences, mais ça se trouve au même endroit dans les menus : “Modèles de pages” en VF.

    Ensuite il faut cliquer sur l’icône œil pour afficher/masquer la page correspondante.

     

    Attachments:
    You must be logged in to view attached files.
    #74559
    Berbyc
    Participant

    Bonjour a tous,

    Merci beaucoup ca marche formidable, mais vu que j’ai un document qui porte 05 pages, du coup quand j’affiche la deuxième page via checkbox1, elle sera afficher en dernière au lieu d’être la deuxième, y a pas moyen de de l’afficher en deuxième position sur les 05 pages

    D’autre question, serait-il possible de dupliquer la page4 au besoin, et les pages dupliquer sera toujours avant la dernière page qui est p05? en respect toujours l’ordre des pages

     

    • Cette réponse a été modifiée le il y a 2 mois et 3 semaines par Berbyc.
    • Cette réponse a été modifiée le il y a 2 mois et 3 semaines par Berbyc.
    #74562
    Merlin
    Maître des clés

    Est-ce que ce document est seulement pour toi ou doit-il être diffusé après d’autres utilisateurs ?

    En clair est-ce qu’il devra fonctionner seulement avec Acrobat Pro ou aussi avec Acrobat Reader ?

    Dans le deuxième cas il faudra changer de script car modeles.hidden ne fonctionne pas avec Acrobat Reader.

    #74563
    Berbyc
    Participant

    Bonjour Merlin,

    le document doit-être diffusé pour d’autres utilisateurs et il sera utiliser avec Adobe Reader DC (J’utilise Adobe Pro pour la création du fichier seulement)

    #74564
    bebarth
    Maître des clés

    bonsoir,
    Je regarde ça demain… il faut utiliser la méthode spawn qui permet de dupliquer et supprimer des pages modèles avec Acrobat Reader.

    D’autre question, serait-il possible de dupliquer la page4 au besoin, et les pages dupliquer sera toujours avant la dernière page qui est p05? en respect toujours l’ordre des pages

    Pas de problème pour ça, mais peut-on dupliquer cette page plusieurs fois ou juste une fois ?

    @+
    😎

    #74566
    Berbyc
    Participant

    Pas de problème pour ça, mais peut-on dupliquer cette page plusieurs fois ou juste une fois ?

    Oui, on peut dupliquer cette page une fois ou bien plusieurs fois selon le besoin

    #74571
    bebarth
    Maître des clés

    bonjour,
    Voilà, je redonne l’ensemble des scripts qui ont, pour certains, un peu évolués :
    // Scripts de document
    //
    var nbDepart=0;
    for (var i=0; i<this.numFields; i++) {
    if (/^Départ\.\d+/.test(this.getNthFieldName(i))) nbDepart++;
    }
    var fichier=this.getDataObjectContents("Départ.csv");
    var donnees=util.stringFromStream(fichier);
    var lignes=donnees.split("\r\n");
    var colonnes=new Array();
    for (var ii=0 ; iivar colonne0=[];`
    for (var j=0 ; jif (colonnes[j][0]) colonne0.push([colonnes[j][0]]);`
    }
    for (var i=1; i<=colonne0.length; i++) {
    eval("var colonne"+(i+1)+"=[];");
    for (var j=0 ; jif (colonnes[j][i+1]) eval(“colonne”+(i+1)).push(colonnes[j][i+1]);`
    }
    }
    colonne0[0].push(0);
    for (var ii=1; ii<colonne0.length; ii++) {
    colonne0[ii].push(eval("colonne"+(i+1)))
    }
    // Fichier "Départ Arrivée.csv"
    var fichierDA=this.getDataObjectContents("Départ Arrivée.csv");
    var donneesDA=util.stringFromStream(fichierDA);
    var lignesDA=donneesDA.split("\r\n");
    var colonnesDA=new Array();
    for (var i=0 ; ifor (var i=1; i<=colonnesDA[0].length; i++) {`
    eval("var colonne"+(i+1)+"DA=[\"- Sélectionnez -\"];");
    for (var j=1 ; jif (colonnesDA[j][i+1]) eval(“colonne”+(i+1)+”DA”).push(colonnesDA[j][i+1]);`
    }
    }
    //
    var leCanal=this.getField("Canal").value;
    this.getField("Canal").clearItems();
    this.getField("Canal").setItems(colonne0);
    this.getField("Canal").value=leCanal;
    //
    function menuCanal(laValeur) {
    try {
    for (var i=0; i<nbDepart; i++) {
    this.getField("Départ."+i).clearItems();
    this.getField("Arrivée."+i).clearItems();
    }
    if (laValeur!=0) {
    var leMenu=laValeur.split(",");
    var ind=leMenu[0].substr("Canal ".length);
    leMenu[0]=["- Sélectionnez -",0];
    for (var ii=1; ii<leMenu.length; ii++) {
    leMenu[ii]=[leMenu[ii],eval("colonne"+(i+1)+"DA")];
    }
    for (var i=0; i<nbDepart; i++) {
    this.getField("Départ."+i).clearItems();
    this.getField("Départ."+i).setItems(leMenu);
    }
    }
    } catch(e) {}
    }
    //
    function menuDepart(ind,laValeur) {
    this.getField("Arrivée."+ind).clearItems();
    this.getField("Arrivée."+ind).setItems(laValeur.split(","));
    }
    function menuArrivee(leChamp) {
    try {
    var ind=leChamp.name.substring(leChamp.name.indexOf(".")+1);
    var laTable=this.getField("Départ."+ind).value.split(",");
    for (var i=0; i<nbDepart; i++) {
    if (i==ind) continue;
    for (j=0; j<leChamp.numItems; j++) {
    if (this.getField("Départ."+i).getItemAt(this.getField("Départ."+i).currentValueIndices,false)==this.getField("Départ."+ind).getItemAt(this.getField("Départ."+ind).currentValueIndices,false) && this.getField("Arrivée."+i).value==laTable[j]) laTable.splice(j,1);
    }
    }
    var lArrivee=leChamp.value;
    leChamp.clearItems();
    leChamp.setItems(laTable);
    leChamp.value=lArrivee;
    } catch(e) {}
    }
    //
    function cAc(arrivee) {
    if (this.getField("Canal").value && this.getField("Départ.0").value && arrivee!="- Sélectionnez -") {
    this.getField("Check Box1").display=display.noPrint;
    } else {
    this.getField("Check Box1").display=display.hidden;
    var modeles=this.templates;
    if (this.getField("Check Box1").value!="Off") {
    for (ii=0; ii<modeles.length; ii++) {
    if (modeles[ii].name=="page2") {
    this.deletePages(1);
    break;
    }
    }
    }
    this.getField("Check Box1").value="Off";
    this.pageNum=0;
    }
    }

    // Script de touches personnalisé Menu "Canal"
    if (!event.willCommit) {
    menuCanal(event.changeEx);
    cAc(this.getField("Arrivée.0").value);
    }
    // Script de touches personnalisé des Menus "Départ" sauf "Départ.0"
    if (!event.willCommit) {
    if (event.changeEx!=0) {
    menuDepart(event.target.name.substring(event.target.name.indexOf(".")+1),event.changeEx);
    cAc(this.getField("Arrivée.0").value);
    } else {
    this.getField("Arrivée."+event.target.name.substring(event.target.name.indexOf(".")+1)).clearItems();
    }
    }
    // Script de touches personnalisé Menu "Départ.0"
    if (!event.willCommit) {
    if (event.changeEx!=0) {
    menuDepart(event.target.name.substring(event.target.name.indexOf(".")+1),event.changeEx);
    cAc(this.getField("Arrivée.0").value);
    } else {
    this.getField("Arrivée."+event.target.name.substring(event.target.name.indexOf(".")+1)).clearItems();
    this.getField("Check Box1").display=display.hidden;
    var modeles=this.templates;
    if (this.getField("Check Box1").value!="Off") {
    for (ii=0; ii<modeles.length; ii++) {
    if (modeles[ii].name=="page2") {
    this.deletePages(1);
    break;
    }
    }
    }
    this.getField("Check Box1").value="Off";
    this.pageNum=0;
    }
    }

    // Ajout Script de touches personnalisé de TOUS les Menus "Départ" sauf "Départ.0"
    for (var i=1; i<30; i++) {
    this.getField("Départ."+i).setAction("Keystroke","if (!event.willCommit) {\r\tif (event.changeEx!=0) {\r\t\tmenuDepart(event.target.name.substring(event.target.name.indexOf(\".\")+1),event.changeEx);\r\t\tcAc(this.getField(\"Arrivée.0\").value);\r\t} else {\r\t\tthis.getField(\"Arrivée.\"+event.target.name.substring(event.target.name.indexOf(\".\")+1)).clearItems();\r\t}\r}");
    }

    // Script de touches personnalisé Menu "Arrivée.0"
    if (!event.willCommit) {
    if (event.changeEx!="- Sélectionnez -") cAc(event.changeEx);
    }

    // Souris entrée de tous les Menus "Arrivée"
    menuArrivee(event.target);

    // Ajout Script Souris entrée de TOUS les Menus "Arrivée"
    for (var i=0; i<30; i++) {
    this.getField("Arrivée."+i).setAction("MouseEnter","menuArrivee(event.target);");
    }

    // Script d'ouverture de page
    if (app.viewerType!="Exchange-Pro") this.viewState={overViewMode:2};
    this.viewState={overViewMode:5}

    // Script Affichage Page 2
    if (event.target.value!="Off") {
    var modeles=this.templates;
    for (ii=0; ii<modeles.length; ii++) {
    if (modeles[ii].name=="page2") {
    modeles[ii].spawn(1, false, false);
    break;
    }
    }
    this.pageNum=0;
    } else {
    this.deletePages(1);
    }

    // Ajouter page 4
    var modeles=this.templates;
    for (ii=0; ii<modeles.length; ii++) {
    if (modeles[ii].name=="page4") {
    modeles[ii].spawn(this.numPages-1, false, false);
    break;
    }
    }

    PS : Les [ii] dans les scripts ci-dessus sont en fait de simples “i” entre crochets dans le document joint. Il est donc préférable de se reporter aux scripts contenus dans le fichier ci-joint.

    @+
    😎

    • Cette réponse a été modifiée le il y a 2 mois et 3 semaines par bebarth.
    Attachments:
    You must be logged in to view attached files.
Affichage de 34 réponses de 1 à 34 (sur un total de 34)
  • Vous devez être connecté pour répondre à ce sujet.