Donnez vie à vos documents numériques !
 

alex

Toutes mes réponses sur les forums

Affichage de 99 réponses de 496 à 594 (sur un total de 603)
  • Auteur
    Réponses
  • en réponse à : Comptage de mots avec AbracadabraTOOLS – RÉSOLU #50992
    alex
    Participant

    Dans cette variante, seul le résultat global s’affiche dans une alerte classique.

    //Variante
    //Script à copier et à placer dans le répertoire JavaScript d’Acrobat
    //Adaptation à faire pour intégration à AbracadabraTool (Merlin)
    function comptageMots()
    {
    console.clear();
    //console.show();
    //Compteurs
    TotalMots=0;
    TotalMotsAnalyses=0;
    console.println(“Estimation du nombre des mots sur “+this.numPages+” pages.”);
    if(this.numPages>99)
    {
    app.alert({
    cTitle:”AbracadabraTool”,
    cMsg:”Avertissement:rLe temps de calcul sera de quelques dizaines de secondes…”+
    “rNombre de pages : “+this.numPages,
    nIcon:1}
    );
    }
    page=0;
    while(page {
    pp=page+1;
    //Détection du nombre des mots de la page
    nbreMotsAnalyses=this.getPageNumWords(page);
    console.println(“Calcul sur les “+nbreMotsAnalyses+” mots de la page “+pp)
    indexMot=0;
    nbreMots=0;
      while (indexMot   {
      //Analyse de chaque mot
      Mot=this.getPageNthWord(page,indexMot,0);
      indexcar=0;
      detectionchiffre=false;
      while(indexcar   {
      //Un des caractères est-il un chiffre?
      if(Mot.charCodeAt(indexcar)>=48&Mot.charCodeAt(indexcar)<=57){detectionchiffre=true;}
      indexcar=indexcar+1;
      }
      if(!detectionchiffre){nbreMots=nbreMots+1;}
      indexMot=indexMot+1;
      }
    console.println(“Fin du calcul pour la page “+pp+” avec “+nbreMots+” / “+nbreMotsAnalyses)
    TotalMots=TotalMots+nbreMots;
    TotalMotsAnalyses=TotalMotsAnalyses+nbreMotsAnalyses;
    page=page+1;
    }
    console.println(“************************************************************************”);
    console.println(“Bilan pour “+this.numPages+” pages avec “+TotalMots+” / “+TotalMotsAnalyses);
    console.println(“************************************************************************”);
    TotalMotsChiffres=TotalMotsAnalyses-TotalMots;
    app.alert({
    cTitle:”AbracadabraTool”,
    cMsg:”Nombre de mots sans chiffres: “+TotalMots+
    “rNombre de mots contenant des chiffres : “+TotalMotsChiffres+
    “rTotal nombre de mots : “+TotalMotsAnalyses+
    “rNombre de pages : “+this.numPages,
    nIcon:3}
    );
    }
    //Programme init
    //A. Noesser
    //Placer le nouvel item
    app.addSubMenu({
    cName: “Outils Abracadabra”,
    cParent: “Tools”,
    nPos: 0 })
    app.addMenuItem({
    cName: “Compter les mots, exclure les chiffres…”,
    cParent: “Outils Abracadabra”,
    cExec:”comptageMots()”,
    cEnable: “event.rc = (event.target != null);”,
    nPos: 0})

    en réponse à : Comptage de mots avec AbracadabraTOOLS – RÉSOLU #50991
    alex
    Participant

    Ci-dessous le script à placer dans le répertoire de l’application Acrobat ou Adobe Reader (créer un fichier CompterLesMotsSeuls.js)
    Ce script procède à deux comptages et visualise les résultats pour chaque page, puis les totaux pour l’ensemble des pages dans la console.
    Pour le lancer…
    Menu Outils>Outils Abracadabra>Compter les mots…

    //Script à copier et à placer dans le répertoire JavaScript d’Acrobat ou Adobe Reader
    //Adaptation à faire pour intégration à AbracadabraTool (Merlin)
    function comptageMots()
    {
    console.clear();
    console.show();
    //Compteurs
    TotalMots=0;
    TotalMotsAnalyses=0;
    console.println(“Estimation du nombre des mots sur “+this.numPages+” pages.”)
    page=0;
    while(page {
    pp=page+1;
    //Détection du nombre des mots de la page
    nbreMotsAnalyses=this.getPageNumWords(page);
    console.println(“Calcul sur les “+nbreMotsAnalyses+” mots de la page “+pp)
    indexMot=0;
    nbreMots=0;
      while (indexMot   {
      //Analyse de chaque mot
      Mot=this.getPageNthWord(page,indexMot,0);
      indexcar=0;
      detectionchiffre=false;
      while(indexcar   {
      //Un des caractères est-il un chiffre?
      if(Mot.charCodeAt(indexcar)>=48&Mot.charCodeAt(indexcar)<=57){detectionchiffre=true;}
      indexcar=indexcar+1;
      }
      if(!detectionchiffre){nbreMots=nbreMots+1;}
      indexMot=indexMot+1;
      }
    console.println(“Fin du calcul pour la page “+pp+” avec “+nbreMots+” / “+nbreMotsAnalyses)
    TotalMots=TotalMots+nbreMots;
    TotalMotsAnalyses=TotalMotsAnalyses+nbreMotsAnalyses;
    page=page+1;
    }
    console.println(“************************************************************************”);
    console.println(“Fin du calcul pour “+this.numPages+” avec “+TotalMots+” / “+TotalMotsAnalyses);
    console.println(“************************************************************************”);
    }
    //Programme init
    //A. Noesser
    //Placer le nouvel item
    app.addSubMenu({
    cName: “Outils Abracadabra”,
    cParent: “Tools”,
    nPos: 0 })
    app.addMenuItem({
    cName: “Compter les mots, exclure les chiffres…”,
    cParent: “Outils Abracadabra”,
    cExec:”comptageMots()”,
    cEnable: “event.rc = (event.target != null);”,
    nPos: 0})

    en réponse à : Comptage de mots avec AbracadabraTOOLS – RÉSOLU #50990
    alex
    Participant

    Un petit script est nécessaire, je vais vous le proposer dans la journée. Sur le principe on a déjà la procédure de comptage des mots utilisée par Merlin  et il suffit de s’assurer que chaque mot ne contienne pas de chiffre (pas de codes ASCII de 48 (code ASCII de 0), jusqu’à 57 (code ASCII de 9).
    A tout de suite…

    alex
    Participant

    Voilà la solution personnalisée de bruninho…

    Pour ceux qui veulent tester en ne conservant que la page de garde sans lancer l’impression, passer les lignes 17 et 32 du script d’impression en commentaires:
    this.print(false,indexpage,indexpage);
    devient
    //this.print(false,indexpage,indexpage);
    puis ouvrir la console (Pomme-J pour les Mac, Ctrl pour les Pc)

    Cette manipulation est valable pour les deux autres exemples précédants.

    Nota:seules les solutions 1 et 2 sont génériques. La 3 répond au problème particulier de bruninho qui pourra aussi fixer la valeur du nombre d’exemplaires par défaut à 3 dans le script de la case à cocher “ccpage.9”
    this.getField(“NbrePages.9”).currentValueIndices=[3];

    [attachment deleted by admin]

    alex
    Participant

    Effectivement, difficile de faire un mixte, mais en partant de la première méthode, ça doit être jouable. Faites-moi signe si ça vous paraît inextricable.

    alex
    Participant

    Voici la solution à base de menus déroulants:
    La page jointe propose un exemple de sélection multiple de pages à imprimer.
    Les menus déroulants sont obtenue par duplication du champ “NbrePages” sous Acrobat (ici NbrePagese.0 à NbrePages.13)
    Une case à cocher “ccpageT” lance un script qui passe tous mes menus déroulants à zéro ou à la valeur courante issue du sélecteur “NbrePagesDefaut”.
    Le bouton “Imprimer” lance le script d’impression ici en mode silencieux page par page. Illustration de try/catch pour inhiber les messages d’erreur obtenus si les pages à imprimer sont manquantes.
    L’avatar (ours Ponpon) cache un bouton qui lance un script qui écrit et indexe les textes des ToolTips des menus déroulants.
    Un script de document nommé “Initialisation()” précise le nombre de pages (ici 14 pages notées de 0 à 13).

    [attachment deleted by admin]

    en réponse à : Conversion Apple Works vers PDF – RÉSOLU #50985
    alex
    Participant

    Oui, je t’envoie un fichier pour test par le courrier prive.

    alex
    Participant

    Oui, dans ce cas il faudrait prévoir pour chaque case à cocher, un petit menu déroulant qui permettrait de fixer le nombre de copies de la page considérée. Ce menu déroulant serait par défaut sur la valeur 0 (cases non cochées) ou 1 (cases cochées).
    Autre manière de faire, on pourrait ne travailler qu’avec une série de listes déroulantes, avec une commande case à cocher unique “Tout imprimer” passant les valeurs par défaut à 1 (cochée) ou 0 (non cochée).
    Evidemment, il faudrait réécrire le script d’impression en fonction de l’option choisie…
    Bon week-end.

    alex
    Participant

    La page jointe propose un exemple de sélection multiple de pages à imprimer.
    Les cases à cocher sont obtenues par duplication du champ “ccpage” sous Acrobat (ici ccpage.0 à ccpage.13)
    Une case à cocher “ccpageT” lance un script de sélection ou désélection de toutesl les cases à cocher.
    Le bouton “Imprimer” lance le script d’impression ici en mode silencieux page par page. Illustration de try/catch pour inhiber les messages d’erreur obtenus si les pages à imprimer sont manquantes.
    L’avatar (ours Ponpon) cache un bouton qui lance un script qui écrit et indexe les textes des ToolTips des cases à cocher.
    Un script de document nommé “Initialisation()” précise le nombre de cases (ici 14 cases notées de 0 à 13).

    [attachment deleted by admin]

    alex
    Participant

    Oui, à priori,c’est possible et pas vraiment compliqué.
    Si la liste des pages doit se faire de manière automatique à partir d’un élément des pages à répertorier, il faut le préciser (par exemple à partir d’un champ de titre).
    On voit ça demain…

    en réponse à : Calendrier sur champ date. RÉSOLU #50947
    alex
    Participant

    Je vais regarder ça sur Mac et Pc. Je reviens vers vous dès que possible. Bonne soirée à tous.

    en réponse à : Calendrier sur champ date. RÉSOLU #50945
    alex
    Participant

    Belles trouvailles!
    De plus le code des plugin JavaScript sont en clair, bien structurés et commentés ce qui permettra pas mal d’adaptations si nécessaire.

    en réponse à : Calendrier sur champ date. RÉSOLU #50943
    alex
    Participant

    Vous trouverez votre bonheur sur: http://www.pdfscripting.com/ , c’est payant mais les ressources proposées sont de très bonne qualité.
    Le script du calendrier pour AcroForm n’est pas complexe et on peut le modifier à sa convenance, il faudrait en autre chose créer un menu déroulant pour l’année.

    en réponse à : Calendrier sur champ date. RÉSOLU #50941
    alex
    Participant

    C’est une option de l’éditeur LiveCycle Designer sur Pc uniquement (voir exemple joint).
    Avec l’éditeur standard (AcroForm), je ne connais pas de solution, je vais creuser…

    [attachment deleted by admin]

    en réponse à : Duplication script. RÉSOLU #50910
    alex
    Participant

    Il est possible de rendre les variables globales persistantes. Elles seront alors conservées sur un même machine même après fermeture de session.
    Syntaxe
    1-script éxécuté en fermeture du document:
    global.parametreAconserver=x;
    global.setPersistent(“parametreAconserver”, true);

    2-Ouverture du document, tester l’existance de parametreAconserver
    if(global.parametreAconserver)
    {
    x=global.parametreAconserver
    }

    Ces paramètres sont stockés dans un fichier local de l’application.

    alex
    Participant

    Pour les utilisateurs de MacBook et de la console JavaScript d’Acrobat, comme moi seront donc (égoîstement) satisfaits!
    Vive la touche Enter et merci encore…

    en réponse à : Quel appareil utiliser pour lire pdf ou l on veut? #48646
    alex
    Participant

    Adobe développe (pour juillet ?) un Reader pour l’ipad nommé Wired
    http://www.ebouquin.fr/2010/05/26/wired-fait-ses-premiers-pas-sur-lipad/
    Et en fait la promotion :
    http://blogs.adobe.com/digitalpublishing/2010/05/introducing_wired_magazine_on_ipad.html
    Pour ma part, je m’intéresse aux “Readers” qui pourront interpréter du JavaScript et donc permettront de retrouver la même interactivité que sur Mac, Win ou Unix.

    alex
    Participant

    Ceci nous met sur la piste du code ASCII clavier, la touche à utiliser en direct et sans manipulation est située à droite de la Pomme droite ! Et ça marche.
    Merci

    en réponse à : N’autoriser un calcul que sous condition que… RÉSOLU #50357
    alex
    Participant

    Ci-joint quelque chose de plus raffiné et quelques explications. Une bonne base pour manipuler les objets Date en temps Local et les comparer.
    Le bouton Test lance un script de document baptisé TestSaisies().
    Le bouton Reset contient un script affichant la date du jour.
    Voilà

    [attachment deleted by admin]

    en réponse à : N’autoriser un calcul que sous condition que… RÉSOLU #50356
    alex
    Participant

    Ci-joint un exemple qui montre comment récupérer les données saisies dans les champs de date (au format Date ou non), de créer deux objets date, puis de comparer leur valeurs.
    Je vous donne une version plus raffinée dès que possible.

    [attachment deleted by admin]

    en réponse à : Retouche de texte. RÉSOLU #50887
    alex
    Participant

    Double réponse:
    1-Pour le corps du texte, il est possible de détecter et récupérer les mots (exemples de scripts ici même), à ma connaissance, on ne peut les changer.
    2-Pour les textes saisis dans les champs de formulaire, de type texte, liste, on fait vraiment ce qu’on veut.
    Tu confirmes chef Merlin ?

    en réponse à : Débutante PDF/FDF! #50789
    alex
    Participant

    Connecter une base de données locale sur PC en utilisant un driver ODBC (vers une base Access par exemple):
    Tout se fait par requêtes SQL.
    Voir le SDK Adobde Acrobat qui détaille l’objet ADBC et donne des exemples, puis lire ceci:
    http://www.acrobatusers.com/forums/aucbb/viewtopic.php?id=14378
    et obligatoirement cette note d’Adobe pour rendre active la connection.
    http://kb2.adobe.com/cps/333/333472.html
    Je ne peux pas faire mieux, tout est là.

    en réponse à : Valeurs d’exportation multiples – RÉSOLU #50857
    alex
    Participant

    Voilà l’exemple très rustique, mais qui vous apprendra pas mal de choses:
    Les scripts sont plaçés au niveau du document.
    Le script Initialisation() construit les tables et remplit le menu déroulant. Il devra être lançé lors de l’ouverture du document et non par action sur le bouton comme ici.
    Le script Reset() réinitialise le formulaire (on aurait pu faire un this.resetForm(); ).
    Le script FillIn() lançé lors d’une action sur le menu déroulant “ListePersonnels”, récupère l’indice de l’item du Nom choisi.On utilise cet indice pour sélectionner les attributs correspondants dans les tables.
    Pour modifier les données, il faut reconstruire les tables à la main en prenant soin de respecter l’ordre, ce n’est pas pratique mais ça suffit pour un petit répertoire.
    On peut faire mieux, trier les noms par exemple, ce sera pour une autre fois.

    [attachment deleted by admin]

    en réponse à : Valeurs d’exportation multiples – RÉSOLU #50856
    alex
    Participant

    Je vous fais un petit exemple, vous aurez ça demain dans la journée sur la base d’une table embarquée….

    en réponse à : Débutante PDF/FDF! #50786
    alex
    Participant

    Pour 4D sur Mac en local, Je n’ai pas de solution.
    J’ai de bonne raisons de penser qu’il n’y ait pas de solution car il n’y a plus, à ma connaissance d’équivalent de l’ODBC sur Pc sur Mac. Si quelqu’un pouvait me faire mentir et donner une possibilité d’utiliser les fonctionnalités de l’objet ADBC d’Acrobat sur Mac, je serais preneur.
    Désolé.

    en réponse à : Débutante PDF/FDF! #50784
    alex
    Participant

    Je n’ai pas répondu totalement aux questions soulevées par les messages ci-dessus. S’il s’agit, à partir d’un formulaire PDF ouvert sous Adobe Reader, d’envoyer des données vers une base de données distante hébergée par un site Web, alors il y a une solution qui fonctionnera sur Pc comme sur Mac ou Linux. Il suffit de passer par un submitForm() comme je l’ai déjà suggéré sur ce forum et d’adresser un programme php associé à une base de données mySQL.

    en réponse à : Débutante PDF/FDF! #50782
    alex
    Participant

    Ne perdez pas votre temps, les connexions aux bases de données via SOAP services (de même que l’ODBC) ne sont pas disponibles de manière simple sous Adobe Reader en dehors de l’environnement Adobe LiveCycle, voir post ci-dessous:
    http://www.acrobatusers.com/forums/aucbb/viewtopic.php?id=2870
    L’usage  de requêtes SQL via un driver ODBC autrefois disponible sous Acrobat PRO (version 5,7 et 7) ne l’est plus. Ou, pour être précis, ça marche sous Windows Xp, Vista et 7 et Acrobat PRO 8 et 9 à condition de modifier la base de registres. Voir la note technique d’Adobe ci-dessous:
    http://kb2.adobe.com/cps/333/333472.html
    Hum…

    en réponse à : Changer le contenu d’une page avec 1 bouton #50823
    alex
    Participant

    Parfait. Attention, pour propager une action JavaScript d’un document .pdf à un autre .pdf ce n’est pas simple, il faut sans doute prendre la précaution de créer un porte-document embarquant tous les documents .pdf.
    Bonne soirée.

    en réponse à : Changer le contenu d’une page avec 1 bouton #50821
    alex
    Participant

    Voilà pour la gestion des libellés des boutons (anglais/français), attention, seul le script anglais est complet, il faut compléter le script français.
    A quoi servent les boutons transparents TRL ? Où est le problème à résoudre sur les icônes ?

    [attachment deleted by admin]

    en réponse à : Valeurs d’exportation multiples – RÉSOLU #50853
    alex
    Participant

    A-Solution simple et rustique, passer par une ou plusieurs tables embarquées par le pdf.
    Par exemple:
    Nom=new Array();
    Prenom=new Array();
    Telephone=new Array();

    Nom[1]=”Martin”;
    Prenom[1]=”Jean”;
    Telephone[1]=”0660888888″;

    ….

    Après sélection de l’item du menu déroulant index, on affichera les valeurs dans les champs correspondants par:
    this.getField(“Nom”).value=Nom[index];
    this.getField(“Prenom”).value=Prenom[index];
    this.getField(“Telephone”).value=Telephone[index];
    Voilà pour la première piste.*

    B-En ce qui concerne l’idée de récupérer des données d’une table Excel (ou Access) via requête SQL ce ne sera possible que:
    1-sous Acrobat et pas avec Adobe Reader.
    2-Uniquement sous PC disposant d’ODBC.
    3-et pour couronner le tout, en modifiant une clé de registre de Windows depuis Reader 8.

    C-Sous Acrobat toujours, on peut insérer manuellement des données au format fdf via l’outil d’import de données Formulaires>Gérer les données de formulaire>Importer des données

    D-Seule solution pour préremplir de manière automatique un formulaire pdf, utiliser LiveCycle.

    en réponse à : Changer le contenu d’une page avec 1 bouton #50819
    alex
    Participant

    Voici comment sélectionner les icônes:
    Crée un bouton Reference1 et associe lui 3 images correspondants aux trois statuts.
    Crée un bouton Reference2 et associe lui 3 autres images correspondants aux trois statuts.
    Le bouton 2 prendra les icônes de l’une ou l’autre des références en fonction de ton choix (Cliquer sur le bouton2)
    Les boutons Reference1 et Reference2 seront par la suite invisibles.
    Le script à récupérer et à adapter est bien sûr lançé par le bouton 2.
    .

    [attachment deleted by admin]

    en réponse à : Changer le contenu d’une page avec 1 bouton #50816
    alex
    Participant

    Oui, il faut prendre en compte ce paramètre. Voir maquette jointe.
    Evidemment on pourrait aussi jouer sur pas mal d’autres propriétés de ce bouton.

    [attachment deleted by admin]

    alex
    Participant

    Avec la maquette de départ, ça irait très vite, ça serait sans doute déjà fonctionnel… A vous de voir.

    en réponse à : Changer le contenu d’une page avec 1 bouton #50813
    alex
    Participant

    Autre exemple, permutter deux libellés du même bouton, dans le fichier joint…

    [attachment deleted by admin]

    en réponse à : Changer le contenu d’une page avec 1 bouton #50812
    alex
    Participant

    Pour changer le texte du bouton Vue1 FR, la syntaxe est:
    this.getField(“Vue1 FR”).buttonSetCaption(“Mon texte 1”);

    Si on change aussi le texte du ToolTips:
    this.getField(“Vue1 FR”).userName=”Mon texte associé à 1″;

    en réponse à : Changer le contenu d’une page avec 1 bouton #50810
    alex
    Participant

    Ce petit script plaçé dans un bouton vous donnera la liste des calques du document via la console.
    Je l’utilise pour distinguer les filigrammes et les calques dont le statut est différent dans Acrobat.
    Une petite variante permettrait:
    1-d’activer/désactiver les calques (Reader et Acrobat).
    2-Verrouiller ou déverrouiller les calques (Acrobat).
    etc…

    console.clear();
    console.show();
      doc=this;
      pp=0;
    while (pp {
    if(ocgArray = doc.getOCGs(pp))
    {
    for (i=0; i < ocgArray.length; i++)
    {
    calque=”calque”;
    if(ocgArray.name==”Watermark”){calque=”Filigramme”;}
    console.println(“Détection du “+calque+” “”+ocgArray
    .name+ “” page “+(1+pp))
    //ocgArray
    .state =true;
    }
    }
    else
    {
    console.println(“Pas de calque! page “+(1+pp))
    }
    pp=pp+1;
    }

    en réponse à : Incrémenter un numéro automatiquement. – RÉSOLU #50718
    alex
    Participant

    Quelques remarques concernant l’exemple ci-dessus:
    1-Une erreur de ma part:
    Sur le document “Machine à tickets.pdf” il ne faut conserver que la première page!

    2-Il est donc possible de créer à partir d’un modèle (ici une page de trois billets), une ou plusieurs copies de ce modèle dans un seul document, ou plusieurs documents contenant des paramètres variables. Ici il s’agit d’une simple numérotation. De la même manière, on peut aller chercher des données dans une table, une base de données et pré-remplir des formulaires avant de les distribuer automatiquement par email.

    3-L’usage de la méthode app.trustedFunction m’a permis d’exécuter par script une fonctionnalité normalement non disponible en dehors de la console ou d’un batch.

    en réponse à : Incrémenter un numéro automatiquement. – RÉSOLU #50717
    alex
    Participant

    Voilà la maquette du PageMaster.pdf.
    Placement du script dans le répertoire JavaScript d’Acrobat sur PC:
    C:/Programme/Adobe/Acrobat9.0/Acrobat/Javascript
    Voilà la maquette du PageMaster.
    Placement du script dans le répertoire JavaScript d’Acrobat sur Mac:
    Aller>Applications>Adobe Acrobat  9 Pro>Adobe Acrobat Pro.app>
    Ctrl Clic > Afficher le contenu du paquet>Contents>MacOS>JavaScripts

    [attachment deleted by admin]

    en réponse à : Incrémenter un numéro automatiquement. – RÉSOLU #50716
    alex
    Participant

    Pour créer vos billets (tickets), ici dans le cas de trois billets par page:
    1-Créer un document PageMaster.pdf à partir de InDesign (maquette de 3 billets), avec 3 champs placés là où vous souhaitez voir apparaître les numéros, baptisés Numero_1,Numero_2,Numero_3. Placez ce document dans le répertoire Billeterie.
    2-Placez le document joint “Machine à tickets.pdf” dans le répertoire Billeterie.
    3-Placez le script ci-dessous “MachineCreationTickets.js” dans le répertoire JavaScript d’Acrobat.
    4-Ouvrir “Machine à tickets.pdf” avec Acrobat PRO, choisir le nombre de tickets par page à l’aide du menu déroulant, puis le nombre de tickets total.
    5-Presser le bouton “1-Création tickets” pour générer les pages, répondre OK à l’alerte “Tous les champs de formulaire dotés du même nom…”, puis presser “2-Numérotation” pour numéroter les billets.
    C’est fait.

    Script “MachineCreationTickets.js”:

    //Script à placer dans le répertoire JavaScript de l’application Acrobat
    trustedcreationtickets=app.trustedFunction(function()
    {
    //Calcul du nombre de pages.
    NombrePages=Math.ceil(this.getField(“NombreTickets”).value/this.getField(“UnitesParPage”).value);
    this.getField(“NombrePages”).value=NombrePages;
    UnitesParPage=this.getField(“UnitesParPage”).value;
    this.getField(“Commentaires”).value=”Réalisé:”;
    onyva=app.alert(“Cette action va lancer la création de “+NombrePages+” pages soit “+this.getField(“NombreTickets”).value+” billets.rContinuer?”,2,2);
    if(onyva==4)
    {
    indexpage=1;
    while(indexpage<=NombrePages)
    {
    app.beginPriv();
    this.insertPages({
    nPage:this.pageNum,
    cPath:”PageMaster.pdf”,
    nStart:0,
    nEnd:0})
    app.endPriv();
    indexchamp=0
    this.getField(“Commentaires”).value=this.getField(“Commentaires”).value+”rPage “+indexpage+” créée.”;
    indexpage=indexpage+1;
    }
    }
    })
    function creationNumeros()
    {
    rectangle=new Array();
    this.getField(“NombrePages”).value=NombrePages;
    UnitesParPage=this.getField(“UnitesParPage”).value;
    this.getField(“Commentaires”).value=”Réalisé:”;
    onyva=app.alert(“Cette action va lancer la création de “+this.getField(“NombreTickets”).value+” numéros de tickets.rContinuer?”,2,2);
    if(onyva==4)
    {
    indexpage=1;
    while(indexpage {
    indexchamp=0
    while(indexchamp {
    indexchamp=indexchamp+1;
    if(indexpage==1)
    {
    NomChamp=”Numero_”+indexchamp;
    rectangle[indexchamp]=this.getField(NomChamp).rect;
    this.getField(“Commentaires”).value=this.getField(“Commentaires”).value+”rPage “+indexpage+” suppression de “+NomChamp;
    this.removeField(NomChamp);
    }
    Numero=(indexpage-1)*UnitesParPage+indexchamp;
    Marque=Numero;
    if(Numero<10000){Marque="0"+Numero;}
    if(Numero<1000){Marque="00"+Numero;}
    if(Numero<100){Marque="000"+Numero;}
    if(Numero<10){Marque="0000"+Numero;}
    NouveauNomChamp=”Num”+Numero;
    this.addField(NouveauNomChamp,”text”,indexpage,rectangle[indexchamp]);
    this.getField(“Commentaires”).value=this.getField(“Commentaires”).value+”rPage “+indexpage+” Ajout de “+NouveauNomChamp;
    this.getField(NouveauNomChamp).value=Marque;
    }
    indexpage=indexpage+1;
    }
    this.getField(“Commentaires”).value=this.getField(“Commentaires”).value+”rTerminé.”;
    }
    }

    Vous trouverez une page “PageMaster.pdf” dans le post qui suit.
    Voilà.

    [attachment deleted by admin]

    en réponse à : Incrémenter un numéro automatiquement. – RÉSOLU #50715
    alex
    Participant

    Voilà un bon sujet, je vous répond demain.

    en réponse à : PDF avec formulaire bug affichage champs #50708
    alex
    Participant

    Ce formulaire est de type AcroForm, l’éditeur de formulaires d’Acrobat.
    Il a sans doute été généré avec pdflib ou une autre classe pHp?
    Si oui, c’est de ce côté qu’il faut chercher…
    Par ailleurs, en ce qui concerne la sauvegarde sous Adobe Reader, il faut que les Reader Extensions soient activées après que le document soit protégé.
    Pour aller plus loin, il me faut le document généré en chair et en os, sans protection…et très certainement le code…Désolé.

    alex
    Participant

    Pour travailler, il faut avoir sous le coude:
    Méthodes et propriétés liées au js LC Designer >LiveCycle Designer ES2 Scripting Basics.
    Méthodes et propriétés liées au js Acrobat >js_api_reference.
    Méthodes et propriétés liées au js 3D Acrobat >js_3d_api_reference.
    Méthodes et propriétés générales JavaScript, je te conseille…> http://javascript.developpez.com/cours/
    Enfin, je garde toujours sous la main une édition française “JavaScript” précis & concis de David Flanagan chez Eyrolles qui peut servir quelque soit l’environnement de travail (pdf, html) pour retrouver les manipulations de dates, les fonctions math, les traitements de chaînes de caractères, etc…

    en réponse à : Vérification simlultanée de plusieurs Drop-Down List #50594
    alex
    Participant

    J’ai toujours été un peu plus qu’un amateur intéressé. Je connais assez bien les codes informatiques (AppleScript, pHp, JavaScript HTML et PDF, SQL)  Je suis à la retraite après avoir travaillé pour l’essentiel dans le domaine de l’informatique industrielle et j’ai une petite activité de consultant.

    alex
    Participant

    Une fois de plus on pourrait aussi faire ça par script (assez facilement sous AcroForm, moins aisément avec LC Designer):
    Si les conditions à remplir de la page n ne sont pas satisfaites, on interdit l’ouverture de la page n+1 (ou plus exactement on provoque un retour à la page n). Les scripts seraient donc placés en ouverture de page.

    en réponse à : Lien hypertexte de word vers page d’un fichier Pdf #50634
    alex
    Participant

    Passer d’un document pdf maître à un autre pdf cible…
    Par script dans le document maître (par exemple dans un bouton):

    app.openDoc(“Consultation.pdf”);
    //Ici placer le numéro de page qui peut être une variable…
    global.pagevisee=3;

    Dans le document cible, placer ce script d’ouverture:
    //propager l’action de script…
    this.disclosed=true;
    //Aller à la page demandée (les pages sont notées à partir de 0)
    this.pageNum=(global.pagevisee-1);

    J’ai vérifié sur Adobe Reader 9.3

    Qu’en pensez-vous ?

    en réponse à : Vérification simlultanée de plusieurs Drop-Down List #50592
    alex
    Participant

    J’espère avoir bien compris la logique.. Voilà sans doute quelque chose qui approche la solution à ton problème.
    Après avoir sélectionné les différentes options, on valide.
    Le script analyse les réponses et si l’une d’elles n’est pas celle attendue, la variable validation passe à false.
    Si les conditions sont satisfaites (validation=true), pas de problème, on continue, sinon on ferme le document.

    [attachment deleted by admin]

    en réponse à : Vérification simlultanée de plusieurs Drop-Down List #50590
    alex
    Participant

    C’est parfait, je vois ça dès que possible…

    en réponse à : Vérification simlultanée de plusieurs Drop-Down List #50588
    alex
    Participant

    Avec la page de votre formulaire, si ce n’est pas confidentiel, j’irai beaucoup plus vite..
    Possible ?

    en réponse à : Vérification simlultanée de plusieurs Drop-Down List #50586
    alex
    Participant

    Oui, c’est possible. Encore un petit problème de logique combinatoire…
    Comment se présente cette série de 4 questions ? Cases à cocher (1 à plusieurs choix possibles parmi N), boutons radio (un seul choix parmi N), Listes déroulantes (1 à plusieurs choix possibles parmi N) ? A partir de là, technique classique, un script d’analyse lancé par un évènement donnant ou pas une alerte. Verrouillage éventuel de champs de saisie, etc

    en réponse à : Trans Word–>Pdf: comment trans. lien hypertexte en signet pdf #50601
    alex
    Participant

    Je parlais d’opérations effectuées par scripts JavaScript intégrés à Acrobat soit sous forme de traitement par (batch) ou sous forme de programme associé à l’environnement d’Acrobat. Evidemment, il faut les développer…

    en réponse à : Trans Word–>Pdf: comment trans. lien hypertexte en signet pdf #50598
    alex
    Participant

    Si jamais on ne trouve pas d’outils pour une conversion automatique… On peut remarquer que sous Acrobat PRO:
    1-Nous savons lire et extraire du texte d’un document .pdf (voir mesures de densité d’encrage).
    2-Nous savons également créer des signets de manière automatique (on a déjà présenté des scripts sur ce thème ici).

    Pour aboutir il faudrait que de plus, nous soyons capables d’identifier à coup sûr les mots correspondants à des lien hypertextes….

    Hum.

    en réponse à : texte seulement #50548
    alex
    Participant

    Avec LiveCycle Designer, pour exclure les chiffres, voici la syntaxe JS qui me parait la plus simple, associée à l”évènement change du champ de saisie. J’utilise les codes ASCII des caractères, ainsi, il sera facile d’ajouter d’autres exclusions.
    formulaire1.Page1.texte1::change – (JavaScript, client)
        if(xfa.event.change.charCodeAt(0)>=48&xfa.event.change.charCodeAt(0)<=57)
        {
        app.alert(“Saisie de caractères alphabétiques uniquement!”,1);
        xfa.event.change=””;
        }
    Ci-joint un formulaire exemple.

    [attachment deleted by admin]

    en réponse à : texte seulement #50544
    alex
    Participant

    Juste un petit effort de logique combinatoire…Comme à l’école..

    en réponse à : texte seulement #50542
    alex
    Participant

    Voici la maquette pour LiveCycle Designer, pour le cas 3 je donne ma langue au chat (provisoirement). Il faut dire qu’avec Designer, on a pas mal de formats prédéfinis qui n’imposent pas l’usage du JS.
    Quelqu’un relève le défi ?

    [attachment deleted by admin]

    en réponse à : texte seulement #50540
    alex
    Participant

    Ayant revu ma copie pour le script 3….
    Contrôle de saisies numériques avec AcroForm:
    Script 1: saisie des chiffres uniquement (inspiré du script de Merlin).
    Script 2: saisie des chiffres, points et + uniquement (variante)
    Script 3: saisie des chiffres, un seul point et un seul + corrigé!

    [attachment deleted by admin]

    en réponse à : texte seulement #50538
    alex
    Participant

    Contrôle de saisies numériques avec AcroForm:
    Script 1: saisie des chiffres uniquement (inspiré du script de Merlin).
    Script 2: saisie des chiffres, points et +.
    Script 3: saisie des chiffres, un points et un +.

    [attachment deleted by admin]

    en réponse à : texte seulement #50536
    alex
    Participant

    Je fais une synthèse de toutes les solutions AcroForm (ASCII et classique) et LiveCycle Designer lundi.

    en réponse à : texte seulement #50533
    alex
    Participant

    Ce script passe par les équivalents ASCII des caractères (ici ce sont les codes ASCII des chiffres 48 est le code ASCII de 0, jusqu’à 57 qui est le code ASCII de 9), à partir de là le code est facile à lire: toute saisie dont l’équivalent ASCII est inférieur à 48 ou supérieur à 57 est rejeté. Ce code est élégant dans ce cas particulier.
    Pour résoudre ton problème, on peut adapter le code que je vous  ai proposé ou celui-ci, au choix….

    en réponse à : texte seulement #50530
    alex
    Participant

    Merlin, un petit effort en JavaScript… La réponse est presque à portée de main dans l’exemple qui précède en définissant cette fois la liste des caractères autorisés au lieu des exclus et en adaptant les tests!
    Allez

    en réponse à : texte seulement #50528
    alex
    Participant

    Sous Acrobat PRO 7,8,9, formulaire créé avec AcroForm.
    Dans chaque champ de saisie où le même contrôle s’impose,onglet Format>
    Catégorie de format>Personnalisé
    Script de touches personnalisé, insérer le script générique qui suit:

    AnalyseSaisie()
    Au niveau document, Options avancées>Traitement du document>Scripts JavaScript…>
    Créer la fonction AnalyseSaisie.

    function AnalyseSaisie()
    {
    console.clear();
    //Récupération du nom du champ de saisie:
    NomChampSaisie=event.target.name;
    console.println(“Saisie dans le champ “+NomChampSaisie);
    Chaine=this.getField(NomChampSaisie).value;
    console.println(“Chaine avant traitement=”+Chaine);
    //Tableau des caractères à exclure
    CaracteresExclus=new Array();
    CaracteresExclus=[0,1,2,3,4,5,6,7,8,9];
    //Analyse du caractère saisi
    indexC=0;
      while(indexC  {
        if(event.change==CaracteresExclus[indexC]&event.change!=””)
        {
        app.alert(“Saisie de chiffres proscrite!”,1);
        event.change=””;
        }
      indexC=indexC+1;
      }
    }

    Ci-joint fichier de démonstration, vous pouvez ajouter des champs, modifier les caractères proscrits…

    [attachment deleted by admin]

    en réponse à : texte seulement #50526
    alex
    Participant

    Je suppose qu’il s’agit d’interdire la saisie des chiffres dans ce champ. Dans ce cas un petit script JS pourrait sans doute répondre à la problèmatique si aucune autre astuce ne s’annonce…

    alex
    Participant

    Vous trouverez ci-joint l’exemple décrit ci-dessus pour 4 couples de menus liés. Il n’y a pas de limite, la seule contrainte étant de respecter le nom des listes déroulantes soit ListeMerex pour les sélecteurs et ListeFillex pour les listes associées.
    Bon week-end à tous.

    [attachment deleted by admin]

    alex
    Participant

    Nous sommes donc sous Acrobat PRO (versions 7,8,9), le formulaire a été développé avec AcroForm.
    Deux scripts font le travail:
    Le premier, (qui ne travaille qu’une fois à l’ouverture du document par exemple) assure le remplissage des items des sélecteurs (listes déroulantes mères) ainsi que la construction des tables Liste(x,y)
    x est l’index du couple mere/fille.
    y est l’index de l’occurence mère.

    function RemplissageMere()
    {
    //Remplissage du premier menu déroulant Liste1:
    console.clear();
    //Paramétrage du nombre de couples mere/fille du document
    NbreCouples=5;
    //On définit les tableaux:
    Selecteur=new Array();
    Liste=new Array();
    indexCouple=1;
      while (indexCouple<=NbreCouples)
      {
      Selecteur[indexCouple]=new Array();
      Liste[indexCouple]=new Array();
      indexCouple=indexCouple+1;
      }
    //On définit les listes mères/filles (autant de Listes filles que d’items du Selecteur mère), le nombre d’items est libre
    //Premier couple par exemple:
    Selecteur[1]=[“Garçons”,”Filles”]
    Liste[1][0]=[“Jean”,”Alain”,”François”,”Pierre”,”Damien”,”Alex”,”Mike”]
    Liste[1][1]=[“Brigitte”,”Nicole”,”Marie”,”Julie”,”Cécile”,”Marion”,”Diane”,”Judith”,”Samia”,”Colette”,”Christine”]
    //Fin du premier couple
    //Second couple pour exemple:
    Selecteur[2]=[“France”,”Allemagne”,”Italie”,”Espagne”,”Belgique”]
    Liste[2][0]=[“Paris”,”Bordeaux”,”Lille”,”Strasbourg”,”Lyon”,”Grenoble”]
    Liste[2][1]=[“Berlin”,”Bonn”,”Munich”,”Brême”];
    Liste[2][2]=[“Rome”,”Milan”,”Gênes”,”Bologne”];
    Liste[2][3]=[“Madrid”,”Barcelonne”,”Valence”];
    Liste[2][4]=[“Bruxelles”,”Gand”,”Namur”];
    //Fin du second couple
    //Couple 3 pour exemple:
    Selecteur[3]=[“Europe”,”Amérique”]
    Liste[3][0]=[“Bruxelles”,”Paris”,”Oslo”,”Londres”,”Berlin”,”Madrid”,”Rome”,”Athène”,”Milan”]
    Liste[3][1]=[“New-York”,”Montreal”,”Toronto”,”La Paz”,”Panama”];
    //Fin du couple 3.
    //Couple 4 pour exemple:
    Selecteur[4]=[]
    Liste[4][0]=[]
    //Fin du couple 4
    //Couple 5 pour exemple:
    Selecteur[5]=[];
    Liste[5][0]=[];
    //Fin du couple 5
    //………………………..Autres définitions si nécessaire.
    //Remplissage des listes mères (sélecteurs)
    indexCouple=1;
      while (indexCouple<=NbreCouples)
      {
      this.getField(“ListeMere”+indexCouple).clearItems();
      this.getField(“ListeFille”+indexCouple).clearItems();
      indexItem=0;
        while(indexItem    {
        this.getField(“ListeMere”+indexCouple).insertItemAt(Selecteur[indexCouple][indexItem],indexItem,indexItem)
        indexItem=indexItem+1;
        }
      indexCouple=indexCouple+1;
      }
    //Fin remplissage Liste mère
    }

    Un second script général, lançé par les sélecteurs, met à jour les listes filles:
    Attention à son mode de lancement.onglet Format>
    Catégorie de format>Personnalisé
    Script de touches personnalisé>

    function RemplissageFille()
    {
    console.clear();
    //On définit les items de Liste fille de rang indexCouple à chaque fois que le sélecteur mère est solliscité:
    //Nom du sélecteur solliscité:
    NomSelecteur=event.target.name;
    console.println(“Sélecteur activé:”+NomSelecteur)
    //Détermination du rang:
    longueuralpha=”ListeMere”.length;
    console.println(“Longueur de la partie alpha:”+longueuralpha)
    indexCouple=NomSelecteur.substring(longueuralpha,NomSelecteur.length);
    console.println(“index du couple:”+indexCouple)
    ffille=this.getField(“ListeFille”+indexCouple);
    console.println(“Liste mise à jour: ListeFille”+indexCouple)
    ffille.delay=true;
    ffille.clearItems();
    indexItem=0;
    while(indexItem {
    ffille.insertItemAt(Liste[indexCouple][event.changeEx][indexItem],indexItem,indexItem)
    indexItem=indexItem+1;
    }
    ffille.currentValueIndices=0;
    ffille.delay=false;
    }

    alex
    Participant

    Non, il faut revoir le code car les tables Liste[ x ] doivent être différentes pour chacune des listes déroulantes mères. Il faudra donc créer de nouvelles tables style Liste[ y ][  x ] où y est l’indice du couple et x l’indice de chaque série. Je vais essayer de généraliser pour n couples de listes déroulantes… puis je mettrai une maquette à disposition pour tous.

    alex
    Participant

    Si tu peux ouvrir le fichier joint avec ton Designer 7 sur PC, tu y trouveras une variante de ces scripts dans leur contexte de développement et en particulier l’arborescence des objets.
    Sur Mac,PC,LINUX, sous Acrobat ou sous Adobe Reader, on voit le résultat des actions.

    [attachment deleted by admin]

    alex
    Participant

    Sous Adobe LiveCycle Designer ES 8.2 et uniquement sur PC donc.
    Question modification des propriétés des champs, on est pas gâté! En fait, on ne peut pas masquer un champ, mais seulement rendre invisible son contenu et interdire son accès. Voilà comment coder ça.
    Le script ci-dessous est lançé par la liste déroulante Liste1 qui va asservir le champ texte1

    formulaire1.Page1.Liste1::validate – (JavaScript, both)
    //Sur évènement validate de la liste déroulante Liste1
    //Attention choisir Langue:JavaScript
    console.println(“Début de test avec sélection de “+Liste1.rawValue);
    //Afficher l’item sélectionné dans le champ texte1
    formulaire1.Page1.texte1.rawValue=Liste1.rawValue;
    //Cas où le résultat est “Autre”
            if(formulaire1.Page1.texte1.rawValue==”Autre”)
          {
          //Rend le contenu du champ invisible et toute saisie impossible
          formulaire1.Page1.texte1.presence=”invisible”;
          }
    //Cas où le résultat n’est pas “Autre”
        else
            {
            //Rend le contenu du champ visible et toute saisie possible
          formulaire1.Page1.texte1.presence=”visible”;
          formulaire1.Page1.texte1.fontColor=color.black;
            }
    console.println(“Fin de test”);
    //console.show();

    Le petit script suivant permet de remplir les items du menu déroulant Liste1 ici avec Bouton1:
    formulaire1.Page1.Bouton1::click – (JavaScript, both)
    //Sur évènement clic du bouton ou sur autre chose (ouverture doc ou page).
    console.clear();
    formulaire1.Page1.Liste1.clearItems();
    formulaire1.Page1.Liste1.addItem(“Item1”);
    formulaire1.Page1.Liste1.addItem(“Item2”);
    formulaire1.Page1.Liste1.addItem(“Item3”);
    formulaire1.Page1.Liste1.addItem(“Item4”);
    formulaire1.Page1.Liste1.addItem(“Autre”);
    formulaire1.Page1.Liste1.fontColor=color.red;
    //Fin du script

    Je vais creuser cette affaire pour voir si une astuce ne permettrait pas de vraiment masquer les champs. La propriété .presence=”invisible” du formulaire XFA est très différente de .hidden=true d’AcroForm et le champ reste bien visible!

    Note: il y a là assez d’éléments pour résoudre le problème d’une liste déroulante Liste1 qui, en fonction de la sélection remplit une seconde liste de choix Liste2.

    C’est tout pour aujourd’hui.

    alex
    Participant

    J’ai remplaçé une chaîne de caractères que l’éditeur du forum m’a mangé , tu peux donc recopier le script 1 d’ouverture de page.
    Je donnerai aussi la solution pour Adobe LiveCycle Designer dont les grandes lignes apparaissent dans le sujet précédant.
    Pour info, Merlin, j’ai été obligé de remplacer (sans les ) par [index]
    Bonne soirée à tous.

    alex
    Participant

    Ce script ne fonctionne qu’avec AcroForm (les formulaires créés sous Acrobat). Pour les formulaires construits avec Adobe Designer, la syntaxe est différente.
    Les personnes qui fréquentent ce site travaillent sur Mac en général et ne disposent pas du Designer, c’est la raison pour laquelle je donne de préférence des solutions AcroForm.
    Je vais regarder si je peux te répondre côté Designer si tu peux patienter un jour ou deux car je suis hors Paris et je n’ai pris que mon Mac.

    alex
    Participant

    Toutes ces “méthodes” JavaScript sont facultatives. Elles ont un but pédagogique.
    console.clear();
    Efface le contenu de la console.
    console.println(“Nom de l’objet solliscité:”+event.target.name);
    Affiche le nom de l’objet sur lequel l’action a lieu (ici la liste elle-même)
    console.println(“Valeur exportée:”+event.target.value);
    Affiche la valeur utilisable par la suite dans le script.
    console.println(“Nom item activé:”+event.change);
    Affiche l’item activé utilisable par la suite dans un script.

    alex
    Participant

    Problème:enregistrer un formulaire et ses données.
    Ce n’est plus un problème depuis la version 8.
    Créer un bouton ayant pour action de lancer le script suivant:

    app.execMenuItem(“Save”);
    Enregistrer le formulaire puis activer “Etendre les fonctions de Reader”.
    Script valide pour les versions 8 et 9 D’adobe Reader.

    alex
    Participant

    Problème:
    Masquer un champ à partir d’une sélection
    Script à associer au champ de liste (émetteur de l’évènement)
    Onglet Format>
    Catégorie de format>Personnalisé
    Script de touches personnalisé>

    if(!event.willCommit)
    {
    //Pour les curieux, ce sera dans la console (Pomme-J ou CTRL J)
    console.clear();
    console.println(“Nom de l’objet solliscité:”+event.target.name);
    console.println(“Valeur exportée:”+event.target.value);
    console.println(“Nom item activé:”+event.change);
    //Masquer le champ “ChampAmasquer” si on sélectionne “Autre”
            f2=this.getField(“ChampAmasquer”);
    f2.delay=true;
            if(event.change==”Autre”)
            {
            f2.hidden=true;
            }
            else
            {
            f2.hidden=false;
            }
    f2.delay=false;
    //Fin de notre affaire.
    }

    Script valide sur les versions 7,8,9 d’Adobe Reader sur un formulaire AcroForm.

    alex
    Participant

    Problème:la sélection d’un item de la liste déroulante 1 met à jour une seconde liste déroulante.
    La solution avec AcroForm (Champs créés directement sous Acrobat)
    Deux listes déroulantes Liste1 et Liste2. Inutile de saisir les items.
    1-Script d’ouverture de la page contenant les deux champs de sélection:

    //Remplissage du premier menu déroulant Liste1:
    console.clear();
    //On définit un tableau des items de la liste mère et on la remplit:
    Selecteur=new Array();
    Selecteur=[“Garçons”,”Filles”]
    f1=this.getField(“Liste1”)
    f1.clearItems();
    index=0;
    while(index{
    f1.insertItemAt(Selecteur[index],index,index)
    index=index+1;
    }
    //Fin remplissage Liste1 mère
    //On définit les listes filles (autant de listes que d’items de Liste1)
    Liste=new Array();
    Liste[0]=[“Jean”,”Alain”,”François”,”Pierre”,”Damien”,”Alex”,”Mike”]
    Liste[1]=[“Brigitte”,”Nicole”,”Marie”,”Julie”,”Cécile”,”Marion”,”Diane”,”Jufdith”,”Samia”,”Colette”,”Christine”]
    //Fin définition des listes filles

    2-Script de la première liste déroulante Liste1, onglet Format>
    Catégorie de format>Personnalisé
    Script de touches personnalisé
    //Remplissage du second menu déroulant

    if(!event.willCommit)
    {
    //On définit les items de Liste2 à chaque fois que Liste1 est solliscité:
    f2=this.getField(“Liste2”);
    f2.delay=true;
    f2.clearItems();
    j=0;
    while(j {
    f2.insertItemAt(Liste[event.changeEx][j],j,j)
    j=j+1;
    }
    f2.currentValueIndices=0;
    f2.delay=false;
    }

    alex
    Participant

    Bonjour à tous,
    Les formulaires ont-ils étés réalisés directement sous Acrobat (avec AcroForm) ou sur Adobe Designer ?

    en réponse à : Comment extraire le texte d’un pdf (1.4) #50337
    alex
    Participant

    On a sans doute une bonne partie de la réponse dans le système de mesure d’encrage publié sur le site puisque le principe consiste à lire le contenu texte du pdf pour évaluer la densité de l’écriture (script JavaScript). Pour aller plus loin et s’assurer que la piste est bonne, il faudrait avoir un exemple du fichier origine…

    en réponse à : [Questions multiples] Projet PDF interactif Mac/Pc #50323
    alex
    Participant

    Il y a un moyen peu élégant mais parfois utile de détourner le problème de la question 2, c’est de créer des templates que l’on pourra ensuite manipuler par des  scripts associés à des boutons de circulation.
    1-Créer les templates du document, attention via la console sous Acrobat uniquement:

    function CreeTemplates()
    {
    console.clear();
    index=0;
      while(index  {
      this.createTemplate(“Page”+index,index);
      index=index+1;
      }
      index=0;
      t=this.templates;
      l=t.length;
      while(index  {
      console.println(“Création du template de rang “+index+” “+t[index].name);
      t[index].hidden=false;
      index=index+1;
      }
    }

    2-Pour afficher tous les templates (script général précédant tout appel de page ):

    function AfficheTemplates()
    {
    console.clear();
    //console.show();
      index=0;
      t=this.templates;
      l=t.length;
        while(index    {
        nom=t[index].name;
        t[index].hidden=false;
        console.println(“Affichage template de rang “+index+”/”+l+” “+nom);
        index=index+1;
        }
    }

    L’inconvénient de cette méthode est que le document apparaît comme ne contenant qu’une page.
    Plus de détails ?

    Apparemment ça ne fonctionne plus sous Reader 9. Désolé.Je laisse ce script sur le forum, il pourrait redevenir d’actualité.

    en réponse à : Formulaire #50279
    alex
    Participant

    Le formulaire a été créé sous Adobe LiveCycle Designer et le language utilisé est FormCalc. Je ne connais pas non plus (je préfère le JavaScript). Tu as une erreur de nom de champ (numShippingCharge) et il faut retire le //, en ouvrant l’éditeur XML.   
    Remplace:


    Par:




    J’ai testé.

    Merci et bravo

    en réponse à : Enregistrer formulaire #50274
    alex
    Participant

    Sous Acrobat Pro
    Options avancées>Etendre les fonctions d’Adobe Reader
    On peut alors saisir et enregistrer des données de formulaire avec Adobe Reader.

    en réponse à : Remplissage de champs de formulaires depuis base oracle #50201
    alex
    Participant

    Bonsoir,
    Autres pistes:

    1-Si on est pas riche, et s’il s’agit de générer un document à signer à partir de données issues d’Oracle, on peut aussi procéder comme suit:
    a)sur un portail web (intranet ou extranet d’entreprise) on crée une page formulaire en pHp qui va lire les données via requêtes SQL pour les présenter à l’utilisateur. Celui-ci qui pourra ajouter ou modifier des données présentées dans les champs et les enregistrer dans la base si nécessaire toujours par requêtes SQL.
    b)à partir de ce formulaire un bouton va lancer un second programme pHp associé à une classe pHp générant du PDF (votre CERFA).
    Ce n’est vraiment pas trop complexe à réaliser et les outils sont gratuits. De plus on peut sécuriser l’acces au formulaire s’il s’agit de données sensibles.

    2-Si on a quelques moyens il ne faut pas perdre de vue Flex (technologie ADOBE) qui permet de réaliser une interface homme/machine vraiment riche beaucoup plus facilement qu’avec pHp+Ajax et css.

    Pour ce type de problème, j’aurais un petit faible pour le pHp !

    alex
    Participant

    Sur la page, j’ai créé deux champs texte:
    Le champ “Reference”, caché en lecture seule qui est placé sur la future zone de saisie.
    Le champ “MonBeauChampQuiGrandit”, future zone de saisie n’importe où, elle sera redimensionnée par le script pour couvrir le champ précédant.
    En ouverture de page on ajoute le script suivant:

    fsaisie=this.getField(“MonBeauChampQuiGrandit”);
    fref=this.getField(“Reference”);
    fsaisie.rect=fref.rect;
    lg=fsaisie.value;
    Dans le champ “MonBeauChampQuiGrandit”, onglet “Format>Personnalisé>Format de touche personnalisé” j’ai saisi le script suivant:
    if(!event.willCommit)
    {
    console.clear();
    rectangle=fref.rect;
    //calcul de la largeur de référence
    larg=rectangle[2]-rectangle[0];
    //lecture du contenu du champ
    lg=this.event.value;
    //calcul de la nouvelle abscisse, il faudrait ajouter une limite
    newlarg=(lg.length)*larg/10;
    rectangle[2]=Math.max((rectangle[0]+newlarg),(rectangle[0]+larg));
    //Pour les curieux:
    console.println(“Chaîne de caractères=”+lg);
    console.println(“Longueur chaine de caractères=”+lg.length);
    console.println(“Longueur variable du champ de saisie=”+newlarg);
    console.println(“Longueur mini du champ de saisie=”+larg);
    //On dimensionne si nécessaire
    if(event.change)
    {
    fsaisie.rect=rectangle;
    }
    }

    Au delà de 10 caractères le champ est redimensionné proportionnellement à la longueur de la saisie. On peut faire mieux mais c’est déjà ça.

    alex
    Participant

    Avec un JavaScript, on peut très bien augmenter la taille d’un champs de texte en fonction du nombre de caractères saisis par l’utilisateur avec:this.getField(“MonBeauChampquigrandit”).rect=rectangle où rectangle est un tableau de quatre paramètres.
    Ces quatre paramètres sont variables en fonctions du nombre de caractères this.getField(“MonBeauChampquigrandit”).value.length
    Pour que la taille suive les évolutions de la saisie on utilisera le classique event.target dans un script de touches personnalisé associé au format du champ.

    en réponse à : Extraction données PDF vers MY_SQL // HELP!! #50161
    alex
    Participant

    Voici quelques éléments de réponse, je détaillerai si nécessaire plus tard…:
    Dans le script JavaScript:
    Les données envoyées sont celles des champs de formulaire listés par aFields (le nom des champs séparés par des virgules)
    L’envoi des données se fera vers le site “monsite.fr”
    Les donnees seront ensuite analysées par le programme pHp “xCollecteDonnees.php” qui les recevra comme des $_POST[Nom_du_champ]. Il faut inclure dans ces données un identifiant validant celles-ci, la première opération du script pHp étant de s’assurer que l’emetteur des données est autorisé à le faire.
    Au niveau du formulaire, le script JavaScript est du style:

    this.submitForm({
    cURL: “http://www.monsite.fr/xCollecteDonnes.php#FDF&#8221;,
    aFields:ListeChamps,
    cSubmitAs: “HTML”
    });
    On peut associer ce script à un bouton.
    Pour faire des essai, supprimez la ligne aFields (tous les champs de formulaire seront envoyés).
    Je pourrai donner un exemple du script php en début de semaine prochaine…

    en réponse à : Correction dans un calcul lors d’un backspace #50094
    alex
    Participant

    Rien de moins évident:
    Dans le champ où a lieu l’évènement déclencheur:
    Onglet Format>Catégorie de format: “Personnalisée” puis dans le champ Script de touches personnalisé,
    Saisir le script suivant:

    if(!event.willCommit)
    {
    //Prise en compte de la nouvelle valeur du champ activé
    nouvellevaleur=this.event.changeEx;
    //suite du script de calcul mettant à jour les autres champs à partir de nouvellevaleur.
    }
    Même méthode pour les autres champs déclencheurs…
    Bonsoir à tous.

    alex
    Participant

    Le problème n’est pas résolu et vous avez raison, on nous conseille de désactiver le JavaScript.
    http://blogs.adobe.com/psirt/
    :(

    alex
    Participant

    Je connais bien votre problème de circulation entre documents pdf et ses fâcheuses conséquences. On croit résoudre le problème à un instant donné et dans un environnement donné, et les difficultés ressurgissent à la moindre mise à jour.
    J’ai lu l’article ci-dessus, bien sûr on peut utiliser un autre lecteur ou on peut empêcher l’exécution du JavaScript embarqué par les documents .pdf …Mais alors, à quoi bon travailler sur des documents interactifs ?

    en réponse à : Logo variable en fonction du choix dans liste déroulante #50042
    alex
    Participant

    La solution consiste à rendre visible un bouton embarquant le logo de l’association parmi n boutons invisibles (dans mon exemple nbreIcones=5).
    Créer 5 boutons embarquant les logos et identifiez les comme suit:
    Bouton_0, Bouton_1,Bouton_2,Bouton_3,Bouton_4,Bouton_5.
    Ne les placez pas, le script va le faire pour vous.
    Placez uniquement le bouton Bouton_0 à l’emplacement souhaité.
    Créer un menu déroulant et ses 5 items avec les noms des associations avec comme valeur d’export le rang du bouton logo.
    Association 1, valeur d’export 0
    Association 2, valeur d’export 1
    Association 3, valeur d’export 2
    Association 4, valeur d’export 3
    Association 5, valeur d’export 4
    Toujours dans le menu déroulant, Onglet Format>Script de touches personnalisé, insérer ce script:

    if(!event.willCommit)
    {
    //sur sélection d’un item
    nbreIcones=5;
    index=0;
    //on note position et dimensions du bouton Bouton_0
    rectangleBase=this.getField(“Bouton_0”).rect;
    //On passe en revue tous les champs dont le nom commence par “Bouton_”
    while(index<=nbreIcones)
    {
    nom=”Bouton_”+index;
    if(index==event.changeEx)
    {
    //Si l’index est celui de la sélection, on rend visible et on positionne le bouton.
    this.getField(nom).hidden=false;
    this.getField(nom).rect=rectangleBase;
    }
    else
    {
    //On masque les autres.
    this.getField(nom).hidden=true;
    }
    index=index+1;
    }
    }

    C’est tout.
    Bonne soirée à tous.

    en réponse à : Logo variable en fonction du choix dans liste déroulante #50039
    alex
    Participant

    La solution de ce problème vous intéresse (en JavaScript naturellement) ?

    en réponse à : IF-THEN quatrième : oui mais. – RÉPONDU #50033
    alex
    Participant

    Enfin, dans le menu déroulant “Liste”, Onglet Format>Script de touches personnalisé, il faut à partir de l’évènement de sélection d’un item renseigner le champ de sortie baptisé ici “Telephone”.

    if(!event.willCommit)
    {
    //mise à jour du champ Telephone
    this.getField(“Telephone”).value=this.event.changeEx;
    }

    Bonsoir à tous.

    en réponse à : IF-THEN quatrième : oui mais. – RÉPONDU #50031
    alex
    Participant

    Un champ texte baptisé “texte1” va recevoir la liste des noms séparés ici par des virgules ou autre chose (caractère séparateur à définir)
    Un second champ texte baptisé “texte2” va recevoir la liste des téléphones séparés ici par le même caractère séparateur.
    En lançant le script ci-dessous vous remplirez automatiquement la liste déroulante baptisée “Liste” .
    Les valeurs affichées sont les noms, les valeurs d’export sont les téléphones.

    function Remplissage()
    {
    console.clear();
    tablenoms=new Array();
    tabletels=new Array();
    //Format csv, le caractère de séparation est le “;”
    caracteresep=”,”;
    //Remplissage de la table des noms à partir du texte 1
    chaine=this.getField(“texte1”).value;
    indice=0;
    indiced=0;
    index=0;
    while(indice {
    if(chaine.substring(indice,(indice+1))==caracteresep|indice==chaine.length-1)
    {
    tablenoms[index]=chaine.substring(indice,indiced)
    console.println(index+”-“+tablenoms[index]);
    indiced=indice+1;
    index=index+1;
    }
    indice=indice+1;
    }
    //Remplissage de la table des téléphones à partir du texte 2
    chaine=this.getField(“texte2”).value;
    indice=0;
    indiced=0;
    index=0;
    while(indice {
    if(chaine.substring(indice,(indice+1))==caracteresep|indice==chaine.length-1)
    {
    tabletels[index]=chaine.substring(indice,indiced)
    console.println(index+”-“+tabletels[index]);
    indiced=indice+1;
    index=index+1;
    }
    indice=indice+1;
    }
    //Remplissage du menu déroulant
    index=tablenoms.length;
      this.getField(“Liste”).clearItems();
        while(index>0)
        {
        index=index-1;
        this.getField(“Liste”).insertItemAt(tablenoms[index],tabletels[index]);
        }
    }

    Vous trouverez sur ce forum comment renseigner un champs (“Téléphone”) automatiquement sur sélection d’un item du menu déroulant “Liste” ou je fais un petit rappel?
    Désolé Merlin, je vous ai un peu délaissé.
    Amitiés à tous.

    en réponse à : Mesurer le taux de remplissage des pages. – RÉPONDU #49917
    alex
    Participant

    Oui, absolument.

    en réponse à : Mesurer le taux de remplissage des pages. – RÉPONDU #49915
    alex
    Participant

    Je viens d’essayer sur mon MacBook, ça marche avec ce script. J’ai une petite erreur à corriger (lancement de cette commande sans document ouvert).
    Pour un usage intensif il faut prévoir d’analyser une collection de pages ou un document en entier avec un script plus rapide…
    Amicalement.

    en réponse à : Mesurer le taux de remplissage des pages. – RÉPONDU #49913
    alex
    Participant

    Sans doute un problème lié aux caractères spéciaux sur Mac ?
    Remplace la dernière partie par ceci (la création du sous_menu)

    //Placer le nouvel item
    app.addSubMenu({
    cName: “Outils_Abracadabra”,
    cParent: “Tools”,
    nPos: 0 })
    app.addMenuItem({
    cName: “Estimer_encrage”,
    cParent: “Outils_Abracadabra”,
    cExec:”encrage()”,
    cEnable: “true”,
    nPos: 0})

    Je vais essayer sur mon MacBook !

    en réponse à : Mesurer le taux de remplissage des pages. – RÉPONDU #49911
    alex
    Participant

    Vous recopiez tout ça et l’enregistrez dans un fichier baptisé scriptabracadabra.js que vous enregistrez dans le répertoire JavaScript de l’application Acrobat (7,8 ou 9) sur Pc ou sur Mac (Cliquer sur l’application avec Ctrl Afficher le contenu du paquet>Contents>MacOS>JavaScripts )
    Au redémarrage on mesure le taux d’encrage de la page avec les réserves que j’ai déjà formulées. Menu Outils>Outils Abracadabra>Estimer l’encrage
    C’est un peu lent et limité à une page. Mais c’est une première approche..

    //Script à copier.
    function encrage()
    {
    console.clear();
    console.show();
    //Aire de la page
    pp=this.pageNum+1;
    console.println(“Calcul pour la page “+pp)
    rectpage=new Array();
    rectpage=this.getPageBox(“Crop”,0);
    airePage=Math.round(rectpage[1]*rectpage[2]);
    Echelle=21/rectpage[2];
    ll=Math.round(10*rectpage[1]*Echelle)/10;
    hh=Math.round(10*rectpage[2]*Echelle)/10;
    console.println(“Le calcul prend un certain temps. Merci.”)
    console.println(“Largeur page=”+ll+” cm”)
    console.println(“Hauteur page=”+hh+” cm”)
    //Aire des mots
    index=0;
    aireencree=0;
    nbreMots=this.getPageNumWords(this.pageNum);
      while (index  {
      rectmot=this.getPageNthWordQuads(this.pageNum,index);
      //Hélas rectmot n’est pas donné sous forme d’une table !
      rectmotstr=new String(rectmot);
      pointeur=0;
      chaine=””;
        while(pointeur    {
        chaine=chaine+rectmotstr[pointeur];
        pointeur=pointeur+1;
        }
      xy=new Array();
      val=new Array();
      xy[0]=0;
      pointeur=0;
      pos=0;
        while(pointeur    {
          if(chaine.substring(pointeur,(pointeur+1))==”,”)
          {
          pos=pos+1;
          val[pos]=chaine.substring(pointeur,xy[pos-1]);
          xy[pos]=pointeur+1;
          }
        pointeur=pointeur+1;
        }
      //Tout ça pour calculer les côtés du rectangle !
      largeurQ=val[3]-val[1];
      hauteurQ=val[2]-val[6];
      airemot=largeurQ*hauteurQ;
      aireencree=aireencree+airemot;
      index=index+1;
      }
    ratio=Math.round(100*(aireencree/airePage))/100;
    console.println(“Aire encrée=”+ Math.round(aireencree*Echelle*Echelle)+”cm2.”);
    console.println(“Aire disponible=”+ Math.round(airePage*Echelle*Echelle)+”cm2.”);
    console.println(“Soit un ratio de “+ratio)
    console.println(“Fin du calcul pour la page “+pp)
    }
    //Programme init
    //A. Noesser
    //Placer le nouvel item
    app.addSubMenu({
    cName: “Outils Abracadabra”,
    cParent: “Tools”,
    nPos: 0 })
    app.addMenuItem({
    cName: “Estimer l’encrage”,
    cParent: “Outils Abracadabra”,
    cExec:”encrage()”,
    cEnable: “true”,
    nPos: 0})

    en réponse à : Mesurer le taux de remplissage des pages. – RÉPONDU #49909
    alex
    Participant

    Je vous ai préparé quelque chose dans l’esprit de ce que j’ai proposé. Hélas l’exécution est un peu lente, aussi je m’accorde un jour de délai. Ce sera un script à placer dans le dossier JavaScript d’Acrobat (sur Pc ou sur Mac, Merlin précisera la procédure…)

    A demain.

    en réponse à : Mesurer le taux de remplissage des pages. – RÉPONDU #49907
    alex
    Participant

    En JavaScript on peut pour chaque mot calculer l’aire occupée à partir des coordonnées du “Quad” (getPageNthWordQuads()). En faisant la somme des aires occupées par les mots et en la comparant à l’aire des pages on a sans doute une première approche de votre problème si on connaît le ratio d’occupation des lettres . Qu’en pensez_vous ?

    en réponse à : montage de plusieurs pdf et mise à jour #49896
    alex
    Participant

    On eut faire ça depuis la version 5 mais effectivement, c’est un travail de quelques heures…. intéressant si l’outil est utilisé fréquemment. Ce n’est pas plus compliqué que les scripts d’abracadabratools développés par Merlin au niveau de l’application Acrobat.

    en réponse à : montage de plusieurs pdf et mise à jour #49893
    alex
    Participant

    On devrait pouvoir écrire un JavaScript situé au niveau de l’application Acrobat PRO. Ce script serait capable d’effectuer cette opération de manière automatique à la demande de l’utilisateur depuis le document de sortie.
    Au premier assemblage, il faut mémoriser la liste des noms des documents assemblés, leur nombre de leur pages, la date de mise à jour et stocker ces informations dans un tableau embarqué par le document de sortie. (Par exemple dans un champs liste invisible, Merlin me voit venir, toujours les mêmes “trucs” !).
    A chaque mise à jour il faut réinsérer les documents modifiés, supprimer les documents effacés, insérer les nouveaux documents et mettre à jour cette à jour cette table que l’on peut rendre visible de manière provisoire pour l’opérateur.
    Reste à écrire tout ça !

    en réponse à : DRM #49805
    alex
    Participant

    J’ai eu ce problème.
    Si un document doit être protégé par mot de passe ou signature il faut le protéger et l’enregistrer avant d’activer les droits du Reader. En cas d’erreur, utilises la commande Enregistrer une copie et elle seule dans une version d’Acrobat égale ou supérieure à la version de création.
    Mais tu as raison la copie de précaution est plus sûre.

    en réponse à : Générer un numéro de commande automatique #49799
    alex
    Participant

    Plus de détails:
    Préliminaires:
    Il faut obligatoirement travailler avec Acrobat 8 ou 9 pour élaborer le document.
    A l’usage, le système fonctionne sous le seul Reader (version 7 minimum).
    Réalisation:
    Je crée un champ qui contiendra la valeur à contrôler (ici votre numéro de commande).
    J’autorise l’enregistrement des données de champ de formulaire pour conserver la dernière valeur contrôlée (numéro de commande) en utilisant Options avancées>Activer les droits d’utilisation dans Adobe Reader.
    Nota:Attention à ce stade si le document doit être protégé par mot de passe ou signature il faut le protéger et l’enregistrer avant d’activer les droits du Reader. En cas d’erreur, utiliser la commande Enregistrer une copie et elle seule dans une version d’Acrobat égale ou supérieure.
    Par script je force l’enregistrement du formulaire dès que la valeur du champ a changé.
    A la l’ouverture suivante, vous retrouvez votre valeur et vous pouvez la modifier manuellement ou la redéfinir automatiquement par script (ce que je préfère ) autant de fois que vous le désirez.
    Mon Karma est à 0 ?
    Merlin, en ai-je dit assez ?

    en réponse à : Générer un numéro de commande automatique #49797
    alex
    Participant

    Voici comment je procède face à ce problème:
    Préliminaires:
    Il faut obligatoirement travailler avec Acrobat 8 ou 9 pour élaborer le document.
    A l’usage, le système fonctionne sous le seul Reader (version 7 minimum).
    Réalisation:
    Je crée un champ qui contiendra la valeur à contrôler (ici votre numéro de commande).
    J’autorise l’enregistrement des données de champ de formulaire pour conserver la dernière valeur contrôlée (numéro de commande).
    Par script je force l’enregistrement du formulaire dès que la valeur du champ a changé.
    A la prochaine ouverture vous retrouvez votre valeur et vous pouvez la modifier manuellement ou la redéfinir automatiquement par script.

    Plus de détails ?

Affichage de 99 réponses de 496 à 594 (sur un total de 603)