Donnez vie à vos documents numériques !
 

bebarth

Toutes mes réponses sur les forums

Affichage de 99 réponses de 2,476 à 2,574 (sur un total de 3,355)
  • Auteur
    Réponses
  • en réponse à : Envoie formulaire par mail avec un message #64134
    bebarth
    Maître des clés

    il faut écrire :
    cSubject: this.getField(« date_auto »).value,
    sans le premier guillemet !
    @+
    :bonjour:

    en réponse à : Envoie formulaire par mail avec un message #64132
    bebarth
    Maître des clés
    Code:

    cSubject: this.getField(« leChamp »).value,

    @+
    :bonjour:

    en réponse à : Envoie formulaire par mail avec un message #64130
    bebarth
    Maître des clés

    bonjour,
    Voici l’adresse où tu trouveras toutes les informations et paramètres nécessaires pour la commande mailDoc :
    https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FDoc_methods.htm%23TOC_mailDocbc-74&rhtocid=_6_1_8_23_1_73
    Il faudra donc que tu écrives :

    Code:
    this.mailDoc({
        bUI: true,
        cTo: monadressemail,
        cSubject: « Sujet du message »,
        cMsg: « Si vous voulez ne plus faire parti de la liste de diffusion, veuillez envoyer un mail à… »
    });

    @+
    :bonjour:

    en réponse à : Contrôler une réponse #64124
    bebarth
    Maître des clés

    bonsoir,
    Voici ma proposition. Ici le point n’est retiré qu’une seule fois, même si on appuie plusieurs fois sur le bouton !

    Code:
    // si les 2 champs sont masqués, initialisation de la variable « moinsun »
    if (this.getField(« TxrKO »).display == display.hidden && this.getField(« TxrOK »).display == display.hidden) var moinsun = 0;

    if (this.getField(« T5 »).value == this.getField(« T5b »).value) {
    this.getField(« TxrOK »).display = display.visible;
    this.getField(« TxrKO »).display = display.hidden;
    }
    else {
    this.getField(« TxrKO »).display = display.visible;
    this.getField(« TxrOK »).display = display.hidden;
    // pour ne retirer qu’une fois le point, même si on appuie plusieurs fois sur le bouton
    if (moinsun == 0) {
    var moinsun=1;
    this.getField(« Note 3 4 4 »).value= this.getField(« Note 3 4 4 »).value-1;
    }
    }

    @+
    :bonjour:

    en réponse à : Décalage entre la selection et le montant calculé #64128
    bebarth
    Maître des clés

    Dans ton ordre de calcul, « MONTANTTOTAL » est avant « MONTANTLICENCE ». Il faut inverser l’ordre :
    Outils -> Formulaires -> Modifier -> Autres tâches -> Définir l’ordre de calcul
    et là tu sélectionnes « MONTANTTOTAL » que tu descends sous « MONTANTLICENCE » avec le bouton « Descendre »
    C’est peut-être un peu différent suivant la Version Acrobat et l’OS. Ici c’est avec Acrobat XI Mac.
    @+
    :bonjour:

    en réponse à : Décalage entre la selection et le montant calculé #64125
    bebarth
    Maître des clés

    bonjour,
    Dans ta liste déroulante, as-tu coché “calculer immédiatement…” ?
    Peux-tu partager ton fichier ?
    Merci.

    @+
    :bonjour:

    en réponse à : Javascript pour case à cocher #64112
    bebarth
    Maître des clés

    bonjour,
    Il faut juste que les noms des champs soient différents !
    Exemple « P1_Case3 » et « P1_Case3bis ».
    @+
    :bonjour:

    en réponse à : Calculs multiples à partir de cases cochées #64083
    bebarth
    Maître des clés

    bonjour,
    il faut écrire :

    Code:
    if (this.getField(« Jeune »).isBoxChecked(0) && this.getField(« FFCT »).isBoxChecked(0) && this.getField(« F »).isBoxChecked(0)) {this.event.value = this.getField(« Montant3 »).value;
    } else {
    this.event.value=0;
    }

    @+
    :bonjour:

    en réponse à : Erreur de Type NaN pour un champs division #64108
    bebarth
    Maître des clés

    bonjour,
    A ce moment là, tu prends la version sans modifier le format du champ, et dans la condition tu rajoutes :
    … || (this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value)==-Infinity
    Ce qui donne une nouvelle version compliquée mais expliquée :
    Script légèrement modifié/simplifié par rapport à celui posté ce matin -> Fichier correspondant.

    Code:
    // si le résultat de la division n’est pas un nombre ou est ± l’infini
    if (isNaN(this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value) || (this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value)==Infinity || (this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value)==-Infinity) {
        this.event.target.value = «  »; // alors le champ est vide
    } else { // sinon, division
        var nombre = this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value;
        var arrondi = nombre.toFixed(2); // 2 pour arrondir à 2 décimales
        var nombre = arrondi;
        var chaine = nombre.toString(); // conversion du nombre en chaine de caractères
        var resultat = chaine.replace(« . », « , »); // remplace le point par une virgule
        this.event.target.value = resultat; // valeur de ce champ
    }

    Merci pour le « JavaScript » !  :bravo:
    @+
    :bonjour:

    en réponse à : Erreur de Type NaN pour un champs division #64106
    bebarth
    Maître des clés

    re-bonjour,
    Après réflexion, il suffit simplement de modifier le format du champ (cf. copie d’écran) !!!

    Mais pourquoi faire simple quand on peut faire compliqué ?
    Tu peux laisser le format du champ tel quel et modifier le script :

    Code:
    if (isNaN(this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value) || (this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value)==Infinity) {
    this.event.target.value = «  »;
    } else {
    var num = this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value;
    var n = num.toFixed(2);
    var num = n;
    var n = num.toString();
    var str = n;
    var res = str.replace(« . », « , »);
    this.event.target.value =res;
    }

    @+
    :bonjour:

    PS : …et ici on parle JavaScript et non Java. Alors un petit effort !

    en réponse à : Erreur de Type NaN pour un champs division #64105
    bebarth
    Maître des clés

    bonjour,
    quelque chose comme ça (à adapter) :

    Code:
    if (isNaN(this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value) || (this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value)==Infinity) {
    this.event.target.value = «  »;
    } else {
    var num=this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value;
    var entier=Math.floor(num);
    var plus = num-entier;
    switch(plus==0) {
        case false:
            if(((plus*10)-5)<=0) {var decimale=5
            } else {
            var decimale=0;
            var entier = entier+1}
            break;
        case true:
            var decimale=0;
            break;
    }
    this.event.target.value =entier+ », »+decimale;
    }

    je reviens plus tard…
    …le script indiqué arrondit la décimale à 0 ou 5.
    @+
    :bonjour:

    en réponse à : Erreur de Type NaN pour un champs division #64103
    bebarth
    Maître des clés

    bonjour,

    J’ai besoin de votre aide rapidement, si quelqu’un peut me donner un coup de main pour le Java ça serait vraiment apprécié !

    Comme le ferait le merveilleux et non moins enchanteur Merlin, je commencerai par te conseiller de ne pas confondre Java et JavaScript :
    https://abracadabrapdf.net/forum/index.php/topic,2160.0.html

    En ce qui concerne ton problème, il y a déjà une division en champ P2_Texte46 dont tu ne parles pas. Est-ce normal ???
    Pour le calcul du champ P2_Texte50, voici ce que j’écrirais

    Code:
    if (isNaN(this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value) || (this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value)==Infinity) {
    this.event.target.value = «  »;
    } else {
    this.event.target.value = this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value;
    }

    Sur le fichier joint j’ai retiré le calcul du champ P2_Texte46.
    @+
    :bonjour:

    en réponse à : Calculs multiples à partir de cases cochées #64079
    bebarth
    Maître des clés

    En pièce jointe, l’endroit où je suis bloquée.

    j’ai beau chercher… :geek:
    @+
    :bonjour:

    en réponse à : Calculs multiples à partir de cases cochées #64076
    bebarth
    Maître des clés

    bonjour,
    Peux-tu partager un fichier avec tes différentes cases ?
    Merci.
    @+
    :bonjour:

    bebarth
    Maître des clés

    Ça marche, mais… ça manque d’homomorphisme !

    Attention donc de redéfinir les tailles proportionnellement par exemple r[2]=r[0]+10 et r[3]=r[1]+8 pour une punaise de moitié de taille originale.

    A mon avis, tu devrais écrire :

    Code:
    //…pour un icône à l’échelle 1/2
    r[2] = r[0]+(r[2]-r[0])/2;
    r[3] = r[1]+(r[3]-r[1])/2;

    @+
    :bonjour:

    bebarth
    Maître des clés

    bonjour,
    Il faut mettre tes lignes en fin de script, sauf qu’avant il faut « re-scanner » les annotations.
    Sauf qu’avec r[2]=r[2]-5 et r[3]=r[3]-5, l’icône est diminué à chaque fois qu’on en rajoute un autre…
    Il faudrait donc lui donner directement sa taille avec r[2]=r[0]+largeur et r[3]=r[1]+hauteur (ici c’est bien un plus, car…)

    Les coordonnées r[0], r[1], r[2], r[3] pour l’icône sont semblables à celles indiquées pour le champ.

    …ça c’est faut ! Les coordonnées des l’icônes sont définis par le point inférieur gauche et le point supérieur droit (les champs sont définis par le point supérieur gauche et le point inférieur droit… il doit bien y avoir une explication mais je ne la connais pas).

    J’ai vérifié les tailles des icônes et elles ne sont effectivement pas identiques :
    Tombone = 7 x 17 pts
    Punaise =  20 x 16 pts
    Graphique = 20 x 20 pts
    Etiquette = 20 x 16 pts
    Attention donc de redéfinir les tailles proportionnellement par exemple r[2]=r[0]+10 et r[3]=r[1]+8 pour une punaise de moitié de taille originale.
    Ci-joint le dernier fichier avec affichage dans la console des dimensions.
    Dans ce fichier il faudra évidemment retirer les barres obliques et indiquer la largeur et la hauteur souhaitées.

    Code:
    //r[2] = r[0]+largeurSouhaitee;
    //r[3] = r[1]+hauteurSouhaitee;

    @+
    :bonjour:

    bebarth
    Maître des clés

    bonjour,
    C’est tout à fait exact. Les coordonnées r[0], r[1], r[2], r[3] pour l’icône sont semblables à celles indiquées pour le champ.
    Pour avoir la largeur de l’icône il faut donc faire r[2]-r[0] et pour avoir la hauteur r[1]-r[3] (le 0 est en bas à gauche).
    De tête, je ne connais pas exactement la largeur des icônes (il me semble qu’elle n’est pas identique pour tous), il faut donc faire attention de ne pas trop réduire !

    Si l’on veut placer l’icône à une position exacte par rapport au champ, j’avais écris un petit script dont je joint l’action pour connaitre exactement les coordonnées d’un champ.
    @+
    :bonjour:

    en réponse à : Afficher ou cacher photos en fonction d’une liste #64066
    bebarth
    Maître des clés

    Le script de calcul est déclenché par le changement d’état d’un champ (celui-ci ou un autre). Merlin… des commentaires ?
    https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/lordre-dexecution-des-evenements-dans-les-champs-de-formulaire-pdf/
    Lorsque le script est lancé il s’exécute entièrement. Donc si le script de calcul de ta liste est lancé, il va voir la valeur du bouton BR2 qui ne changera pas d’état pendant tout le script !
    Pour faire un peu plus court, tu peux écrire une formule en script de document et lancer cette formule sur chaque bouton.
    Par exemple, en script de document tu écris :

    Code:
    function maFormule()
    {
    if (this.getField(« BR2 »).value==2) {
    this.getField(« BR2 »).value=1;
    } else {
    this.getField(« BR2 »).value=2;
    }
    this.getField(« Liste »).value= » « ;
    }

    …et en script d’action du bouton radio tu écris juste :

    Code:
    maFormule();

    S’il y a des modifications ou du supplément de script, il n’y a juste à l’écrire dans le script de document. Si tu as 30 boutons, ça réduit pas mal le temps !

    @+
    :bonjour:

    en réponse à : Afficher ou cacher photos en fonction d’une liste #64064
    bebarth
    Maître des clés

    bonjour,
    Dans le fichier joint, j’ai mis un script de calcul sur le bouton droit BR1.

    Code:
    if (this.getField(« BR2 »).value==2) {
    this.getField(« BR2 »).value=1;
    } else {
    this.getField(« BR2 »).value=2;
    }
    this.getField(« Liste »).value= » « ;

    Donc, dans l’exemple uniquement lorsqu’on clique le bouton BR1 droit, le bouton BR2 change et la liste est remise sur  » « .
    J’ai remis les champs A, B et C sinon il y avait erreur…
    @+
    :bonjour:

    en réponse à : Afficher ou cacher photos en fonction d’une liste #64061
    bebarth
    Maître des clés

    bonjour,

    Est-il possible de cacher 1 seul bouton-radio sur 3 (par exemple) sans que les 2 autres se cachent ?

    ça Merlin a répondu !

    Si, à chaque que je change la valeur du bouton radio1
    Alors, la Liste1 revient à sa valeur initial (et on peut encore changer la valeur de la Liste1 à la main)

    …et ça, ce serait bien que tu reformules et si possible que tu partages un fichier, car je ne suis pas certain de comprendre !
    A quoi servent les boutons radio ?
    @+
    :bonjour:

    en réponse à : Afficher ou cacher photos en fonction d’une liste #64058
    bebarth
    Maître des clés

    non,mais on peut écrire :

    Code:
    switch (event.value < 55) {
        case true:
        this.getField(« Phot »).display = display.hidden;
        this.getField(« Phot.A »).display = display.visible;
        break;
        default:
        this.getField(« Phot »).display = display.hidden;
    }

    …je reviens plus tard pour les autres questions !
    @+
    :bonjour:

    en réponse à : Afficher ou cacher photos en fonction d’une liste #64055
    bebarth
    Maître des clés

    bonjour,
    Ce n’est pas très évident à comprendre, car event.value représente la nouvelle valeur du champ, tandis que event.target.value représente la valeur actuelle du champ.
    https://forums.adobe.com/thread/2302153
    « Savoir quand utiliser l’un ou l’autre est compliqué… » c’est dit dans le texte !
    @+
    :bonjour:

    en réponse à : Afficher ou cacher photos en fonction d’une liste #64053
    bebarth
    Maître des clés

    Je n’ai jamais eu de PC !  :extra:
    Apple II en 1980 et Mac depuis le 128k en 1984… et en 110 V. J’avais un transfo presque aussi gros que le Mac.

    Il y a eu des moments très durs début des années 90 ou le service informatique voulait supprimer mon mac. Grâce à mes collègues américains qui m’ont toujours soutenu, j’ai pu rester le seul Mac en France. Quel bonheur… comme ils n’y connaissent rien, j’ai tous les droits admin sur mes Mac’s. Je fais ce que je veux et je les sollicite uniquement pour l’achat de matériel ou logiciel. Et à chaque fois j’entends « Mac, c’est de la m…. ». Au début ça m’énervais mais ça fait déjà un moment que ça glisse et que je pense « cause toujours, le principale c’est que j’ai mon Mac ». J’en ai d’ailleurs 3 sur mon bureau maintenant !
    @+
    :bonjour:

    en réponse à : Afficher ou cacher photos en fonction d’une liste #64051
    bebarth
    Maître des clés

    ??? je n’ai pas compris !
    :doute:

    en réponse à : Afficher ou cacher photos en fonction d’une liste #64049
    bebarth
    Maître des clés

    bonjour,
    moi quand il y a plein de if/else, je préfère l’expression switch qui pour moi me semble plus claire.

    Code:
    switch (event.value) {
        case « A »:
        this.getField(« Phot »).display = display.hidden;
        this.getField(« Phot.A »).display = display.visible;
        break;
        case « B »:
        this.getField(« Phot »).display = display.hidden;
        this.getField(« Phot.B »).display = display.visible;
        break;
        case « C »:
        this.getField(« Phot »).display = display.hidden;
        this.getField(« Phot.C »).display = display.visible;
        break;
        default:
        this.getField(« Phot »).display = display.hidden;
    }

    Mais ce n’est que mon opinion !
    @+
    :bonjour:

    bebarth
    Maître des clés

    bonjour,
    Voici ma proposition avec cases à cocher.
    J’entends déjà Merlin dire qu’il n’aime pas cette fonction…
    @+
    :bonjour:

    bebarth
    Maître des clés

    Ce ne serait pas un lien ???
    @+
    :bonjour:

    bebarth
    Maître des clés

    Pour moi aussi, c’est ce qu’il y a de plus simple, mais :

    c’est bien ce que je pensais faire mais dans les propriétés de mon masque je n’ai pas script de calcul… :-(
    Dans les propriétés j’ai juste « général, aspect, position, option, action »

    …ce n’est donc pas un champ !
    Ce n’est pas non plus une annotation.
    @+
    :bonjour:

    bebarth
    Maître des clés

    bonjour,
    Qu’est-ce que le « masque c » pour toi ?
    Tu peux partager un exemple ?
    @+
    :bonjour:

    bebarth
    Maître des clés

    bonjour,
    Voilà, j’ai un peu peaufiné le sujet avec un maximum de 5 pièces jointes !
    On pourrait encore l’améliorer et vérifier que les icônes ne soient pas hors pages…
    @+
    :bonjour:

    en réponse à : Champs calcuté entre deux dates #64043
    bebarth
    Maître des clés

    Tu remplaces la dernière ligne par celles-ci :

    Code:
    if (this.getField(« laDate1″).value != » » && this.getField(« laDate2″).value != » ») {
    this.event.target.value= »La différence est de « +Math.abs(mois)+ » mois. »;
    } else {
    this.event.target.value= » »;
    }

    @+
    :bonjour:

    en réponse à : Champs calcuté entre deux dates #64041
    bebarth
    Maître des clés

    bonjour,
    Voici un script à placer en script de calcul du champ texte.

    Code:
    var str=this.getField(« laDate1 »).valueAsString;
    var res = str.split(« / »);
    mois1=parseInt(res[1]);
    annee1=parseInt(res[2]);
    var str=this.getField(« laDate2 »).valueAsString;
    var res = str.split(« / »);
    mois2=parseInt(res[1]);
    annee2=parseInt(res[2]);
    var mois= Math.abs(annee2-annee1)*12;
    if (annee2>annee1) {
    var mois = mois-12+(12-mois1)+mois2;
    } else {
    var mois = mois-12+(12-mois2)+mois1;
    }
    this.event.target.value= »La différence est de « +Math.abs(mois)+ » mois. »

    @+
    :bonjour:

    bebarth
    Maître des clés

    bonjour,Une petite variante pour choisir l’icône et sa couleur.@+ :bonjour:

    bebarth
    Maître des clés

    boujour,Voici une rapide réponse pour un script de calcul du champ texte.N’hésite pas à me dire si tu ne comprends pas.@+ :bonjour: 

    bebarth
    Maître des clés

    bonjour,
    Voici un exemple pour faire apparaitre l’épingle (ou autre) à la gauche du bouton.
    Attention, le point à indiquer pour la position de l’icône est le supérieur gauche, et la taille de l’icône ne varie pas en fonction de l’affichage.
    Il faudra certainement ajuster la position Y en fonction de la hauteur du bouton.
    @+
    :bonjour:

    en réponse à : Liste déroulante Adobe Acrobat #63999
    bebarth
    Maître des clés

    c’est un peu plus compliqué parce qu’il faut imbriquer des boucles…

    Code:
    var nbExportListe1=this.getField(« ListeNiveau1 »).value;
    var nbExportListe2=this.getField(« ListeNiveau2 »).value;
    switch (nbExportListe1) {
        case 0: //Afrique
        switch (nbExportListe2) {
            case 0: //Algérie
            var nbAindiquer = 150;
            break;
            case 1: //Maroc
            var nbAindiquer = 125;
            break;
            //etc.
        }
        break;
        case 1: //Europe
        switch (nbExportListe2) {
            case 0: //France
            var nbAindiquer = 1000;
            break;
            case 1: //Allemagne
            var nbAindiquer = 500;
            break;
            case 2: //Italie
            var nbAindiquer = 750;
            break;
            case 3: //Espagne
            var nbAindiquer = 300;
            break;
            //etc.
        }
        break;
        case 2: //Amérique du nord
        switch (nbExportListe2) {
            case 0: //USA
            var nbAindiquer = 10;
            break;
            case 1: //Canada
            var nbAindiquer = 50;
            break;
            //etc.
        }
        break;
        //etc.
    }
    this.event.target.value= nbAindiquer;

    mais avec un bon éditeur de JavaScript ça se fait !
    @+
    :bonjour:

    en réponse à : Liste déroulante Adobe Acrobat #63997
    bebarth
    Maître des clés

    …il faut lire :

    Code:

    default:

    et non « delault: », ce qui ne veut rien dire  :geek:

    Merlin,
    il m’est maintenant impossible de modifier une de mes réponse (je crois après un certain temps), même s’il n’y a pas eu d’autres réponses…

    @+
    :bonjour:

    en réponse à : Liste déroulante Adobe Acrobat #63996
    bebarth
    Maître des clés

    bonjour,
    Tu écris un petit script de calcul pour ton champ texte

    Code:
    var nbExportListe=this.getField(« ListeNiveau2 »).value;
    switch (nbExportListe) {
    case 0: //France
    var nbAindiquer = 1000;
    break;
    case 3: //Espagne
    var nbAindiquer = 300;
    break;
    delault:
    var nbAindiquer = 0;
    }
    this.event.target.value= nbAindiquer;

    …et tu n’oublies pas de cocher « Valider les valeurs sélectionnées immédiatement » en option de la liste déroulante.
    @+
    :bonjour:

    bebarth
    Maître des clés

    bonjour,
    Dans un premier temps je te propose de regarder ce post :

    Dans l’exemple joint il y a un bouton « Enregistrer » …qui enregistre et un bouton « Enregistrer sous » qui enregistre avec les nouvelles valeurs des champs « ref » et « Horodatage ». J’espère que tu sauras l’adapter pour ton fichier.
    @+
    :bonjour:

    …et de voir si tu peux l’adapter à ton problème (ouverture d’une fenêtre qui demande le nom avec lequel tu veux enregistrer ton fichier sous…).
    @+
    :bonjour:

    en réponse à : Signets des pages masquées #63906
    bebarth
    Maître des clés

    bonjour,
    …du coup, je partage quand même l’exemple avec un script que j’avais écris si ça peut servir à quelqu’un !
    @+
    :bonjour:

    en réponse à : Signets des pages masquées #63901
    bebarth
    Maître des clés

    bonjour,
    Lorsque l’on masque une page, le signet correspondant perd sont action. Avec un script, il faut donc recréer cette action lorsque l’on fait réapparaitre la page.
    Sinon tu pourrais renommer le signet (avec un tiret par exemple) lorsque tu masques la page, ou mettre la couleur du signet en blanc… ou les deux !!!
    Je crois qu’il faudrait trouver la couleur exacte, car lorsqu’on met le texte du signet en blanc on arrive à le lire ! le fond ne doit pas être tout à fait blanc, parce que plus blanc que blanc, je ne vois pas…
    @+
    :bonjour:

    en réponse à : Formatage nombre en timecode #63868
    bebarth
    Maître des clés

    bonjour,
    un petit screeshot vaut mieux qu’un long discours !
    @+
    :bonjour:

    bebarth
    Maître des clés

    bonjour,
    Voici une proposition où l’on peut choisir la couleur du texte avec un bouton radio.
    Est-ce de cette manière que tu voulais pouvoir modifier la couleur ?
    @+
    :bonjour:

    en réponse à : Nom du template ou nom d’un champ avec regex #63761
    bebarth
    Maître des clés

    bonjour,

    Il ne peut pas être incorporé au fichier pdf ?

    si, tu pourrais le mettre en action d’un signet par exemple !
    @+
    :bonjour:

    en réponse à : Nom du template ou nom d’un champ avec regex #63759
    bebarth
    Maître des clés

    bonjour,
    Apparemment non, je ne crois pas que le fichier ait un souci ! C’est un fichier action (zippé).
    Il faut le décompresser et double-cliquer pour l’installer.
    Si tu l’utilises avec le fichier joint (par exemple), tu lances l’action et ça fonctionne bien !
    @+
    :bonjour:

    en réponse à : Numéro de document automatique #63769
    bebarth
    Maître des clés

    Pour commentaires !

    bonjour,
    Pas de commentaires ???  :doute:
    On oubli et on passe à autre chose alors !
    @+
    :bonjour:

    en réponse à : Comment compter des boutons radio #63864
    bebarth
    Maître des clés

    …dans le principe c’est ça qu’il faut faire ! mais au lieu coller x fois le script, tu créé un script de document « calcul » par exemple, ensuite tu le rappelles uniquement avec calcul();
    c’est plus pratique lorsqu’il y a des modifications à faire. ça évite de les recoller partout…
    @+
    :bonjour:

    en réponse à : Comment compter des boutons radio #63862
    bebarth
    Maître des clés

    bonjour,
    As-tu compris le principe ?
    @+
    :bonjour:

    en réponse à : Comment compter des boutons radio #63860
    bebarth
    Maître des clés

    bonjour,
    Voici un petit script pour te permettre de compter les différentes options choisies :

    Code:
    var totalA=0;
    var totalB=0;
    var totalC=0;
    for ( var i=0; i    var fname = this.getNthFieldName(i);
        if (this.getField(fname).type == « radiobutton » ) {
            var valeur = this.getField(fname).value;
            switch (valeur) {
                case « A »:
                totalA++;
                break;
                case « B »:
                totalB++;
                break;
                case « C »:
                totalC++;
            }
        }
    }
    app.alert(« Boutons radio trouvés :u0020u000Du0020″+ totalA +  » option(s) A.u0020u000Du0020″+ totalB +  » option(s) B.u0020u000Du0020″+ totalC +  » option(s) C. »,1)

    @+
    :bonjour:

    en réponse à : Afficher / Masquer des pages dans un fichier #63551
    bebarth
    Maître des clés

    bonjour,
    Comme ça je ne vois pas ! il faudrait voir le fichier… sur le dernier fichier que j’avais joint (exemple-test_BB1.pdf) ça fonctionne, non ???
    @+
    :bonjour:

    en réponse à : Nom du template ou nom d’un champ avec regex #63756
    bebarth
    Maître des clés

    bonjour,

    Avez-vous une idée de comment mettre en pratique ?

    J’ai écris un petit script qui supprime les pages qui possèdent un champ dont le nom contient « ACC_FR ».

    Code:
    var test = « ZERO »;
    var pagesAsupprimer = new Array();
    // On teste tous les noms des champs
    for (var i = 0; i < this.numFields; i++) {
        var fname = this.getNthFieldName(i);
        // Page relative au champ
        var fpage = this.getField(fname).page;
        // Ici on teste si le nom du champ con tient ACC_FR
        var str = fname;
        var n = str.indexOf(« ACC_FR »);
        // Si ACC_FR a été trouvé et la page n’est pas identique à la précédente trouvée
        if (n > -1 && fpage != test) {
            pagesAsupprimer.unshift(fpage);
            var test = fpage;
        }
    }
    // On remet les numéros de pages dans l’ordre décroissant
    pagesAsupprimer.sort(function(a, b){return b-a});
    // On supprime les pages trouvées dans l’ordre de la table (sens inverss)
    for (var i = 0; i < pagesAsupprimer.length; i++) {
        this.deletePages({nStart: pagesAsupprimer});
    }

    Il faudra adapter le script selon le nom des champs à tester !
    @+
    :bonjour:

    en réponse à : Afficher / Masquer des pages dans un fichier #63549
    bebarth
    Maître des clés

    bonjour,

    Si je veux afficher à l’ouverture du fichier une des 2ème, 3ème, 4ème page cachées dès le départ il ne se passe rien tant que je n’ai pas affiché la première !?!

    Je ne suis pas certain de comprendre !
    Tu veux afficher directement la page cochée ???
    Si c’est cela, tu retires

    Code:
    this.pageNum=pg;

    en fin de chaque script de checkbox.

    @+
    :bonjour:

    en réponse à : Nom du template ou nom d’un champ avec regex #63751
    bebarth
    Maître des clés

    bonjour,
    Tu peux sélectionner uniquement le texte compris entre l’underscore « _ » et le point « . »

    Code:

    var str = fname;
    var n = str.indexOf(« _ »);
    var nn = str.indexOf(« . »);
    var Pays = str.slice(n+1,nn);

    …et là il peut y avoir autant de chiffres qu’il est possible !
    @+
    :bonjour:

    en réponse à : Formulaire en ligne et calcul #63829
    bebarth
    Maître des clés

    bonjour,
    Comme tu as pu le constater, le JavaScript ne fonctionne pas pour les formulaires ouverts dans un navigateur…
    Il faut les importer en local.
    @+
    :bonjour:

    en réponse à : Formulaire : liste déroulante qui définit un texte #63809
    bebarth
    Maître des clés

    …en vacances, sans ordi ni wifi !!!
    @+

    :bonjour:

    en réponse à : Formulaire : liste déroulante qui définit un texte #63805
    bebarth
    Maître des clés

    Si c’est possible je souhaite que ça soit pas une case texte mais une deuxième liste déroulante afin de choisir directement DT ou TM si l’on veux, mais qu’il mettent automatiquement DT ou TM en fonction de A B C .

    …je n’ai donc pas bien compris !
    :geek:

    en réponse à : Formulaire : liste déroulante qui définit un texte #63803
    bebarth
    Maître des clés

    bonjour,
    Si j’ai bien compris, il faut que tu fasses une recherche sur le forum sur « liste mère fille ».

    Je sais pas si c’est possible ça me parait compliqué x)

    …je te confirme, ce n’est pas par le plus simple que tu commences !
    @+
    :bonjour:

    en réponse à : Nom du template ou nom d’un champ avec regex #63749
    bebarth
    Maître des clés

    bonjour,
    …sinon, on peut tester les pages qui possèdent au moins un champ comprenant « .ACC_ » (par exemple), et on supprime ces pages !
    @+
    :bonjour:

    en réponse à : formulaire #63801
    bebarth
    Maître des clés

    bonjour,
    c’est un bouton radio qu’il te faut pour choisir soit le choix 1 soit le choix 2 !
    En script du bouton radio du choix 1 tu écris :

    Code:
    this.getField(« Nom »).display=display.visible;
    this.getField(« Prenom »).display=display.visible;
    this.getField(« Adresse1 »).display=display.visible;
    this.getField(« Societe »).display=display.hidden;
    this.getField(« Representant »).display=display.hidden;
    this.getField(« Adresse2 »).display=display.hidden;

    …et en script du bouton radio du choix 2 tu écris… l’inverse !
    @+
    :bonjour:

    en réponse à : Numéro de document automatique #63768
    bebarth
    Maître des clés

    bonsoir,
    Voici ma proposition.
    Tu places les 3 dossiers inclus dans « monDossier » où tu veux, mais dans le même répertoire (ENV, ECO et Compteurs).
    Tu places le fichier « Save_NumAuto.js » en script d’application.
    Tu installes l’action « Nume?rotation Automatique.sequ ».
    Lorsque tu lances l’action à partir d’un fichier inclus dans ENV ou ECO, tu devrais avoir ce que tu recherchais…
    Pour commentaires !
    @+
    :bonjour:

    en réponse à : Calcul et format "field" #63781
    bebarth
    Maître des clés

    …je n’avais pas vu « en français » !
    https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/RegExp
    @+
    :bonjour:

    en réponse à : Calcul et format "field" #63780
    bebarth
    Maître des clés

    …pour en savoir un peu plus :
    https://www.w3schools.com/jsref/jsref_obj_regexp.asp
    @+
    :bonjour:

    en réponse à : Calcul et format "field" #63778
    bebarth
    Maître des clés

    bonjour,
    En script de calcul de ton champ « nombre de bouteilles » tu écris :

    Code:
    if (this.event.target.value <= 18) {
    this.getField(« P_Tr »).value = (this.event.target.value*2)+ »,00 € »;
    } else {
    this.getField(« P_Tr »).value = « OFFERT »;
    }

    En script de touche (toujours pour ce champs) tu écris :

    Code:
    var regxp=/^[0-9]$/;
    if(!event.willCommit) {
        if(event.change.length>0 && regxp.test(event.change)==false)
            {
            app.beep(0);
            event.rc=false;
            }
        }

    …pour ne tenir compte des nombres positifs !
    @+
    :bonjour:

    en réponse à : Numéro de document automatique #63766
    bebarth
    Maître des clés

    bonjour,
    Le numéro d’incrémentation est-il commun pour les 2 répertoires ENV et ECO.
    Quel sera le logiciel de l’utilisateur ? Acrobat pro ou Adobe Reader ?
    Je regarde ça un peu plus tard…
    @+
    :bonjour:

    en réponse à : Numéro de document automatique #63763
    bebarth
    Maître des clés

    bonjour,
    S’il n’y a pas d’autres réponses avant, ce ne sera que demain pour t’aider…
    On est d’accord que tous les utilisateurs on les droits d’écritures dans les répertoires !
    La zone « Num_Doc » dont tu parles est un champ je suppose.


    Le premier dossier s’appel « ENV ».
    Le second s’appel « ECO ».

    J’aimerais également que lorsqu’il enregistre le formulaire, le formulaire soit enregistré sous avec pour titre le Num_Doc.

    Les fichiers sont enregistrés dans le même répertoire ???
    Ce sera au moins un script d’action pour pouvoir enregistrer les documents !
    @+
    :bonjour:

    en réponse à : Nom du template ou nom d’un champ avec regex #63742
    bebarth
    Maître des clés

    bon ben voilà,
    J’ai mis une fonction en script de document que j’appelle en script d’ouverture de page :

    Code:
    function symbol()
    {
    var laPage = this.pageNum;
    var fpage = -1;
    var Pays= » »;
    var i = 0;
    try {
        while (fpage != laPage) {
        var fname = this.getNthFieldName(i);
        var fpage = this.getField(fname).page;
        i++;
        }
        var str = fname;
        var n = str.indexOf(« _ »);
        var Pays = str.slice(n+1,n+3);
        app.alert({cMsg: »Le code pays est « +Pays+ ». », nIcon:2});
        } catch(e) {
            app.alert({cMsg: »Il n’y a pas de code pays en page « +(laPage+1)+ ». », nIcon:2});
            };
    }

    Si tu colle le script d’ouverture de page sur chaque template, il sera présent pour chaque nouvelle page créée.
    Ici il y a un message d’alerte, Il faudra adapter à ce que tu veux faire…
    @+
    :bonjour:

    en réponse à : Nom du template ou nom d’un champ avec regex #63740
    bebarth
    Maître des clés

    dernier point : FR, US, BE… sont des pays je présume.
    Y a-t-il toujours uniquement 2 lettres ??? sont-elles toujours situées au même endroit : en fin du nom de champs ou  après l’underscore « _ » par exemple ???
    @+
    :bonjour:

    en réponse à : Nom du template ou nom d’un champ avec regex #63738
    bebarth
    Maître des clés

    ben, on va dire que c’est moyen clair pour moi !
    Est-ce que tu veux récupérer l’info à chaque fois que tu ajoutes une page ou sur un document entier ?
    Ou ajoutes-tu cette page ? en première page, en dernière page, n’importe où ???
    @+
    :bonjour:

    en réponse à : Nom du template ou nom d’un champ avec regex #63736
    bebarth
    Maître des clés

    bonjour,

    Est-ce que c’est possible de récupérer le FR qui se trouve dans le nom du template ?

    Qu’entends-tu par là ??? Normalement, si tu rajoutes une page via un template, tu connais son nom, non !!!
    Comment rajoutes-tu la page ?
    @+
    :bonjour:

    en réponse à : Mettre en surbrillance la cellule active #63734
    bebarth
    Maître des clés

    …pas besoin de script de document !
    Tu écris ceci directement soit en action champ activé/désactivé  soit en souris entrée/sortie :

    Code:
    if (this.event.target.fillColor == « RGB,1,0,0 ») {
    this.event.target.fillColor = [« RGB », 1,1,0];
    } else {
    this.event.target.fillColor = [« RGB », 1,0,0];
    }

    Ici, ton erreur est que lorsque l’on lit la couleur du champ, la valeur retournée est « RGB,1,0,0 » et non « [RGB »,1,0,0] ». Ça c’est la syntaxe pour écrire la couleur du fond.
    @+
    :bonjour:

    en réponse à : Mettre en surbrillance la cellule active #63732
    bebarth
    Maître des clés
    bebarth
    Maître des clés

    bonjour,
    Je voudrais bien essayer de t’aider, mais je ne connais pas LiveCycle Designer et ton fichier est protégé donc impossible de lire les scripts, les noms de champs et le template (je suppose) et de voir ce qui se passe…
    N’est-il pas possible d’écrire un script d’ouverture de page qui reprendrait le numéro de facture et la date pour les afficher dans la nouvelle page ! C’est ce que j’avais fait pour un autre formulaire.
    @+
    :bonjour:

    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.length; i = i+2) {
        //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 <= nbreCopies; 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:

    bebarth
    Maître des clés

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

    en réponse à : JS – Action à réaliser en fonction d’une CheckBox #63724
    bebarth
    Maître des clés

    Pourquoi ???
    Il ne fonctionne pas bien ?
    @+
    :bonjour:

    en réponse à : JS – Action à réaliser en fonction d’une CheckBox #63722
    bebarth
    Maître des clés

    bonjour,
    si tu essayes d’écrire « this/getField… » tu auras vite fait la réponse !!!

    Sinon, pour la case à cocher, on peut aussi écrire :

    Code:
    if (event.target.isBoxChecked(0)) {
    // script à exécuter;
    } else {
    // script à exécuter;
    }

    @+
    :bonjour:

    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 < Instruments.length; i = i+2) {
        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 <= nbreCopies; 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:

    en réponse à : Mes outils ont disparu ! #63713
    bebarth
    Maître des clés

    Bonjour,
    Regarde si on ne t’a pas installé une version Acrobat Standard au lieu d’une version Pro…
    @+
    :bonjour:

    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:

    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:

    en réponse à : Addition horaire PDF (Javascript) #63032
    bebarth
    Maître des clés

    vous êtes un dieu!!!!….

    Faut pas exagérer !!! Etre Grand Magicien me convient plus qu’honorablement.
    @+
    :bonjour:

    bebarth
    Maître des clés

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

    :Smiley00:

    bebarth
    Maître des clés

    On pourrait les rajouter…

    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:

    en réponse à : Fractionnement doc et enregistrement avec nom spécifique #63654
    bebarth
    Maître des clés

    bonjour Merlin,
    Le tuto que tu indiques répondrait plus à un autre post où j’avais répondu car il extrait les pages contenant un même mot et enregistre ce mot comme nom de fichier.
    https://abracadabrapdf.net/forum/index.php/topic,3410.msg20094.html#msg20094

    Ici, le problème est un peu différent. On teste les mots qui sont après et sur la même ligne que le mot COMMUNE ou SECTEUR et on prend tous ces mots pour former un nom (de ville et de fichier). C’est pourquoi j’avais demandé s’il n’y avait pas d’autres mots sur la même ligne, sinon impossible de savoir ou s’arrête le nom de la ville.
    @+
    :bonjour:

    en réponse à : Récupération de texte avec Adobe Acrobat Pro #63687
    bebarth
    Maître des clés

    bonjour Merlin,
    Pareil pour moi, c’est pourquoi j’ai fourni des fichiers .docx et .rtf ne sachant ce que disposait bendesarts comme logiciel(s).
    @+
    :bonjour:

    en réponse à : Addition horaire PDF (Javascript) #63030
    bebarth
    Maître des clés

    bonjour,
    Voici ce que j’ai en adaptant le script qui était dans le post indiqué.
    Si le JavaScript est du charabia pour toi, j’espère que tu sauras te dépatouiller avec ça car je n’ai pas beaucoup de temps pour expliquer en ce moment… et les opérations de temps ne sont pas ce qui est de plus simple pour débuter !
    Mais s’il doit y avoir quelques adaptations c’est faisable quand même !
    @+
    :bonjour:

    en réponse à : Addition horaire PDF (Javascript) #63029
    bebarth
    Maître des clés

    bonjour,
    Comment remplis-tu les heures ? Ce sont des champs j’espère ???
    Je suppose qu’il faut remplir les heures d’arrivée et de départ !
    Le total heures semaines est le total de toutes les lignes ???
    @+
    :bonjour:

    en réponse à : Récupération de texte avec Adobe Acrobat Pro #63685
    bebarth
    Maître des clés

    bonjour,
    je n’ai pas eu de problème, mais mieux vaudrait « Enregistrer sous un autre… » ton fichier !
    Je te joins les fichiers docx et rtf.
    @+
    :bonjour:

    en réponse à : Fractionnement doc et enregistrement avec nom spécifique #63652
    bebarth
    Maître des clés

    bonsoir,
    Là, ça devrait marcher qu’il y ait ou pas des mots sur la page et qu’il y ait COMMUNE/SECTEUR ou pas !

    Code:
    console.show();
    console.clear();
    //Début durée
    d0=new Date();
    debut=util.printd(« dd-mm HH:MM »,d0);
    console.println(« Début process: »+debut);
    //Initialisation des variables
    var Chemin = this.path;
    var PathSansExt = Chemin.substring(0,Chemin.length-4);
    var nomDocument = this.documentFileName;
    var repertoire = Chemin.substring(0,Chemin.length-nomDocument.length);
    for (var p = 0; p < this.numPages; p++) {
        var ville = «  »;
        var ckWord = «  »;
        var i = 0;
        //recherche du mot COMMUNE
        var numWords = this.getPageNumWords(p);
        console.println(« La page: »+(p+1)+ » comporte « + numWords + » mots »);
        if (numWords > 0) {
        try {
            while (ckWord != « COMMUNE » && ckWord != « SECTEUR ») {
                var ckWord = this.getPageNthWord(p, i, true);
                //Coordonnées du mot
                var q = this.getPageNthWordQuads(p, i);
                // convert quads in default user space to rotated
                // user space used by Links.
                m = (new Matrix2D).fromRotated(this,p);
                mInv = m.invert()
                r = mInv.transform(q) //Coordonnées champ du mot trouvé
                r=r.toString() //Conversion en chaîne
                r = r.split(« , »); //Séparation de la chaîne à chaque virgule « , »
                //Position verticale du mot
                var posVert = r[3];
                i=i+1;
            }
            var posMot = posVert;
            while (posMot == posVert) {
                var ckWord = this.getPageNthWord(p, i, true);
                //Coordonnées du mot
                var q = this.getPageNthWordQuads(p, i);
                // convert quads in default user space to rotated
                // user space used by Links.
                m = (new Matrix2D).fromRotated(this,p);
                mInv = m.invert()
                r = mInv.transform(q) //Coordonnées champ du mot trouvé
                r=r.toString() //Conversion en chaîne
                r = r.split(« , »); //Séparation de la chaîne à chaque virgule « , »
                //Position verticale du mot
                var posMot = r[3];
                i=i+1;
                if (posMot == posVert) {var ville = ville +  »  » + ckWord;}
            }
            var str = ville;
            var debutVille = ville.substring(0,1);
            if (debutVille == » « ) {
                var res = str.slice(2);
            } else {
                var res = str.slice(1);
            }
            var ville = res;
            if (ckWord == « COMMUNE ») {
                console.println(« Commune : « +ville);
            } else {
                console.println(« Secteur : « +ville);
            }
            if (ville != «  ») {
                this.extractPages({
                    nStart: p,
                    cPath: repertoire+ville+ ».pdf »
                    });
            }
        } catch(e) {
            app.alert({cMsg: »La page « + (p+1) +  » ne contient ni COMMUNE ni SECTEUR. », nIcon:2});
            }
        }
    }
    //Fin durée
    df=new Date();
    fin=util.printd(« dd-mm HH:MM »,df);
    console.println(« Fin process: »+fin);
    delta=(df.valueOf()-d0.valueOf())/1000/60;
    console.println(« Duree process: »+delta+ » minutes »);

    Si tu ne veux pas le message d’alerte, tu enlève la ligne

    Code:
            app.alert({cMsg: »La page « + (p+1) +  » ne contient ni COMMUNE ni SECTEUR. », nIcon:2});

    @+
    :bonjour:

    en réponse à : Fractionnement doc et enregistrement avec nom spécifique #63650
    bebarth
    Maître des clés

    …pas d’erreur de mon côté avec le fichier que tu avais fourni, mais je n’ai pas pris en compte la possibilité par exemple qu’une page soit vierge.
    Cette possibilité est-elle envisageable ??? Il faudrait peut-être rajouter des fonctions « try » !!!
    Je ne sais pas si je pourrai regarder ça ce soir… trop de boulot (je suis sur une vidéo Adobe Première très urgente -> pour samedi).
    Sinon demain matin !
    @+
    :bonjour:

    en réponse à : Fractionnement doc et enregistrement avec nom spécifique #63648
    bebarth
    Maître des clés

    Bon ben on va prendre le problème différemment.
    On cherche COMMUNE ou SECTEUR sur l’original et on extrait la page.

    Code:
    console.show();
    console.clear();
    //Début durée
    d0=new Date();
    debut=util.printd(« dd-mm HH:MM »,d0)
    console.println(« Debut process: »+debut)
    //Initialisation des variables
    var Chemin = this.path;
    var PathSansExt = Chemin.substring(0,Chemin.length-4);
    var nomDocument = this.documentFileName;
    var repertoire = Chemin.substring(0,Chemin.length-nomDocument.length);
    for (var p = 0; p < this.numPages; p++) {
        var ville = «  »;
        var ckWord = «  »;
        var i = 0;
        //recherche du mot COMMUNE
        var numWords = this.getPageNumWords(p);
        while (ckWord != « COMMUNE » && ckWord != « SECTEUR ») {
            var ckWord = this.getPageNthWord(p, i, true);
            //Coordonnées du mot
            var q = this.getPageNthWordQuads(p, i);
            // convert quads in default user space to rotated
            // user space used by Links.
            m = (new Matrix2D).fromRotated(this,p);
            mInv = m.invert()
            r = mInv.transform(q) //Coordonnées champ du mot trouvé
            r=r.toString() //Conversion en chaîne
            r = r.split(« , »); //Séparation de la chaîne à chaque virgule « , »
            //Position verticale du mot
            var posVert = r[3];
            i=i+1;
            }
        var posMot = posVert;
        while (posMot == posVert) {
            var ckWord = this.getPageNthWord(p, i, true);
            //Coordonnées du mot
            var q = this.getPageNthWordQuads(p, i);
            // convert quads in default user space to rotated
          // user space used by Links.
            m = (new Matrix2D).fromRotated(this,p);
            mInv = m.invert()
            r = mInv.transform(q) //Coordonnées champ du mot trouvé
            r=r.toString() //Conversion en chaîne
            r = r.split(« , »); //Séparation de la chaîne à chaque virgule « , »
            //Position verticale du mot
            var posMot = r[3];
            i=i+1;
            if (posMot == posVert) {var ville = ville +  »  » + ckWord;}
            }
        var str = ville;
        var debutVille = ville.substring(0,1);
        if (debutVille == » « ) {
            var res = str.slice(2);
        } else {
            var res = str.slice(1);
        }
        var ville = res;
        console.println(« Commune : « +ville);
       
        if (ville != «  ») {
            this.extractPages({
                nStart: p,
                cPath: repertoire+ville+ ».pdf »
                });
        }
    }
    //fin duree
    df=new Date();
    fin=util.printd(« dd-mm HH:MM »,df)
    console.println(« Fin process: »+fin)
    delta=(df.valueOf()-d0.valueOf())/1000/60
    console.println(« Duree process: »+delta+ » minutes »)

    @+
    :bonjour:

    en réponse à : Fractionnement doc et enregistrement avec nom spécifique #63646
    bebarth
    Maître des clés

    …parce que j’ai essayé :

    Code:
    var d = app.activeDocs;
    for( var i in d )
    if( d != this ) d.closeDoc();

    et ça ne fonctionne pas non plus !!! enfin les fichiers se ferments tous à la fin… :mur:
    @+
    :bonjour:

    en réponse à : Fractionnement doc et enregistrement avec nom spécifique #63644
    bebarth
    Maître des clés

    bonjour,
    J’avais effectivement remarqué que tous les fichiers se fermaient en fin de script alors que closeDoc(); est en fin de boucle, mais je ne savais pas que tu avais autant de documents…
    Comme ça, je ne sais pas comment faire, mais je vais regarder !

    Pour rechercher soit COMMUNE soit SECTEUR, tu modifies cette ligne :

    Code:
        while (ckWord != « COMMUNE » && ckWord != « SECTEUR ») {

    ça devrait fonctionner ! et pas besoin de rajouter « 2 » car un simple caractère n’est pas considéré comme un mot !
    Je te tiens au courant si je trouve pour fermer les fenêtre une à une.
    @+
    :bonjour:

    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:

    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<=a; 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:

    en réponse à : Addition horaire PDF (Javascript) #63027
    bebarth
    Maître des clés

    bonsoir,
    regarde ce post :
    https://abracadabrapdf.net/forum/index.php/topic,3092.msg17935.html#msg17935
    et si tu ne comprends pas, partage un fichier en explicant exactement ce que tu souhaiterais faire.
    @+
    :bonjour:

    en réponse à : Traitement par lots #63682
    bebarth
    Maître des clés

    bonjour,
    Ce que je ferais, c’est créer une action composée de 2 actions « Réduire la taille du fichier » et « Enregistrer » avec option « optimisation PDF », puis lorsque tu lances l’action, tu choisis soit « Ajouter des fichiers » soit « Ajouter un dossier ».
    @+
    :bonjour:

    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:

Affichage de 99 réponses de 2,476 à 2,574 (sur un total de 3,355)