Donnez vie à vos documents numériques !
 

Custom Tool – avec multiples niveaux

abracadabraPDF Forums PDF – Général Custom Tool – avec multiples niveaux

  • Ce sujet contient 12 réponses, 3 participants et a été mis à jour pour la dernière fois par bebarth, le il y a 1 mois.
  • Créateur
    Sujet
  • #75305
    jctremblay
    Participant

    // Fonction définissant l’action du bouton d’outil
    function myToolAction() {
    // Logique spécifique de l’action ici
    // Par exemple, effectuer une opération spécifique sur le document
    }

    Je cherche à contruire un script afin d’ajouter un bouton dans mes «custon» tools. J’y arrive avec ceci, mais je n’y arrive pas à créer des menus comme ceci:

    Menu 1 > SousMenu 1
    > SousMenu 2
    Menu 2 > SousMenu 1
    > SousMenu 2

    function myToolAction() { // script ici  }
    // Ajoute un bouton d'outil à Acrobat

    app.addToolButton({
    cName: "NomUniqueDuBoutonOutil", // Identifiant unique pour l'outil
    cLabel: "Libellé du bouton d'outil", // Libellé affiché à l'utilisateur
    cTooltext: "Texte de description détaillé", // Info-bulle descriptive
    cExec: "myToolAction()", // Fonction à exécuter lors du clic sur le bouton
    cEnable: "event.rc = (event.target != null);" // Condition d'activation (vérifie généralement qu'un document est ouvert)
    });

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

    bonjour Jean-Claude,
    Envoie-moi une adresse mail en MP à “bebarth arrobase sfr point fr” où je peux te faire parvenir un exemple.

    @+
    😎

    #75307
    jctremblay
    Participant

    MP envoyé!

    #75308
    bebarth
    Maître des clés

    bonjour,
    Je t’ai envoyé mon fichier modèle que j’utilise lorsque je crée des utilitaires.
    Je ne le partage pas ici car c’est un peu compliqué et ça a été un peu de boulot à faire, mais je peux le partager sur demande.

    @+
    😎

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

    Bonjour

    Pareil, je peux t’envoyer les abracadabraTools en version originale (non minifiée).

    Chaque plugin est indépendant, donc il vérifie d’abord la présence du menu “abracadabraTools”. S’il n’existe pas déjà il le crée, sinon il s’y intègre.

    #75311
    jctremblay
    Participant

    @Merlin – Tu peux m’envoyer que aT-CompteurMots.js ou aT-NouveauDoc.js.

    @bebarth – Merci pour le document. Je n’ai pas de souci à créer des menu avec multiple sous-menu. C’est pour les Outils personnalisés que je n’y arrive pas.

    #75312
    bebarth
    Maître des clés

    …je ne pense pas l’avoir déjà fait alors !

    @+
    😎

    #75313
    jctremblay
    Participant

    En lisant, les infos sur PDFScripting et l’aide de Nesa Nurani (Adobe Community), voici ce que la structure d’un bouton d’outil personnalisé peut ressembler. Bien sur cela peut être plus complexe que ça.

    function myToolAction() {
    var mainMenu = {
    cName: "Main Menu",
    oSubMenu: [
    {cName:"Option1", oSubMenu:[{cName:"SubOption1"},{cName:"SubOption2"}]},
    {cName:"Option2", oSubMenu:[{cName:"SubOption3"},{cName:"SubOption4"}]},
    {cName:"SingleOption"}
    ]
    };
    var selectedOption = app.popUpMenuEx(mainMenu);
    if (selectedOption === "SubOption1") {
    app.alert("Sub-Option 1 selected");
    } else if (selectedOption === "SubOption2") {
    app.alert("Sub-Option 2 selected");
    } else if (selectedOption === "SubOption3") {
    app.alert("Sub-Option 3 selected");
    } else if (selectedOption === "SubOption4") {
    app.alert("Sub-Option 4 selected");
    } else if (selectedOption === "SingleOption") {
    singleOptionAlert();
    }
    }
    
    function singleOptionAlert() { app.alert("Direct Action selected");}
    
    myToolAction();
    app.addToolButton({
    cName: "UniqueToolButtonName",
    cLabel: "Tool Button Label",
    cTooltext: "Open Multi-Level Menu",
    cExec: "myToolAction()",
    cEnable: "event.rc = (event.target != null);"
    });
    #75314
    jctremblay
    Participant

    Le code dans un PDF pour faciliter la lecture/copier.

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

    “@Merlin – Tu peux m’envoyer que aT-CompteurMots.js ou aT-NouveauDoc.js.”

    Ayé !

    #75327
    bebarth
    Maître des clés

    bonjour,
    Je viens de relire ta demande, et en fait (si j’ai bien compris) tu pouvais n’utiliser que la partie “bouton” du fichier que je t’ai envoyé !
    Voici un exemple fait avec la méthode “popUpMenuEx” de l’api reference.

    //######################
    // * b2Tools * #
    // 12/24 #
    // ----------- #
    // PersoTool Example #
    // Exemple Outil Perso #
    //######################
    if (typeof app.formsVersion!="undefined" && app.formsVersion>9 && app.viewerVariation!="Reader") {
    // Traductions
    if (app.language=="FRA") {
    var txtBoutonPersoTool="Outil Perso"; // Texte bouton
    var txtInfoPersoTool="Infobulle"; // Infobulle bouton
    }
    else {
    var txtBoutonPersoTool="Personal Tool"; // Button text
    var txtInfoPersoTool="Tooltip"; // Button tooltip
    }
    // Exécution du script
    var executePersoTool=app.trustedFunction(function(){
    // Traductions
    if (app.language=="FRA") {
    var b2txt00="\u00C9l\u00E9ment 1";
    var b2txt01="\u00C9l\u00E9ment 2";
    var b2txt02="\u00C9l\u00E9ment 2, Sous-menu 1";
    var b2txt03="\u00C9l\u00E9ment 2, Sous-menu 2";
    var b2txt04="\u00C9l\u00E9ment 2, Sous-menu 2, Sous-sous-menu 1";
    var b2txt05="0";
    var b2txt06="\u00C9l\u00E9ment 3";
    var b2txt07="\u00C9l\u00E9ment 4";
    var b2txt08="1";
    var b2txt09="Vous avez choisi l'\u00E9l\u00E9ment menu \"";
    var b2txt10="\"";
    }
    else {
    var b2txt00="Item 1";
    var b2txt01="Item 2";
    var b2txt02="Item 2, Submenu 1";
    var b2txt03="Item 2, Submenu 2";
    var b2txt04="Item 2, Submenu 2, Subsubmenu 1";
    var b2txt05="0";
    var b2txt06="Item 3";
    var b2txt07="Item 4";
    var b2txt08="1";
    var b2txt09="You chose the \"";
    var b2txt10="\" menu item";
    }
    //
    var cChoice=app.popUpMenuEx(
    {
    cName: b2txt00,
    bMarked:true,
    bEnabled:false
    },{
    cName: "-"
    },{
    cName: b2txt01,
    oSubMenu: [
    {
    cName: b2txt02
    },{
    cName: b2txt03,
    oSubMenu: {
    cName:b2txt04,
    cReturn: b2txt05
    }
    }
    ]
    },{
    cName: b2txt06
    },{
    cName: b2txt07,
    bMarked: true,
    cReturn: b2txt08
    }
    )
    app.alert(b2txt09+cChoice+"\" menu item");
    //
    });
    // Icône PersoTool
    var dataIconePersoTool="ffffffffff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ffffffffff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000ffcb0000ffcb0000ffcb0000fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000fffff7aefffff7aefffff7aeffcb0000fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000fffff7aefffff7aeff21221fffcb0000ff21221fff21221fff21221ffffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000ffcb0000ffcb0000ffcb0000fffff7aeff21221ffffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000fffff7aefffff7aefffff7aefffff7aeff21221ffffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000fffff7aefffff7aefffff7aefffff7aeff21221ffffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000fffff7aefffff7aefffff7aefffff7aeff21221ffffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff21221ffffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff21221ffffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ffffffffff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ffffffff";
    var IconePersoTool={
    count: 0,
    width: 20,
    height: 20,
    read: function(nBytes){return dataIconePersoTool.slice(this.count,this.count+=nBytes);}
    };
    // Bouton PersoTool
    var objetBoutonPersoTool={
    cName: "nomBoutonPersoTool",
    cExec: "executePersoTool(event.target);",
    cEnable: "event.rc=(app.doc!=null)",
    cMarked: "event.rc=false",
    cTooltext: txtInfoPersoTool,
    oIcon: IconePersoTool,
    cLabel: txtBoutonPersoTool
    };
    //
    try {
    app.removeToolButton("nomBoutonPersoTool");
    } catch(e){}
    try {
    app.addToolButton(objetBoutonPersoTool);
    } catch(e){}
    }
    //########################
    // That's all folks! #
    // et pis c'est tout ! #
    // @+ #
    // bebarth #
    //########################

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #75354
    jctremblay
    Participant

    Merci @bebarth,
    Cet exemple m’aide vraiment. J’ai que quelques petites questions que je t’ai envoyées par mail.

    #75355
    bebarth
    Maître des clés

    Je viens de te répondre par mail.

    @+
    😎

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