Donnez vie à vos documents numériques !
 

Script JS – Duplication de pages et incrémentation sur chaque.

abracadabraPDF Forums PDF – Général Script JS – Duplication de pages et incrémentation sur chaque.

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45825
    jojoe
    Membre

    Bonjour à tous,

    Dans le cadre de mon boulot, j’ai souvent à imprimer des partitions musicales et à fabriquer des couvertures numérotées. Par exemple, je veux faire 8 couvertures de partitions de Violons numérotées de 1/8 à 8/8.
    Je me suis dis que je pouvais passer par un script qui prend mon fichier sans indication du nom d’instrument ni de numérotation de la couverture, qui le place dans les fichiers temporaires et qui le réinsère en ajoutant les informations.

    Je me suis donc lancé dans le JavaScript que je maîtrise moyennement (encore plus sur Acrobat qui semble voir ses particularités). Déjà, je ne sais même pas si la commande “prompt” existe sur Acrobat pour inviter l’utilisateur à saisir des informations… bref je suis bloqué.

    Je vous mets ce que j’ai déjà réalisé dans l’espoir que vous puissiez me corriger de façon à ce que je comprenne où ça cloche et progresser…

    Code:

    /*Ce programme a pour but d’ajouter de créer une action sur Acrobat Pro XI
    qui permettrait de dupliquer la première page du document autant de fois que souhaiter par l’utilisateur
    et d’insérer sur chacune des pages dupliquées des informations dans zone texte de formulaire que l’utilisateur pourrait saisir*/

        //Déclaration des variables
        var nomInstrument = prompt(“Saisissez le nom de l’instrument :”);
        var nbreParties = prompt(“Combien voulez-vous générer de parties ?”);
        var a = nbreParties;
        var tempDoc = app.newDoc(“/C/temp/abc.pdf”);

        //Enregistrement de la page 1 en fichier temporaire
        tempDoc.insertPages({
            cPath: “/C/temp/abc.pdf”,
            nStart: 1,
            nEnd: 1
        });

        //Création d’une boucle If pour insérer les nouvelles pages avec les noms d’instruments
        do {
            //Insérer la page en fichier temp
            this.insertPages({
                nPage: 1,
                cPath: “/C/temp/mySource.pdf”
            });

            //Ajouter les zones de texte et incrémenter la variable a
        var f = this.addField (“Zone_Num”,”Num”,0,[200,250,250,400]);
            f.textSize = 20;
            f.textColor = color.black;
            f.textFont = font.Garamond;
            f.value = a + “/” + nbreParties;

        var g = this.addField (“Zone_Instrument”,”Instrument”,0,[400,400,300,300]);
            g.textSize = 20;
            g.textColor = color.black;
            g.textFont = font.Garamond;
            g.value = nomInstrument;

        a = a-1;

    }while (a==0);

    //Suppression de la page 1
    this.deletePages({nStar:2, nEnd:1});

    L’idéal serait que ce petit programme JS soit installé au niveau application pour que je puisse l’installer à mes collègues ensuite. Malgré tout, j’ai imaginé que je pouvais l’insérer dans une action, ce qui à mon niveau est peut-être un bon début.

    Merci pour votre aide,

    Jojoe

