Donnez vie à vos documents numériques !
 

alex

Toutes mes réponses sur les forums

Affichage de 69 réponses de 496 à 564 (sur un total de 564)
  • Auteur
    Réponses
  • 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 ?

    en réponse à : menu pop-up #49703
    alex
    Participant

    La solution à votre problème n’est pas simple car il faut parcourir l’arborescence des signets que l’on ne connait pas à priori, voilà donc le code à tester et vérifier …
    var cDest = app.popUpMenu( “section 1″,”section 2”, [“section 3”, “section 3-1”, “section 3-2”, “section 3-3”], [“section 4″,”section 4-1″,”section 4-2″,”section 4-3″,”section 4-4″,”section 4-5″,”section 4-6”],[“section 5”, “section 5-1”, “section 5-2”, “section 5-3”, “section 5-4”],[“section 6”, “section 6-1”, “section 6-2”, “section 6-3”, “section 6-4”], “section 7”, “section 8”  );
    //this.gotoNamedDest(cDest);
    //fonction de recherche des signets
    function searchBookmarks(bkm, nLevel, bkmName)
    {
    //recherche de premier niveau
    if ( bkm.name == bkmName ) return bkm;
    //recherche aux niveaux secondaires par imbrication
    if (bkm.children != null)
    {
    for ( i = 0; i < bkm.children.length; i++)
    {
    bkMark = searchBookmarks(
    bkm.children, nLevel + 1, bkmName);
    if ( bkMark != null ) break;
    }
    return bkMark;
    }
    return null;
    }

    //programme principal…
    if ( cDest != null )
    {
    bkm = searchBookmarks(this.bookmarkRoot, 0, cDest );
    if ( bkm != null ) bkm.execute();
    else app.alert(“Signet introuvable”,1);
    }

    //Je n’ai pas eu de difficulté car ce code est assez bien documenté.

    en réponse à : formulaire avec bouton radio et envoi par messagerie #49661
    alex
    Participant

    Je te l’envoies Merlin pour que tu la “pédagogise”.

    en réponse à : formulaire avec bouton radio et envoi par messagerie #49659
    alex
    Participant

    Capter l’indice du menu déroulant en placçant le script suivant dans les actions de script personnalisée liées au format du menu déroulant . La valeur est stockée dans le champ invisible nommé “ChampInvisible”.
    this.getField(“ChampInvisible”).value=event.target.currentValueIndices;

    Lors de l’ouverture du document avec les données (qui comprennent la valeur du champ invisible), lancer le script d’ouverture de page suivant qui a pour effet de resélectionner l’item correspondant à la valeur stockée:

    position=this.getField(“ChampInvisible”).value;
    app.alert(“Nous allons placer le menu déroulant sur l’item “+position,3)
    this.getField(“MenuDeroulant”).currentValueIndices=position;

    Maquette pour ceux qui me la demandent gentiment…. :idee:
    Bonsoir

    alex
    Participant

    Je pense qu’il faut autoriser la manipulation (l’ouverture) du fichier cible par le script du fichier père. Pour cela on aura  recours à la propriété disclosed du document cible. Cela évite de passer un script de haut niveau.

    en réponse à : formulaire avec bouton radio et envoi par messagerie #49658
    alex
    Participant

    Essayez ceci:
    Créer un champ caché recevant par script la valeur du rang de l’item à sélectionner.
    Lors de l’ouverture du document un script positionnera le menu déroulant en fonction de la valeur de ce champ…

    en réponse à : condition dans un champ de formulaire #49662
    alex
    Participant

    La syntaxe est la suivante :
    if(this.getField(“Champ1”).value==1)
    {
    //condition satisfaite.
    this.getField(“Champ2”)hidden=true;
    }
    else
    {
    //condition non satisfaite..
    this.getField(“Champ2”)hidden=false;
    }
    //Je vous laisse écrire la suite pour la seconde condition…

    en réponse à : Vue précédente et vue suivante #49532
    alex
    Participant

    Je viens de tester les deux fonctions sous Acrobat Reader 8 :
    Sous Acrobat 7 ou 8, créer deux fichiers pdf, pour aller vite:
    Options avancées>JavaScript>Déboguer>
    Dans la console saisir app.newDoc(); puis Enter avec la touche Enter du pavé numérique.
    Créer deux boutons:
    Le bouton P (précédant) et lui associer le script app.goBack();
    Le bouton S (suivant) et lui associer le script app.goForward();
    Enregistrer ce document sous différents noms.

    Sous Acrobat Reader 8 cette fois, ouvrir ces documents les uns derrière les autres. Tester les boutons P puis S !
    Le miracle se produit (en fait ça marche comme prévu, le bug des premières versions du reader 8 est corrigé).

    en réponse à : Vue précédente et vue suivante #49520
    alex
    Participant

    Votre script est bon. Essayez le sous Acrobat Reader 7 pour vous en convaincre !
    C’est app.goBack() qui est en cause.

    alex
    Participant

    Bonjour à tous. Je fais un petit retour au JavaScript. A ma connaissance, il n’est pas possible de capter ces évènements avec JavaScript mais je peux me tromper. Par contre on peut inhiber l’apparition des menus et donc inciter l’utilisateur à cliquer sur les boutons. Placer le script en ouverture de page soit par batch soit par programme JavaScript.

Affichage de 69 réponses de 496 à 564 (sur un total de 564)