Donnez vie à vos documents numériques !
 

Aplatir certains champs

abracadabraPDF Forums PDF – Général Aplatir certains champs

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #46581
    jctremblay
    Participant

    Il est possible d’aplatir tout les champs d’un formulaire facilement avec flattenPages()
    [font=verdana, arial, helvetica, sans-serif]Est-ce possible d’aplatir un champ, ou quelques champs spécifique seulement?[/font]

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

    Bonjour

    Tu as le choix entre le Selective Flatten Tool de Thom Parker :
    https://www.pdfscripting.com/public/Selective-Flatten-Tool-Description.cfm
    d118.jpg

    Ou le Selective Flattener de UVSAR :
    https://www.uvsar.com/projects/acrobat/flattener/
    flattener_405x385.gif

    Les deux sont excellents.

    Sinon, l’outil « Aplatir » des abracadabraTools permet de n’aplatir qu’une seule page :
    https://www.abracadabrapdf.net/utilitaires/acrobat-plugins/abracadabratools/
    AcDC-fra_web.png

    #69130
    jctremblay
    Participant

    J’utilise Selective Flatten Tool de Thom Parker. Je me demandais s’il était possible d’aplatir qu’un seul avec le nom d’un champ spécifique mais en javascript.

    #69131
    Merlin
    Maître des clés

    C’est une bonne question !  :joker:

    #69132
    jctremblay
    Participant

    Pour aplatir des champs spécifique, il y a un javascript ici: https://answers.acrobatusers.com/How-flatten-specific-group-form-fields-page-q293414.aspx

    Par contre, je me demande si toutes ces lignes sont nécessaires.

    #69133
    bebarth
    Maître des clés

    bonjour,
    Il y a 3 possibilités pour le paramètre nNonPrint de la fonction flattenPages.
    On peut dont paramétrer un champ de façon à faire ce que l’on souhaite.
    https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FDoc_methods.htm%23TOC_flattenPagesbc-34&rhtocid=_6_1_8_23_1_33
    Attention : dans l’API Reference, la plupart du temps (car je ne le connais pas par coeur) le terme « annotation » fait référence aux commentaires (annots) mais pour cette fonction il englobe les champs, commentaires et liens (All annotations—including form fields, comments, and links).
    @+
    :bonjour:

    #69134
    jctremblay
    Participant

    Donc, si j’ai bien saisi le script:

    a) écriture de la liste des champs;
    b) capturer les propriétés de visibilité de tout champs, puis les mettre tous invisible;
    c) mettre les champs de la liste à visible;
    d) Aplatir les champs visible;
    e) Restaurer les propriétés initiaux des champs;

    #69135
    Merlin
    Maître des clés

    C’est bien ça, sauf qu’il ne s’agit pas de la visibilité (display) qui n’est disponible que pour les champs, mais de la propriété nNonPrint qui est disponible pour les champs et les annotations/commentaires.

    #69136
    jctremblay
    Participant

    C’est ça. La «visibilité» ou pas lors de l’impression.

    #69137
    bebarth
    Maître des clés

    En fin d’année dernière je me suis lancé sur l’écriture d’un utilitaire similaire… en français !
    Je n’ai malheureusement pas trouvé le temps de le terminer bien qu’il soit bien avancé, et je ne pense pas pouvoir le faire ces prochain mois.
    Certainement l’hiver prochain !
    @+
    :bonjour:

    #69138
    Merlin
    Maître des clés

    :bravo:
    Place tous les items en variable ou dans un array et tu auras un utilitaire multilingue sans effort supplémentaire. :Smiley03:

    #69139
    jctremblay
    Participant

    … Certainement l’hiver prochain !

    J’ai hâte à l’hiver prochain! [Je pensais jamais dire ça!]  :jerisjaune:

    #69140
    jctremblay
    Participant

    Je reviens avec une petite question concernant le script disponible sur le site Acrobatuser que j’ai mentionné plus haut.

    Ce script permet de saisir manuellement les noms des champs à aplatir comme ceci:

    var list = new Array();
    list = [
    « Text1 »,
    « Text2 »
    ];

    J’imagine que ce serait possible au lieu d’une liste spécifique, que le Array contiennent automatiquement tout les champs de type bouton. Comment pourrais-je inclure quelques choses du genre pour construire mon Array avec les noms des boutons?

    Aucune idée comment faire ça avec > this.getField(fname).type == « button »

    #69141
    bebarth
    Maître des clés

    bonjour,
    Voici un script pour faire une table avec les noms de tous les boutons radio :

    Code:
    var lesBoutonsRadio=new Array();
    for (var i=0; i    var leChamp=this.getField(this.getNthFieldName(i));
        if (leChamp.type== »radiobutton ») lesBoutonsRadio.push(this.getNthFieldName(i));
    }

    @+
    :bonjour:

    #69142
    jctremblay
    Participant

    Merci… Si j’integre ton code pour aplatir seulement les champs bouton. J’ai une erreur. À la ligne 17.

    TypeError: this.getField(…) is null

    17:Console:Exec

    Tu as une idée… J’essai de récupérer le code d’AcrobatUsers pour aplatir tout les boutons.

    Code:
    var list=new Array();
    for (var i=0; i    var leChamp=this.getField(this.getNthFieldName(i));
        if (leChamp.type== »button ») list.push(leChamp);
    }

    var fields = new Array;
    for (var i = 0; i     fields = [
            this.getNthFieldName(i),
            this.getField(this.getNthFieldName(i)).display
        ];
        this.getField(fields[0]).display = display.noPrint;
    }

    for (var i = 0; i     this.getField(list).display = display.visible;
    }

    this.flattenPages({
        nStart: 0,
        nEnd: this.numPages – 1,
        nNonPrint: 1,
    });

    for (var i = 0; i     for (var j = 0; j         if (fields[j][0] == this.getNthFieldName(i)) {
                this.getField(this.getNthFieldName(i)).display = fields[j][1];
            }
        }
    }

    #69143
    bebarth
    Maître des clés

    bonjour,
    Erreur de ma part !!! en ligne 4 il faut écrire :

    Code:

    if (leChamp.type== »button ») list.push(this.getNthFieldName(i));

    @+
    :bonjour:

    #69144
    jctremblay
    Participant

    Merci! Cela fonctionne parfaitement.

    #69145
    bebarth
    Maître des clés

    Voici comment j’aurai écrit, si je peux me permettre :

    Code:
    var fields=new Array();
    for (var i=0; i    if (this.getField(this.getNthFieldName(i)).type!= »button ») {
            fields.push([this.getNthFieldName(i),this.getField(this.getNthFieldName(i)).display]);
            this.getField(this.getNthFieldName(i)).display=display.noPrint;
        } else {
            this.getField(this.getNthFieldName(i)).display=display.visible;
        }
    }
    this.flattenPages({
        nStart: 0,
        nEnd: this.numPages-1,
        nNonPrint: 1,
    });
    for (var i=0; i    this.getField(fields[0]).display=fields[1];
    }

    Une seule fois la boucle pour vérifier le nom et l’état des champs, et pas besoin d’avoir 2 tables !
    Ce coup ci j’ai vérifier avant de poster…
    @+
    :bonjour:

    #69146
    Merlin
    Maître des clés

    fields.push([this.getNthFieldName(i),this.getField(this.getNthFieldName(i)).display]);

    Impressionant !
    :bravo:

    #69147
    jctremblay
    Participant

    Ça donne le vertige, mais c’est beau…  :jerisjaune:  Merci Bebarth!

    Impressionant !
    :bravo:

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