Affichage de 26 réponses de 1 à 26 (sur un total de 26)
  • Auteur
    Réponses
  • #63656
    bebarth
    Maître des clés

    bonjour,
    Si je comprend bien, c’est le document initial complet auquel tu rajoutes une couverture numérotée !
    Sur la couverture, il n’y a que les 2 zones de textes ???
    Effectivement, les syntaxes JavaScript d’Acrobat ne sont pas exactement celles que tu as utilisées.
    https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FJavaScript_API.htm
    J’essaye de regarder ça pour demain.
    @+
    :bonjour:

    #63657
    Merlin
    Maître des clés

    Bonjour et bienvenue.

    Je crois que j’ai une meilleure idée mais il faudrait que tu me fasse parvenir ta couverture.

    Mon idée c’est de placer la couverture en “modèle de page” (template), comme ça il y a juste à remplir la première page et à dupliquer, avec un petit script pour numéroter les pages automatiquement.
    Par-contre il faut que les utilisateurs aient Acrobat Reader version DC ou version XI (11), ça ne fonctionne pas avec les versions antérieures.

    #63658
    bebarth
    Maître des clés

    bonjour,
    Voici le script que je te propose et qui reprend les indications que j’ai trouvées dans ton script. La position des champs créés est à définir plus précisément. J’ai mis de l’Helvetica en police car je ne connais pas le nom à indiquer pour Garamond…

    Je pense que l’idée proposée par Merlin est plus logique car tu peux définir les champs que tu veux où tu veux et faire une mise en page un peu plus sophistiquée…
    Sinon, on peu aussi créer un fichier “couverture” que l’on vient insérer en première page à la place de cette page blanche qui ne comporte que 2 blocs de textes !

    Je te joins également l’action Acrobat.

    Code:
    //Initialisation des variables
    var Chemin = this.path;
    var PathSansExt = Chemin.substring(0,Chemin.length-4);
    var nbreParties = 0;
    //Questions
    var nomInstrument = app.response({
        cQuestion: “Saisissez le nom de l’instrument :”,
        cTitle: “Instrument”,
        cDefault: “Violon”
        });
    while (nbreParties<1 | isNaN(nbreParties)) {
        var nbreParties = app.response({
            cQuestion: “Combien voulez-vous générer de parties ?”,
            cTitle: “Nombre de parties”,
            cDefault: “1”
            });
        var a = parseFloat(nbreParties);
    }
    for (i=1; i// Nouveau document
    var newDoc = app.newDoc();
    //Pages insérées
    newDoc.insertPages( {
        nPage: newDoc.numPages-1,
        cPath: this.path,
        nStart: 0,
        nEnd: this.numPages-1
        });
       
    // Construction des champs texte
    var f = newDoc.addField(“Zone_Num”, “text”, 0, [200,250,250,400] )
    f.value = i + “/” + nbreParties; // Texte du bas de page
    f.alignment = “center”; // Alignement du texte
    f.textSize = 20; // Corps du texte
    f.textColor = color.black; // Couleur du texte
    f.textFont = font.Helv; // Police du texte
       
    var f = newDoc.addField(“Zone_Instrument”, “text”, 0, [400,400,300,300] )
    f.value = nomInstrument; // Texte du bas de page
    f.alignment = “center”; // Alignement du texte
    f.textSize = 20; // Corps du texte
    f.textColor = color.black; // Couleur du texte
    f.textFont = font.Helv; // Police du texte
           
    //Enregistrement
    newDoc.saveAs(PathSansExt+” (“+nomInstrument+” “+i+” sur “+nbreParties+”).pdf”);
    newDoc.closeDoc();
    }

    @+
    :bonjour:

    #63659
    jojoe
    Membre

    Bonjour et merci pour vos réponses qui me font déjà progresser.
    Je vais préciser ma demande. En fait, nous faisons des couvertures que nous travaillons avec Photoshop par exemple. Le document qui sort sert de modèle pour fabriquer toutes les couvertures de toutes les partitions pour une œuvre. Pour chaque œuvre nous faisons des partitions différentes et devons réécrire le nom de chaque instrument sur chaque couverture (environ 70 couvertures pour un orchestre).
    Mon idée est de sortir un fichier PDF de Photoshop et de dire à Acrobat Pro XI (c’est la version avec laquelle nous travaillons) de générer les partitions des instruments à cordes dans un premier temps… 5 opérations (violons I, Violons II, Altos, Violoncelles, Contrebasses) = 35 ou 40 couvertures = gain de temps. D’où mon idée d’enregistrer ma page dans un fichier temporaire. Je ne connais les templates mais je veux bien que vous m’en disiez davantage.
    Aussi, le script que tu m’envoies Bebarth me génère autant de fichiers que de couvertures. Je préfèrerais que toutes les pages soient dans le même fichier. Là encore mon idée d’insérer des pages depuis le fichier temporaire enregistré préalablement.

    Quoiqu’il en soit encore merci de me faire avancer. Je vais relire le script pour essayer de bien comprendre les différentes commandes que tu as utilisées…!

    Jojoe

    PS: Je vous mets en pièce jointe une couverture type.
    PS2: La question des positions des champs textes sera à affiner effectivement mais c’est de l’ordre du réglage.

    #63660
    bebarth
    Maître des clés

    bonjour,

    …me génère autant de fichiers que de couvertures…

    c’est ce que j’avais cru comprendre !

    là je ne comprend plus bien. Les partitions des instruments à cordes sont différentes et proviennent de fichiers différents ? ou d’un seul ficher ?
    A quoi correspond la question “Combien voulez-vous générer de parties ?” est-ce “…de copies ?”

    @+
    :bonjour:

    #63661
    jojoe
    Membre

    Bonsoir,

    Pardon, c’est moi qui n’avait pas était suffisamment clair.
    En sortie, je voudrais que toutes les pages soient dans le même fichier et non autant de fichier que de pages de couvertures car ensuite, l’idée est de lancer une impression de toutes les couvertures en un clic.
    Par ailleurs Bebarth, je ne sais pas si c’est un bug mais quand j’utilise ton action “Partitions”, les fichiers générés sont vierges. Seuls apparaissent les  deux zones de textes créées. Or l’idée est d’ajouter les zones de textes sur mon fichier d’origine (avec l’illustration, le titre, le compositeur,…) et ce, sur les n couvertures.

    Vu, que l’on ne peut pas insérer un PDF en son propre sein, je ne vois pas comment échapper à la duplication du fichier d’origine. Merlin, tu as parlé de templates… je ne sais pas de quoi il s’agit. Peux-tu m’en dire plus ?

    J’ai essayé de retravailler un peu de mon côté. Je parviens bien à enregistrer mes fichiers. Je voudrais ensuite réaliser l’insertion et c’est là que je bloque. J’ai lu des choses sur acrobusters mais rien n’y fait… :tutut:

    Voici où j’en suis dans mon script…

    Code:

    var nbreParties = 0;
    //Questions Compositeur & Oeuvre
    var nomCompositeur = app.response({
        cQuestion: “Saisissez le nom du compositeur (sans espaces) :”,
        cTitle: “Compositeur”,
        cDefault:”Mozart”
    });
    var nomOeuvre = app.response({
        cQuestion: “Saisissez le nom de l’oeuvre (sans espaces):”,
        cTitle: “Oeuvre”,
        cDefault: “LaFlûteEnchantée”
    });
    //Enregistrement de la page
    this.saveAs(“/C/Couvertures/temp.pdf”);
    this.saveAs(“/C/Couvertures/”+nomCompositeur+”-“+nomOeuvre+”.pdf”);

        //déclaration des variables
        var nomInstrument = app.response({
            cQuestion: “Saisissez le nom de l’instrument :”,
            cTitle: “Instrument”,
            cDefault: “Violon I”
            });
        var nbreParties = app.response({
            cQuestion: “Combien voulez-vous générer de parties ?”,
            cTitle: “Nombre de parties”,
            cDefault: “1”
            });
        var a = parsefloat(nbreParties);
        var i = nbreParties;

    while(a==0)
    {
        a = a-1;

        this.insertPages({
            cPath: “/C/Couvertures/temp.pdf”,
            nPage: -1
        });

    // Construction des champs texte
    var f = this.addField(“Zone_Num”, “text”, 0, [200,250,250,400] )
    f.value = i + “/” + nbreParties; // Texte du bas de page
    f.alignment = “center”; // Alignement du texte
    f.textSize = 20; // Corps du texte
    f.textColor = color.black; // Couleur du texte
    f.textFont = font.Helv; // Police du texte
       
    var f = this.addField(“Zone_Instrument”, “text”, 0, [400,400,300,300] )
    f.value = nomInstrument; // Texte du bas de page
    f.alignment = “center”; // Alignement du texte
    f.textSize = 20; // Corps du texte
    f.textColor = color.black; // Couleur du texte
    f.textFont = font.Helv; // Police du texte

    i = i-1
    }

    Encore merci d’avance pour votre aide.

    Jojoe

    #63662
    Merlin
    Maître des clés

    Peux-tu m’en dire plus ?

    Un bon tuto vaut mieux qu’un long discours : https://www.abracadabrapdf.net/?p=3736

    #63663
    bebarth
    Maître des clés

    bonjour,
    Avant de me relancer dans un script qui ne correspondrait pas à ce que tu veux, pourrais-tu me donner quelques précisions.
    Tu as donc un fichier partition et un fichier couverture que tu voudrais imprimer en “X” exemplaires avec la couverture personnalisée.
    As-tu réellement besoin d’un fichier final compilant toutes ces versions, ou juste d’une action qui permette d’imprimer les différentes versions ?
    Veux-tu comme le propose Merlin insérer cette couverture en “template” qui te permettrait de l’afficher ou pas selon les besoins ???

    @+
    :bonjour:

    #63664
    Merlin
    Maître des clés

    PS: Je vous mets en pièce jointe une couverture type.

    Il n’y a aucun champ de formulaire dans ce document…  :geek:

    #63665
    bebarth
    Maître des clés

    On pourrait les rajouter…

    #63666
    Merlin
    Maître des clés

    Ma déontologie me l’interdit.
    :Smiley08:

    #63667
    bebarth
    Maître des clés

    « ON » n’est pas forcément Merlin !!!

    :Smiley00:

    #63668
    Merlin
    Maître des clés

    Ouf !  :Smiley03:

    J’ai déjà refusé tellement de fois (certains abusent des bonnes volontés) que je ne peux pas faire d’exception même pour un cas aussi simple, sinon ce serait injuste.

    #63669
    jojoe
    Membre

    Bonjour,

    Oui, oui, pardon, j’ai fait un exemple pour illustration de ce que je voulais et ai effectivement utilisé l’outil texte et non un champ de formulaire.
    Quoiqu’il en soit, je suis parvenu avec vos conseils à obtenir ce que je voulais donc tout est bon.
    D’ailleurs, j’ai un peu adapté le processus initial après l’avoir montré à mes collègues. En effet, il n’y a plus de saisie du nom d’instrument. Le script va générer les couvertures pour tous les instruments (Violons, Altos, Violoncelles et Contrebasses). Pour chaque, on demande simplement le nombre de copies souhaitées.

    Juste un petit problème que je n’ai pas réussi à résoudre… ou du moins en bidouillant… je voulais que les pages issues du Template créé préalablement soient insérées à la suite

    Code:
    this.getTemplate(“Couv”).spawn({nPage:this.numPages});

    . Et je ne sais pas pourquoi toute les pages se mettent dans le bon ordre, sauf la dernière qui vient se positionner en “nPage : -1”.
    Du coup, je demande dans mon script à réinsérer une fois supplémentaire le Template (qui se place en page -1) puis je la supprime et tout va bien.

    Voici :

    Code:
    var a = 1;
    var t = this.createTemplate ({nPage:0, cName:”Couv”});
    var nbreCopiesV1 = app.response({
        cQuestion: “Combien souhaitez-vous générer de parties de Violon I ?”,
        cTitle: “Nombre de parties”,
        cDefault: “8”
        });
        while(a        this.getTemplate(“Couv”).spawn({nPages:this.numPages});
           
            var f = this.addField(“ZoneInstru”,”text”,0,[0,50,594,100]);
            f.value = “Violon I”;
            f.alignment = “center”;
            f.textSize = 40;
            f.textColor = color.black;
            f.textFont = font.Helv;
           
            var f = this.addField(“ZoneCopies”,”text”,0,[525,800,585,830]);
            f.value = a + “/” + nbreCopiesV1;
            f.alignment = “right”;
            f.textSize = 20;
            f.textColor = color.black;
            f.textFont = font.Helv;
            a=a+1;
        }
        a=1;
        var nbreCopiesV2 = app.response({
            cQuestion: “Combien souhaitez-vous générer de parties de Violon II ?”,
            cTitle: “Nombre de parties”,
            cDefault: “7”
            });
        while(a        this.getTemplate(“Couv”).spawn({nPage:this.numPages});
               
            var f = this.addField(“ZoneInstru”,”text”,0,[0,50,594,100]);
            f.value = “Violon II”;
            f.alignment = “center”;
            f.textSize = 40;
            f.textColor = color.black;
            f.textFont = font.Helv;
               
            var f = this.addField(“ZoneCopies”,”text”,0,[525,800,585,830]);
            f.value = a + “/” + nbreCopiesV2;
            f.alignment = “right”;
            f.textSize = 20;
            f.textColor = color.black;
            f.textFont = font.Helv;
       
            a=a+1;
        }
        a=1;
        var nbreCopiesAlto = app.response({
            cQuestion: “Combien souhaitez-vous générer de parties d’Alto ?”,
            cTitle: “Nombre de parties”,
            cDefault: “6”
            });
        while(a        this.getTemplate(“Couv”).spawn({nPage:this.numPages});
               
            var f = this.addField(“ZoneInstru”,”text”,0,[0,50,594,100]);
            f.value = “Alto”;
            f.alignment = “center”;
            f.textSize = 40;
            f.textColor = color.black;
            f.textFont = font.Helv;
               
            var f = this.addField(“ZoneCopies”,”text”,0,[525,800,585,830]);
            f.value = a + “/” + nbreCopiesAlto;
            f.alignment = “right”;
            f.textSize = 20;
            f.textColor = color.black;
            f.textFont = font.Helv;
       
            a=a+1;
        }
        a=1;
        var nbreCopiesVlc = app.response({
            cQuestion: “Combien souhaitez-vous générer de parties de Violoncelle ?”,
            cTitle: “Nombre de parties”,
            cDefault: “5”
            });
        while(a        this.getTemplate(“Couv”).spawn({nPage:this.numPages});
               
            var f = this.addField(“ZoneInstru”,”text”,0,[0,50,594,100]);
            f.value = “Violoncelle”;
            f.alignment = “center”;
            f.textSize = 40;
            f.textColor = color.black;
            f.textFont = font.Helv;
               
            var f = this.addField(“ZoneCopies”,”text”,0,[525,800,585,830]);
            f.value = a + “/” + nbreCopiesVlc;
            f.alignment = “right”;
            f.textSize = 20;
            f.textColor = color.black;
            f.textFont = font.Helv;
       
            a=a+1;
        }
        a=1;
        var nbreCopiesCb = app.response({
            cQuestion: “Combien souhaitez-vous générer de parties de Contrebasse ?”,
            cTitle: “Nombre de parties”,
            cDefault: “4”
            });
        while(a        this.getTemplate(“Couv”).spawn({nPage:this.numPages});
               
            var f = this.addField(“ZoneInstru”,”text”,0,[0,50,594,100]);
            f.value = “Contrebasse”;
            f.alignment = “center”;
            f.textSize = 40;
            f.textColor = color.black;
            f.textFont = font.Helv;
               
            var f = this.addField(“ZoneCopies”,”text”,0,[525,800,585,830]);
            f.value = a + “/” + nbreCopiesCb;
            f.alignment = “right”;
            f.textSize = 20;
            f.textColor = color.black;
            f.textFont = font.Helv;
       
            a=a+1;
        }
        this.getTemplate(“Couv”).spawn({nPage:this.numPages});
        this.deletePages({nStart:0,nEnd:1});
        this.saveAs({cPath:”/C/Users/…/Desktop/CouvCordes.pdf”});

    J’ai inséré ce script dans une action et j’obtiens le résultat voulu donc tout va bien.
    Est-il faisable d’ajouter ce script au niveau application. Je vais avoir d’autres scripts du même type à réaliser et j’aimerais créer un menu à cet effet ?
    L’action est top pour un traitement par lot. En l’occurrence, ce script sera utilisé sur un fichier à la fois… Même si ça marche parfaitement ainsi, je me dis que ça peut être mieux (et puis ça me donne l’occasion d’apprendre !). J’ai lu l’article https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/les-differents-niveaux-dutilisation-des-scripts-javascript/ mais je n’ai pas tout très bien compris… où insérer le fichier .js,…

    En tout cas, encore merci pour votre aide et pour ce forum si précieux !

    Jojoe

    #63670
    bebarth
    Maître des clés

    bonjour,
    Pour moi, dans ton script, tu rajoutes le template au dessus de la dernière page. Essaye :

    Code:
    this.spawnPageFromTemplate (“Couv”, 0, false, false)

    https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FDoc_methods.htm%23TOC_spawnPageFromTemplatebc-105&rhtocid=_6_1_8_23_1_104

    …et une petite boucle avec le nom des instruments dans une table éviterait d’écrire 5 fois la même chose, non !!!
    @+
    :bonjour:

    #63671
    jojoe
    Membre

    Merci Bebarth, je vais tester pour l’insertion du Template.

    J’ai commencé le Javascript il y a 15 jours-3 semaines… Je me disais bien qu’il y avait une solution plus efficace plutôt que de tout réécrire. Je vais donc regarder ça !
    Je me suis aussi imprimé le js_developer_guide et le js_api_reference mais c’est des sacrés bottins à se cogner !  :mur:

    ++

    #63672
    bebarth
    Maître des clés

    Je n’ai pas beaucoup de temps en ce moment, mais j’essaierai de t’écrire le script dans les prochains jours.
    @+
    :bonjour:

    #63673
    Merlin
    Maître des clés

    Je me suis aussi imprimé le js_developer_guide et le js_api_reference mais c’est des sacrés bottins à se cogner !

    Malheureusement on n’apprend pas grand-chose avec ces documents qui sont plus des annuaires que des tutos.

    Comme ce ne sont pas des romans qui se lisent de façon linéaire, je trouve qu’imprimer ces documents n’est pas pratique.
    Je conseille d’utiliser Acrobat Pro pour ajouter un “index incorporé*” dans leur versions PDF, et de placer des raccourcis pour y accéder rapidement : les résultats de recherche sont presque instantanés.
    Voir : https://www.abracadabrapdf.net/le-pdf-parfait/index-incorpore/

    Et en attendant que tu partages ta couverture avec des champs de formulaire il vaut mieux que je t’oriente vers mes ressources préférées : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/ressources-pdf-javascript/

    * C’est une fonction tellement méconnue d’Acrobat Pro que même Adobe fourni ses documentations sans index incorporé…
    :geek:

    #63674
    jojoe
    Membre

    Merci Merlin,

    J’ai justement un autre problème qui se pose à moi concernant les outils formulaires… Mais je vais créer un autre post car c’est un sujet différent.

    ++

    #63675
    bebarth
    Maître des clés

    bonjour,
    …la boucle ! (sans être désobligeant  :geek: ).

    Code:
    var Instruments = [“Violon I”, “8”, “Violon II”, “7”,”Alto”, “6”, “Violoncelle”, “5”, “Contrebasse”, “4”];
    var t = this.createTemplate ({nPage:0, cName:”Couv”});
    for (var i = 0; i     var Inst = Instruments;
        var nb = Instruments;
        var nbreCopies = app.response({
            cQuestion: “Combien souhaitez-vous générer de parties de “+Inst+” ?”,
            cTitle: “Nombre de parties”,
            cDefault: nb
            });
        for (var a = 1; a         this.spawnPageFromTemplate (“Couv”, “”, true, false);
            var f = this.addField(Inst,”text”,0,[0,50,594,100]);
            f.value = Inst;
            f.alignment = “center”;
            f.textSize = 40;
            f.textColor = color.black;
            f.textFont = font.Helv;
            var f = this.addField(Inst+”ZoneCopies”+a,”text”,0,[525,800,585,830]);
            f.value = a + “/” + nbreCopies;
            f.alignment = “right”;
            f.textSize = 20;
            f.textColor = color.black;
            f.textFont = font.Helv;
        }
    }
    this.deletePages(this.numPages-1);
    for (i = this.numPages-1; i >= 0; i–) this.movePage(i);
    this.pageNum=0;
    this.saveAs({cPath:”/C/Users/…/Desktop/CouvCordes.pdf”});

    @+
    :bonjour:

    #63676
    jojoe
    Membre

    Merci Bebarth,

    Là tout de suite, je ne comprends pas bien le fonctionnement de la boucle avec table. Mais je vais voir ça de plus prêt !
    ++

    #63677
    bebarth
    Maître des clés

    bonjour,
    Dis-moi si tu veux que je commente le script !
    @+
    :bonjour:

    #63678
    jojoe
    Membre

    Si ce n’est pas trop te demander, je veux bien en effet (je vous sollicite beaucoup depuis quelques jours  :Ooops: ).
    1) Je ne comprends pas faire apparaître les valeurs par défaut relatives au nombre de copies souhaité par instrument dans la table, puisque ces valeurs ne sont pas figés mais saisies par l’utilisateur.
    Aussi, je ne me suis pas encore penché sur la boucle for. Mais ça, je vais regarder et essayer de comprendre.

    Merci,

    Jojoe

    #63679
    Merlin
    Maître des clés

    Aussi, je ne me suis pas encore penché sur la boucle for

    ==> https://www.w3schools.com/jsref/jsref_for.asp
    :Smiley15:

    #63680
    bebarth
    Maître des clés

    …voici le script commenté.
    J’ai rajouté une boucle while pour être certain de n’indiquer qu’un nombre positif !

    Code:
    //On met les instruments et les valeurs par défaut dans une table
    var Instruments = [“Violon I”, “8”, “Violon II”, “7”,”Alto”, “6”, “Violoncelle”, “5”, “Contrebasse”, “4”];
    //On créé le template
    var t = this.createTemplate ({nPage:0, cName:”Couv”});
    //On commence la boucle avec modulo i+2 car les instruments sont tous les 2 éléments dans la table
    for (var i = 0; i     //Instruments est le nom de l’instrument dans la table
        var Inst = Instruments;
        //Instruments est le nombre de copies par défaut dans la table
        var nb = Instruments;
        //J’ai rajouté une boucle pour être certain de ne prendre en compte que des nombres, et positifs
        while (bb<1 | isNaN(bb)) {
            var bb = app.response({
                cQuestion: “Combien souhaitez-vous générer de parties de “+Inst+” ?”,
                cTitle: “Nombre de parties”,
                cDefault: nb
                });
            //On conertit le chaine en nombre
            var nbreCopies = parseFloat(bb);
        }
        //On remet le nombre à 0 pour pouvoir recommencer la boucle while pour le prochain instrument
        var bb = 0;
        //Boucle pour ajouter le nombre de pages indiqué
        for (var a = 1; a         //On ajoute une page
            this.spawnPageFromTemplate (“Couv”, “”, true, false);
            //Premier champ nommé avec le nom de l’instrument
            //Si le nom était commun pour tous les instruments, la valeur (donc le nom de l’instrument) changerait à chaque boucle
            var f = this.addField(Inst,”text”,0,[0,50,594,100]);
            f.value = Inst;
            f.alignment = “center”;
            f.textSize = 40;
            f.textColor = color.black;
            f.textFont = font.Helv;
            //Deuxième champ nommé différemment pour chaque page
            //idem que pour le nom des champs Instruments
            var f = this.addField(Inst+”ZoneCopies”+a,”text”,0,[525,800,585,830]);
            f.value = a + “/” + nbreCopies;
            f.alignment = “right”;
            f.textSize = 20;
            f.textColor = color.black;
            f.textFont = font.Helv;
        }
    }
    //On supprime la page qui a servi de template et qui se trouve en dernière page
    this.deletePages(this.numPages-1);
    //On inverse l’ordre des pages
    for (i = this.numPages-1; i >= 0; i–) this.movePage(i);
    //On affiche la première page
    this.pageNum = 0;
    //…et on enregistre sous !
    this.saveAs({cPath:”/C/Users/…/Desktop/CouvCordes.pdf”});
    //Fini !!!

    @+
    :bonjour:

    #63681
    Merlin
    Maître des clés

    :bravo:

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