Générer du texte aligné avec des champs de formulaire nommés correctement  (Lu 40 fois) Partager ce sujet Imprimer

1 B


_seb_  25 mars 2020 : 23:17

Bonjour tout le forum,
 
je partage avec vous un script.


je cherchais comment générer du texte avec des champs de formulaire alignés et nommés correctement.
 
J'ai découvert avec le script de bebarth ici la fonction this.flattenPages() (aplatir)
 
En faisant des recherches, j'ai trouvé que l'on pouvait aplatir uniquement les champs visibles à l'impression avec le paramètre this.flattenPages({nNonPrint:1});
 
Du coup, j'ai fait un script qui génère des champs visibles à l'impression avec des champs invisibles à l'impression qui sont alignés.
 
Les champs invisibles sont nommés comme on le souhaite.
 
Ensuite, le formulaire est aplati avec this.flattenPages({nNonPrint:1});
 
Les champs restants deviennent visibles à l'impression 
 
Voir le fichier joint et le code :



   console.clear();


// Début des variables à configurer ////////////////////////////////////////


   // Nombre de question
   var nbrQuestion = 3;


   // Numéro de la page
   var numPage = 0;


   // Numéro de la première question
   var numQuestion = 1;


   // Position de la première question par rapport à la gauche de la feuille
   var posGauche = 14;


   // Position de la première question par rapport au bas de la feuille
   var posBas = 700;


   // Hauteur du champ
   var hauteurChamp = 20;


   // Décalage entre les questions
   var declageVertical = 40;


////////////////// les champs question //////////////////


   // Longueur
   var longueurChampQ = 150;
   // Police d'écriture
   var policeEcritureQ = "Verdana";
   // Taille du texte
   var tailleTexteQ = 12;
   // Alignement
   var alignementQ = "right";
   // Style des bordures
   var styleBordureQ = border.s;
   // Couleur de la bordure
   var couleurBordureQ = ["T"];// transparent;
   // Lecture seule
   var lectureQ = true;


   // Les questions
   var tabQuestion =
   [
      "Nom de famille : ",
      "Prénom : ",
      "Date de naissance : "
   ]


////////////////// les champs réponses //////////////////


   // Longueur
   var longueurChampR = 150;
   // Police d'écriture
   var policeEcritureR = "Verdana";
   // Taille du texte
   var tailleTexteR = 12;
   // Alignement
   var alignementR = "center";
   // Style des bordures
   var styleBordureR = border.s;
   // Couleur de la bordure
   var couleurBordureR = color.black;
   // Lecture seule
   var lectureR = false;
   // Impression
   var impressionR = display.noPrint;


   // Les noms des champs des réponses
   var tabReponse =
   [
      "nomFamille",
      "prenom",
      "dateDeNaissance"
   ]


// Fin des variables à configurer ////////////////////////////////////////


   var positionVertical = 0;
   var numTab = 0;


   for(var i = 1; i <= nbrQuestion; i++){


      // Générer les champs pour les questions
      this.addField
      (
         numPage + ".question.text." + numQuestion,
         "text",
         numPage,
         [
               posGauche,
               posBas - positionVertical,
               posGauche + longueurChampQ,
               posBas - positionVertical - hauteurChamp
         ]
      );


      // Configurer les champs pour les questions
      var champQuestion = this.getField(numPage + ".question.text." + numQuestion);
      // Valeur par défaut
      champQuestion.defaultValue = tabQuestion[numTab];
      // Police d'écriture
      champQuestion.textFont = policeEcritureQ;
      // Taille du texte
      champQuestion.textSize = tailleTexteQ;
      // Alignement
      champQuestion.alignment = alignementQ;
      // La bordure
      champQuestion.borderStyle = styleBordureQ;
      // Couleur de la bordure
      champQuestion.strokeColor = couleurBordureQ;
      // Lecture seule
      champQuestion.readonly = lectureQ;




      // Générer les champs pour les réponses
      this.addField
      (
         numPage + "." + tabReponse[numTab] + ".text." + numQuestion,
         "text",
         numPage,
         [
               posGauche + longueurChampQ,
               posBas - positionVertical,
               posGauche + longueurChampQ + longueurChampR,
               posBas - positionVertical - hauteurChamp
         ]
      );


      // Configurer les champs pour les réponses
      var champReponse = this.getField(numPage + "." + tabReponse[numTab] + ".text." + numQuestion);
      // Police d'écriture
      champReponse.textFont = policeEcritureR;
      // Taille du texte
      champReponse.textSize = tailleTexteR;
      // Alignement
      champReponse.alignment = alignementR;
      // La bordure
      champReponse.borderStyle = styleBordureR;
      // Couleur de la bordure
      champReponse.strokeColor = couleurBordureR;
      // Lecture seule
      champReponse.readonly = lectureR;
      // Impression
      champReponse.display = impressionR;


      numQuestion++;
      numTab++;
      positionVertical = positionVertical + hauteurChamp + declageVertical;
   }


   // Initialiser le formulaire
   resetForm();
   // Aplatir le formulaire (uniquement les champs visible à l'impression)
   this.flattenPages({nNonPrint:1});


   // Rendre visible à l'impression les champs restants (les réponses)
   for(var i = 0; i < this.numFields; i++){
      var nomChamp = this.getNthFieldName(i);
      this.getField(nomChamp).display = display.visible;
   }

IP archivée


Merlin  26 mars 2020 : 00:53

Bonjour

Merci pour le partage !

IP archivée


bebarth  26 mars 2020 : 07:41

bonjour,
Il y a effectivement 3 possibilités pour ce paramètre de la fonction flattenPages.
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).
@_seb_
En tout cas félicitations ! On voit que tu cherches à comprendre ce que tu fais. De plus, tu as pris (à mon avis) la très bonne habitude de nommer tes variables et tes champs de façon mnémotechnique, ce qui facilite la compréhension du script.
J'en suis ravi si j'ai fait un émule !  :geek:
@+
 :bonjour:

IP archivée


Merlin  26 mars 2020 : 17:56


IP archivée


bebarth  26 mars 2020 : 19:20

Merci Merlin,
Je vais lire cet article !
@+
 :bonjour:

IP archivée