Donnez vie à vos documents numériques !
 

Modifier la catégorie de format de plusieurs champs en même temps

abracadabraPDF Forums PDF – Général Modifier la catégorie de format de plusieurs champs en même temps

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45725
    studio_idg
    Membre

    Bonjour à tous,

    J’ai une grille de prix sur laquelle je dois appliquer sur chaque champ une catégorie de format (pour limiter et/ou obliger 5 décimales). Vous verrez en pièce jointe le type de tableau que j’ai (et je vais en avoir plusieurs).
    Le problème se pose quand je sélectionne plusieurs champs, je n’ai plus accès à l’onglet format.

    Il faut également prendre en compte que j’ai directement les pdf avec les champs comme cela, qu’il ne faut pas les renommer, et que j’essaye d’éviter le “je fais un champ comme il faut et je duplique XX fois”.

    Si quelqu’un à une idée, je suis preneur.  :Euuuh:

    Merci d’avance pour votre aide.

    Harold

Affichage de 9 réponses de 1 à 9 (sur un total de 9)
  • Auteur
    Réponses
  • #62892
    Merlin
    Maître des clés

    Bonjour.

    On ne peut pas faire ça programmatiquement (voir ci-dessous), par-contre on peut ruser en respectant tes contraintes.
    Puisqu’on ne peut pas renommer les champs ni dupliquer un premier champ correctement formaté il ne nous reste que les “Actions” puisqu’elles sont sont accessibles même quand on sélectionne plusieurs champs à la fois.

    Ainsi on peut appliquer le format requis en action “champ désactivé”, c’est un peu moins élégant mais pour l’utilisateur ça revient au même.
    Par-contre il faut utiliser JavaScript pour déterminer le format puisqu’on ne peut pas utiliser les formats prédéfinis du panneau Format.

    Bien entendu, plutôt que de répéter le même script dans plusieurs champs il sera plus efficace et plus productif de créer une fonction placée en script de document et d’appeler cette fonction depuis chaque champ.

    #62893
    studio_idg
    Membre

    ok, merci pour ta réponse.
    Je comprends à peu près le principe, je vais regarder ça à tête reposé.

    Si j’ai bien compris, les champs appellent tous la même action qui est un script prédéfini dans le document qui va venir changer la catégorie du format.

    Merci pour ton temps.

    Bonne après midi

    Harold

    #62894
    Merlin
    Maître des clés

    Oui, par exemple on place cette fonction en script de document :

    Code:
    // afficher espace entre les milliers sans décimale
    function formatVF() {
    event.value = util.printf(“%,2.0f”,event.value).toString().replace(/./gim,” “);
    if (event.value == “0”) {event.value = “”};
    }

    Et on l’appelle depuis chaque champ via l’action champ désactivé avec :

    Code:
    formatVF();

    :Smiley15:

    #62895
    studio_idg
    Membre

    Bonour Merlin,

    ok super merci pour ton aide.

    Je vais voir pour modifier le script pour l’adapter.

    Encore merci

    Harold

    #62896
    Merlin
    Maître des clés

    Bonour Merlin

    Attention, on dirait qu’une des touches de ton clavier ne fonctionne plus.
    :geek:  :Smiley03:

    #62897
    Merlin
    Maître des clés

    Errare humanum est.  :Ooops:

    OTAN pour moi, je me suis trompé : on peut modifier le “Format” des champs texte programmatiquement.
    Par-contre on ne peut pas utiliser les formats proposés par Acrobat, il faut utiliser un script de format perso.

    J’ai retrouvé dans un vieux grimoire un script d’exemple que j’ai modifié pour appliquer le même format que ci-dessus (à exécuter depuis la Console) :

    Code:
    for (var i = 0 ; i < this.numFields ; i++) {
    var oFld = this.getField(this.getNthFieldName(i));
    if (oFld.type == “text”) {
    oFld.setAction(“Format”,”event.value = util.printf(“%,2.0f”,event.value) ;”);
    }
    }

    Ce script s’applique à tous les champs texte d’un document, si on veut n’en modifier que certains il y a deux possibilités :

    – ajouter une boucle avant ce script pour sélectionner les champs concernés par leur nom ou n’importe quelle autre propriété,
    – couper-coller les champs concernés dans un nouveau document, exécuter ce script, et re-couper-coller en retour vers le document d’origine.
    (MAJ + menu Edition / Coller = Coller sur place)

    #62898
    studio_idg
    Membre

    Bonjour Merlin,
    Et non c’est pas mon clavier qui a un problème, c’est mes doigts  :siffle:

    je t’avoue que pour l’instant je n’ai pas réussi à faire marcher.
    J’ai ce script là qui marchait mais uniquement avec un champ qui s’apellait “event” et uniquement dans l’onglet calcul.

    Code:
    event.value = util.printf(“%.5f”,this.getField(‘event’).value).toString().replace(/./g,”,”);
    if (event.value == “0”) {event.value = “”};

    Après j’ai essayé de faire apeller le script comme ceci, mais rien :
    – dans mon script de document je mets :

    Code:
    //script 5 décimales
    function format5D(){
    event.value = util.printf(“%.5f”,event.value).toString().replace(/./g,”,”);
    if (event.value == “0”) {event.value = “”};
    }

    et j’appelle dans l’onglet action/champ désactivé/ avec :

    Code:
    format5D();

    Je vais tester ta nouvelle méthode et te tiens au courant.

    Multas gratias pour ton temps (et oui mon latin à ses limites  :geek:)

    Harold

    #62899
    studio_idg
    Membre

    Bonjour Merlin,  bonjour à tous

    Nous avons trouvé la solution suivante en se basant sur tes scripts, je poste si cela peut intéresser quelqu’un.

    On laisse l’utilisateur remplir ses champs et une fois fini l’utilisateur clique sur une zone prédéfini (le logo de l’entreprise). J’y ai mis un bouton transparent qui vient lancer le script suivant :

    Code:

    {for (var i = 0 ; i < this.numFields ; i++) {
    var oFld = this.getField(this.getNthFieldName(i));

         
        if (oFld.type == “text”) {

                if (oFld.name.search(“conso”) != -1) {
       
                    //app.alert(oFld.value);
                   
                    oFld.value = oFld.value.toString().replace(‘,’,’.’); 
                    oFld.value = util.printf(“%.5f”,(oFld.value)*1);
                    oFld.value = oFld.value.toFixed(5).toString().replace(“.”, “,”)
                     
                }
                  if (oFld.name.search(“abo”) != -1) {
       
                    oFld.value = oFld.value.toString().replace(‘,’,’.’); 
                    oFld.value = util.printf(“%.2f”,(oFld.value)*1);
                    oFld.value = oFld.value.toFixed(2).toString().replace(“.”, “,”)
                 
                }
               

        }
    }

    bAlreadyOpened = “true”;
    }

    Ainsi :
    dès que je veux 2 décimales, mon champ doit juste contenir le terme “abo”,
    dès que je veux 5 décimales, mon champ doit juste contenir le terme “conso”.

    Encore merci pour ton aide
    Bonne journée à tous

    #62900
    Merlin
    Maître des clés

    Merci pour le retour.
    :bonjour:

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