Donnez vie à vos documents numériques !
 

alex

Toutes mes réponses sur les forums

Affichage de 99 réponses de 397 à 495 (sur un total de 564)
  • Auteur
    Réponses
  • en réponse à : Incrémenter un numéro automatiquement. – RÉSOLU #50721
    alex
    Participant

    Récapitulatif du mode d’emploi à suivre attentivement:
    Vous devez disposer de deux fichiers .pdf dans le répertoire Billeterie et d’un script JavaScript  “MachineCreationTickets.js” au niveau de l’application Acrobat.
    Il vous faut Acrobat 8 PRO minimum.
    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, peu importe où ce répertoire a été créé. En effet , dans le script, le chemin est relatif. cPath:”PageMaster.pdf”
    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.
    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

    alex
    Participant

    Au bout de 10 versions, Adobe découvre qu’il a des clients en Europe ! Plaisanterie à part, il est beaucoup moins drôle de se voir privé de lancer des scripts sur saisie de caractère dès lors qu’on a opté pour un format! Pour moi, je ne change pas mes habitudes, je gère moi-même les formats!

    en réponse à : openinPlace récalcitrant #51339
    alex
    Participant

    Je doute qu’il soit possible de contrôler l’état d’affichage des formulaires appelés depuis un document Acrobat, même si les utilisateurs disposent du même navigateur ce qui est souvent le cas en entreprise. J’aimerais beaucoup être contredit sur ce sujet.
    Pour ma part, dans ce cas de figure, je fais appel à des formulaires via une interface Web écrite en pHp.

    Pour info, voici un petit document à connaître, résultats non garantis.

    [attachment deleted by admin]

    alex
    Participant

    C’est à ne rien y comprendre ! Je n’ai pas ce format des nombres avec espace ! A tout hasard, je suis repassé sur la version française d’Acrobat (9.4.1), car je fais mes développements sur la version anglaise et… toujours pas d’espace ! Même chose sur Mac avec Acrobat (9.4.1) aussi. Je ne dispose pas du menu déroulant “Emplacement du symbole:” et pas d’item  “Avant avec espace”. Est-en version X ? Je l’ai désinstallée, je ne peux plus faire d’essais.

    alex
    Participant

    Oui, c’est une solution plus simple tant qu’on a pas l’intention de faire plus de calcul en JavaScript.
    Par contre il faut supprimer l’appel du  script CalculC() lors de la validation des données A et B;
    En ce qui concerne le choix du format:
    1-Pour les nombres, Acrobat ne propose pas de séparateur de milliers, ce que l’on peut faire par JavaScript.
    2-Le choix d’un format nombre interdit l’usage des scripts de touches personnalisé et là, pour moi, c’est un gros handicap.
    Je préfère donc ne pas utiliser les formats proposés par Acrobat.

    alex
    Participant

    Lors de la validation des champs de saisie ChampA ou ChampB, on lance le script:
    CalculC()
    Ce script est placé au niveau du document:
    Dans ce script, tant que l’un des champs de saisie reste vide, on laisse le champ ChampC vide.
    Il faudrait ajouter une analyse de saisie pour s’assurer que A ou B contiennent bien des chiffres ou forcer le format.
    Mais faisons simple pour l’instant:

    function CalculC()
    {
    if(this.getField(“ChampA”).value!=””&this.getField(“ChampB”).value!=””)
    {
    this.getField(“ChampC”).value=this.getField(“ChampA”).value*this.getField(“ChampB”).value;
    }
    else
    {
    this.getField(“ChampC”).value=””;
    }
    }
    Pour raffiner on peut placer un script qui s’exécute lors de la saisie des données (on peut remplacer le “Wait” par un blanc) pour ne pas afficher de résultat tant que celle-ci n’est pas terminée. Onglet Format>Catégorie de format Personnalisée>Script de touches personnalisé>
    Raz();
    Ce script est placé au niveau du document:
    function Raz()
    {
    this.getField(“ChampC”).value=”Wait”
    }

    Maquette jointe.

    [attachment deleted by admin]

    en réponse à : Script à l’ouverture d’un document #51340
    alex
    Participant

    Il ne suffit pas de placer la fonction au niveau du document, il faut qu’un évènement quelconque la lance. Dans votre cas, c’est l’ouverture de la page choisie par défaut qui pourra le faire (en principe la page 1). Donc, afficher la vignette de la page, clic-droit sur cette vignette ….
    Script d’ouverture:

    Blocage();
    Par ailleurs, pour vous assurer que le script est bien lançé rien de tel que des:
    console.println(“Information …”)
    que l’on pourra suivre sur la console avec les erreurs à venir…

    en réponse à : Bouton radio #51335
    alex
    Participant

    Il faut écrire un script JavaScript de contrôle qui rend les boutons radio actifs ou inactifs (statut readonly) selon leur états respectifs.
    Au départ l’état des trois boutons radio doit être fixé, avant saisie.
    Pour ma part, j’ai l’habitude d’associer une occurence invisible (avec AcroForm, br1#0 pour la collection br1, br2#0 pour la collection br2, br3#0 pour la collection br3 etc…) à chaque collection de boutons radios et forcer le coche de cette occurence à l’ouverture du document par un script ad’oc.
    Si j’ai bien compris, la problèmatique serait:
    si on coche un bouton, on ne pourra en cocher qu’un second et pas deux ?
    Ou, si deux boutons sont cochés, le dernier ne pourra pas l’être?

    Attention, je donne des solutions rapides (disons assez rapides) avec AcroForm, avec LiveCycle Designer il faut être patient car je travaille désormais de préférence sur Mac

    en réponse à : Basculer d’une page à l’autre (affichage). – RÉSOLU #51309
    alex
    Participant

    Pour lancer un script à l’ouverture d’une page, afficher les vignettes des pages, clic droit sur la vignette de page:
    Propriétés de la page> Onglet Actions>Lancer un script JavaScript>Action Ouverture de page et là coller dans notre cas :

    Ouverture();
    Qui va lancer ce script.

    Ci-joint la même chose avec les boutons Pause et Restart…

    [attachment deleted by admin]

    en réponse à : Basculer d’une page à l’autre (affichage). – RÉSOLU #51307
    alex
    Participant

    Il manquait l’action de lancement du script Ouverture() lors de l’ouverture de la page 1.
    Les champs de texte et les boutons sont inutiles, je les ai supprimés.
    J’espère que ça ne va pas ralentir le TGV que je prends ce soir.
    Bon week-end!

    [attachment deleted by admin]

    en réponse à : Basculer d’une page à l’autre (affichage). – RÉSOLU #51304
    alex
    Participant

    Ci-joint la version automatique sur un nombre de pages quelconque…
    La version avec un bouton “Démarrer défilement” et un bouton “STOP défilement” sera disponible sous peu.

    [attachment deleted by admin]

    en réponse à : Basculer d’une page à l’autre (affichage). – RÉSOLU #51302
    alex
    Participant

    Je vais donc généraliser mon script pour faire défiler N pages.
    Il y a deux scripts :
    -le premier est déclenché par l’ouverture de la première page:

    Ouverture()
    Nota:c’est dans ce script que l’on peut choisir la fréquence d’affichage qui n’est pas obligatoirement de 5 sec.
    -le second est automatiquement lancé à intervalles fixes par le timer:

    CommuterLaPage()
    C’est ce script que je dois modifier.
    Le script StopTout() n’est utile que pour arrêter le timer.
    Ces scripts sont placés au niveau du document (Voir maquette). On y accède de manière différente selon que l’on utilise Acrobat PRO X ou les versions antérieures 7,8,9. Inutile de vous précipiter pour acheter la version X si vous avez la 8 ou la 9…

    en réponse à : Comment cumuler plusieurs conditions (AND & OR) ? – RÉSOLU #51288
    alex
    Participant

    Ci dessous, quelque chose qui s’approche un peu plus du JavaScript et des objets d’Acrobat pour le bouton Go:

    if ((this.getField(“Source”).value==1|this.getField(“Source”).value==3)&this.getField(“Telephone”).value ==””)
    {
    app.alert(“Le champ N° de téléphone du destinataire est obligatoire.rSelon le choix du mode d’expédition demandé, merci de cliquer OK et le préciser, svp”,1)
    }
    else
    {
    this.print();
    }

    Je  ne suis pas sûr de la logique combinatoire.
    J’ai rajouté le champ Telephone qui est requis.
    Il faut aussi s’assurer que le contenu du champ Telephone est bien un numéro de téléphone en testant son format.

    Par ailleurs il faut passer les caractères accentués en unicode sous peine de se faire incendier par les utilisateurs de Mac dont Merlin!
    é devient u00E9
    N° devient Nu0080

    Attention à la casse ! En JavaScript this.getfield() n’est pas équivalent à this.getField()

    Retour de l’exemple à méditer ci-joint.
    Un peu de persévérance, ça viendra !

    [attachment deleted by admin]

    en réponse à : Multiplier des pages dans un PDF. – RÉSOLU #51314
    alex
    Participant

    Mais pour ce qui est de l’automatisation dans Acrobat… Peut-être qu’avec un JavaScript…?

    Oui, il est est possible d’automatiser la réplication de’une page ou d’un groupe de pages à partir d’un script placé au niveau de l’application Acrobat PRO de préférence à un batch.
    J’ai déjà donné un exemple sur ce site lors de l’illustration de la duplication de tickets qui a du faire pas mal d’heureux vu le nombre de téléchargements!

    http://www.abracadabrapdf.net/forum/index.php?topic=1207.msg5270#msg5270

    en réponse à : Erreur javaScript #51273
    alex
    Participant

    1-en respectant la casse sur:
    event.willCommit
    2-en vérifiant que la case à cocher Onglet Options>”Valider la valeur sélectionnée immédiatement” est cochée
    et que le script est bien placé dans Onglet Format>Catégorie de format “Personnalisée”, Script de touches personnalisé.
    Il se pourrait que ça marche!
    Voir maquette.

    [attachment deleted by admin]

    en réponse à : Basculer d’une page à l’autre (affichage). – RÉSOLU #51296
    alex
    Participant

    Chaque ouverture de la page 1 relance le chrono:
    run=app.setInterval(“CommuterLaPage()”,1000/frequenceCalcul);
    Si on veut travailler sur le document sans être incommodé par l’exécution du script CommuterLaPage() on peut l’arrêter par StopTout():
    app.clearInterval(run)
    Question de confort, c’est tout.

    alex
    Participant

    En ce qui concerne les vidéos incorporées ou non au pdf, on peut partiellement agir sur les paramètres d’affichage (Rendition).
    Ces paramètres sont accessibles via JavaScript, il est donc possible de les fixer.
    Pour voir quels sont les paramètres concernés, cliquer sur le bouton “Modifier le rendu” et parcourir les onglets.

    en réponse à : Basculer d’une page à l’autre (affichage). – RÉSOLU #51294
    alex
    Participant

    Une solution pour ceux que le code .js intéresse…
    Maquette fonctionnelle jointe.
    A l’ouverture du document sur la première page, on lance le script Ouverture():

    function Ouverture()
    {
    console.clear();
    console.println(“Start timer”)
    //Durée de chaque période d’affichage en secondes
    periode=5;
    //Horloge à la fréquence frequenceCalcul Hz
    frequenceCalcul=4;
    document=this.event.target;
    timer=0;
    run=app.setInterval(“CommuterLaPage()”,1000/frequenceCalcul);
    }
    timer est un chronomètre qui va mesurer le temps écoulé depuis l’ouverture de la première page.
    Il ne faut pas demander des fréquences de calcul trop grandes ni espérer obtenir une chronomètre de précision!
    A chaque cycle on lance le script CommuterLaPage():

    function CommuterLaPage()
    {
    //calcul temps écoulé à partir de l’ouverture de la page 1
    timer=timer+1/frequenceCalcul;
    console.println(“timer=”+timer);
    if(timer>=periode&document.pageNum==0)
    {
    document.pageNum=1;
    console.println(“Affichage page 2.”)
    }
    if(timer>=2*periode&document.pageNum==1)
    {
    document.pageNum=0;
    console.println(“Affichage page 1.”)
    }
    }
    Le script StopTout(), lançé par le bouton “Ours Pompom”, arrête le chronomètre tant qu’on ne réouvre pas la page 1.
    function StopTout()
    {
    reponse=app.alert(“Arru00EAter le timer?”,2,2)
    if(reponse==4)
    {
    app.clearInterval(run);
    }
    }

    Tout ça pour afficher une page sur deux à période à peu près constante.
    Ouvrir la console pour voir le fonctionnement.

    [attachment deleted by admin]

    alex
    Participant

    La définition de ton path est probablement incorrecte! Si tes documents se trouvent dans le même répertoire, on peut écrire un petit script qui le fait pour nous… et il ne reste plus qu’à spécifier le nom des fichiers!

    en réponse à : Erreur javaScript #51271
    alex
    Participant

    1-Remplacer 8501RT75 par x8501RT75
    Cette syntaxe rejette les chaînes commençant par des chiffres.
    2-Remplacer this.getfield par this.getField
    3-Remplacer  serie:”VF100000000000001″, par serie1:”VF100000000000001″,
    4-Il vaut mieux prévoir un remplissage automatique du menu déroulant et lui associer des tables.
    Où est le script d’origine, (j’ai des doutes sur son bon fonctionnement…) ?

    alex
    Participant

    Et ce n’est pas la première fois qu’on en parle ici !
    Bonne année à tous les JavaScripteurs Acrobat !
    Bonne année à tous.

    alex
    Participant

    A propos d’app.opendoc()…
    A ma connaissance on peut toujours ouvrir un document .pdf par app.openDoc localement ou sur intranet si:
    1-le chemin complet est correctement spécifié.
    2-Le document cible est en disclosed true.

    Pour plus de détails voir:
    http://livedocs.adobe.com/acrobat_sdk/9/Acrobat9_HTMLHelp/wwhelp/wwhimpl/js/html/wwhelp.htm?&accessible=true

    alex
    Participant

    Menus hiérarchisés avec app.popUpMenuEx():
    Exemple avec app.popUpMenuEx, tiré de la notice ou à peu près:

    var Choix = app.popUpMenuEx
    (
    {cName: “Item1”, bMarked:true, bEnabled:false},
    {cName: “-“},
    {cName: “Item2”, oSubMenu:
    [ {cName: “Item2-Sousmenu1”},
    {
    cName: “Item2-Sousmenu2”,
    oSubMenu: {cName:”Item2-Sousmenu2-SousSousmenu1″, cReturn: “http://serveur/2”}
    }
    ]
    },
    {cName: “Item3”},
    {cName: “Item4”, bMarked:true, cReturn: “http://serveur/4”}
    )

    alex
    Participant

    Menus hiérarchisés avec app.popUpMenu():
    Pour obtenir un niveau n-1 dans la hiérarchie des sous-menus, il faut saisir les items comme suit (ici avec app.popUpMenu):

    aa=app.popUpMenu(“N1″,”-“,”N2”,[“N3″,”S1″,”S2″,”S3″,”S4”,[“S5”,[“SS1″,”SSS1″,”SSS2″,”SSS3″,”SSS4″,”SSS5″],”SS2”,[“SS3″,”ST1″,”ST2″,”ST3″,”ST4″,”ST5″],”SS3″,”SS4″]],”-“,”N10”)
    Même chose à priori, avec app.popUpMenuEx, ja’ai pas d’exemple sous la main…

    en réponse à : Zoom in, zoom out. – RÉSOLU #51235
    alex
    Participant

    Scribus est un outil intéressant, sans nul doute le plus abouti des outils de création de formulaires AcroForm pdf gratuits (quand on ne peut s’offrir le budget conséquent d’Acrobat PRO et ses mise à jour régulières…). Hélas, à ma connaissance, on ne peut activer les Reader Extensions et, pour moi, cette fonctionnalité reste essentielle.

    en réponse à : Zoom in, zoom out. – RÉSOLU #51233
    alex
    Participant

    Merci Merlin.

    en réponse à : Afficher/masquer des calques. – RÉSOLU #51229
    alex
    Participant

    Je réponds à la question initiale:
    1-Fonction associée à chaque bouton de calque (nom de calque identique au nom du bouton):
    GestionCalques()
    2-Fonction à placer au niveau du document:
    function GestionCalques()
    {
    console.clear();
    //Recherche des calques de la page courante…
    ocg=this.getOCGs(this.pageNum);
    indexCalque=0;
      while(indexCalque  {
      if(ocg[indexCalque].name==this.event.target.name)
      {
      //Activation ou désactivation du calque..si son nom est le même que celui du bouton
      ocg[indexCalque].state=!ocg[indexCalque].state;
      //logging sur la console avec un unicode pour faire plaisir à Merlin et aux Macusers
      console.println(“Activation du calque correspondant au bouton sollicitu00E9:r”+this.event.target.name);
      }
      indexCalque=indexCalque+1;
      }
    }
    Chaque pression d’un bouton affiche ou masque le calque correspondant.
    Si vous le jugez utile, je vous envoie une maquette avec
    -activation/désactivation de tous les calques;
    -activation/désactivation individuelle (script ci-dessus).

    Cordialement.

    en réponse à : Zoom in, zoom out. – RÉSOLU #51231
    alex
    Participant

    Vos scripts de boutons:

    //Pour le zoom in
    this.zoom=this.zoom*1.25;

    //Pour le zoom out
    this.zoom=this.zoom*0.75;

    J’ai déjà oublié la manière d’associer un script à un bouton sous Scribus mais on a déjà des exemples ici:
    http://www.abracadabrapdf.net/forum/index.php?topic=1246.0

    Sinon, je réinstallerai Scribus sur une machine rien que pour vous!

    Cordialement.

    en réponse à : app.launchurl("file:///V:/BONCDE.PDF") #51230
    alex
    Participant

    1-Pour moi, avec, app.launchURL(), et ce depuis la version 8.1, il y a obligation d’être en contexte privilégié.
    Voir documentation:
    JavaScript > JavaScript for Acrobat API Reference > JavaScript API > app > app methods > launchURL
    Le .pdf ferait-il exception?

    2-Il n’y a pas ici d’openFile() ou de var doc = document.open(“file.html”)!
    Certaines méthodes et propriétés valides dans le JavaScript HTML ne le sont plus dans en JavaCript Acrobat ou LiveCycle. Par exemple this.getField”MonChamp”).length n’est pas une propriété valide.
    Il faut donc utiliser app.openDoc().
    Il n’y a pas de restrictions d’usage pour app.openDoc(), donc pas d’obligation à travailler dans un contexte privilégié, sauf lorsque l’on souhaite ouvrir un document non-pdf et le convertir en .pdf (voir 4 pour usage en contexte privilégié). La mauvaise définition du path est la cause la plus fréquente de problèmes.
    voir documentation:
    http://livedocs.adobe.com/acrobat_sdk/9/Acrobat9_HTMLHelp/wwhelp/wwhimpl/js/html/wwhelp.htm?&accessible=true
    JavaScript > JavaScript for Acrobat API Reference > JavaScript API > app > app methods > openDoc

    3-Je pense qu’il faut éviter de travailler avec un éditeur de texte directement dans le “core” des documents .pdf. Il vaut mieux passer par les outils d’Acrobat dédiés au JavaScript parce qu’ils donnent un diagnostique immédiat des erreurs de syntaxe et nous assurent du respect des spécifications de format pdf, en particulier pour les documents interactifs. On peut associer un éditeur autre que celui d’Adobe assez indigent (Notepad++ sur Pc ou Eclipse sur Mac et Pc) que ce soit avec AcroForm (l’outil de création de formulaires d’Acrobat) ou sous LiveCycle Designer.

    4-Pour encapsuler une fonction, par exemple app.openDoc() dans une zone de privilège:
    Script de haut niveau (application Acrobat ou Adobe Reader)
    trustedcreationDoc=app.trustedFunction(function()
    {
    //Début des privilèges
    app.beginPriv();
    //ici tout ce qui n’est pas autorisé en contexte normal
    app.openDoc()
    /Fin des privilèges
    app.endPriv();
    })
    Script de bas niveau (document)
    trustedcreationDoc();

    Pour voir un exemple, reportez-vous à mon post de manipulation des calques.

    Cordialement.

    en réponse à : Vidéos embarquées et "Points de chapitre". – RÉSOLU #51225
    alex
    Participant

    Merci Merlin. C’est clair et précis.
    Il faut donc créer les points de chapitre avant import et seul le flash les prend en compte.
    Les inconditionnels de QuickTime n’ont pas d’autre choix…que la conversion en fv pour profiter des “Points de chapitre”.

    en réponse à : Livecycle designer besoin d’un petit coup de main. – RÉSOLU #51173
    alex
    Participant

    Voilà. Il manque quelques tests de validité du numéro, seul le principe de base est illustré ici.

    [attachment deleted by admin]

    en réponse à : Livecycle designer besoin d’un petit coup de main. – RÉSOLU #51172
    alex
    Participant

    Je vais vous répondre aujourd’hui, c’est assez simple avec AcroForm (sous Acrobat comme conseillé par Merlin).

    en réponse à : Transfert variables entre PDF #51202
    alex
    Participant

    Depuis la version 9, les données persistantes sont attachées au document qui les crée.

    Sûre de ces deux lignes?
              Typ = “button”;
            if (!this.getField(Nom).readOnly && Typ != “button”)
    Dans votre document, les nouveaux scripts de document (Load et Save) ne sont pas correctement intégrés.

    Je regarderai plus en détail votre problème la semaine prochaine.

    en réponse à : Transfert variables entre PDF #51200
    alex
    Participant

    Voir les fiches jointes.
    Ouvrez les simultanément dans Adobe Reader (mosaïque horizontale).
    Saisir des données dans les deux champs de saisie de la page A, pressez le bouton Ecrire: les données sont stockées comme variables globales.
    Cliquer sur la page B, pressez le bouton Lire, les données stockées sont lues.
    Même chose en partant de la page B ou de toute autre page identique.

    Pour plus de détails et comprendre, ouvrir les documents sous Acrobat et voir les deux scripts Lire() et Ecrire().
    Pour que les transferts fonctionnent, il faut qu’un évènement lance les scripts (ici les actions des boutons “Ecrire” et “Lire”).

    Nota:maquette réalisée avec un formulaire AcroForm destinée aux Reader 7,8,9,X.

    [attachment deleted by admin]

    en réponse à : Conserver l’affichage ou le masquage des calques avec Reader. #51193
    alex
    Participant

    Sur ce même principe qui consiste à stocker un code caché qui, relu à l’ouverture du document, définira sa présentation future , on peut  imaginer beaucoup d’autres applications. A vous d’en imaginer d’autres… Comme indiqué au début, je vous conseille d’ajouter un calque opaque qui interdira toute lecture à l’aide d’un viewer autre que Adobe Reader (tels qu’Aperçu sur Mac ou PDF Opener et autres couteaux suisses proposés sur le NET)….

    en réponse à : Conserver l’affichage ou le masquage des calques avec Reader. #51188
    alex
    Participant

    Oops!
    1-Le champ “Code” est un champ texte. L’élaboration du code et son remplissage se font automatiquement par sélection des calques.
    2-Les boutons de calque embarquent une simple ligne JavaScript :

    GestionCalques();
    Les boutons “Tout” et “Rien” embarquent une seule ligne de code:
    ToutRien();
    Le bouton “Masquer les boutons” embarque une seule ligne de code:
    MasquerBoutons();

    3-Les scripts des fonctions GestionCalques(), ToutRien(), Ouverture(), MasquerBoutons() complets sont situés au niveau document et appelés par les actions sur les boutons. Il ne faut pas les recopier dans les boutons!

    Explication suffisante?

    en réponse à : Conserver l’affichage ou le masquage des calques avec Reader. #51185
    alex
    Participant

    Procédure de création du document MASTER  (sous Acrobat 8 ou 9 de préférence)
    Document Acrobat d’une seule page contenant des calques.
    Boutons obligatoires:
    “Tout”,”Rien”,”Masquer les boutons” ainsi qu’un bouton par calque à manipuler.
    Champ obligatoire “Code” à placer dans un coin.

    Après création de votre MASTER:
    1-protégez-le en modification par mot de passe.
    2-Activez les fonctionnalités Reader Extensions pour les formulaires (NB:ne fonctionne pas avec Acrobat X, utiliser Acrobat 9)

    Procédure à suivre par l’opératrice: voir post ci-dessus.

    Fonction associée à chaque bouton de calque (nom de calque identique au nom du bouton):

    function GestionCalques()
    {
    console.clear();
    //Activation du calque…
    ocg=this.getOCGs(this.pageNum);
    indexCalque=0;
    while(indexCalque {
    if(ocg[indexCalque].name==this.event.target.name)
    {
    ocg[indexCalque].state=true;
    //app.alert(“Activation du calque correspondant au bouton sollicitu00E9:r”+this.event.target.name,3);
    }
    indexCalque=indexCalque+1;
    }
    //Analyse de la configuration des calques et élaboration du code.
    console.println(“Analyse de la configuration des “+indexCalque+” calques et u00E9laboration du code.”)
    ocg=this.getOCGs(this.pageNum);
    indexCalque=0;
    code=””;
    TexteAlerte=”Calques activu00E9s suite à ajout “”+this.event.target.name+”””;
    while(indexCalque {
    if(ocg[indexCalque].state)
    {
    TexteAlerte=TexteAlerte+”r*”+indexCalque+”-“+ocg[indexCalque].name;
    code=code+”1″;
    }
    else
    {
    code=code+”0″;
    }
    indexCalque=indexCalque+1;
    }
    if(this.getField(“Code”))
    {
    this.getField(“Code”).value=code;
    app.alert(TexteAlerte+”rCode de la configuration des calques:r””+this.getField(“Code”).valueAsString+””.”,3)
    }
    else
    {
    app.alert(“Le champ de code manque!rIl faut le créer…”,1)
    }
    //console.show();
    }

    Fonction associée aux deux boutons “Tout” et “Rien”:

    function ToutRien()
    {
    //Affichage ou masquage de tous les calques.
    console.clear();
    ocg=this.getOCGs(this.pageNum);
    if(this.event.target.name==”Tout”){statut=true;}else{statut=false;}
    indexCalque=0;
    code=””;
    while(indexCalque {
    ocg[indexCalque].state=statut;
    if(statut){code=code+”1″;}else{code=code+”0″;};
    indexCalque=indexCalque+1;
    }
    this.getField(“Code”).value=code;
    console.println(“Code: “+this.getField(“Code”).value+”.”);
    console.println(“Les “+indexCalque+” calques sont de statut “+statut+”.”);
    }

    Fonction associée au bouton “Masquer les boutons”:

    function MasquerBoutons()
    {
    statut=false;
    reponse=app.alert(“Masquer les boutons?rAttention, cette opération est irréversible.rAssurez-vous de conserver un original de ce document.”,2,2)
    if(reponse==4){statut=true;}
    indexChamp=0;
    while(indexChamp {
    nom=this.getNthFieldName(indexChamp);
    ff=this.getField(nom);
    if(ff.type==”button”){ff.hidden=statut;}
    indexChamp=indexChamp+1;
    }
    this.getField(“Code”).hidden=statut;
    this.getField(“Code”).readonly=true;
    }

    Fonction d’ouverture de la page du document:

    function Ouverture()
    {

    //Activation des calques en fonction du code
    ocg=this.getOCGs(this.pageNum);
    code=this.getField(“Code”).valueAsString;
    indexCalque=0;
    while(indexCalque {
    statut=code.substring(indexCalque,(indexCalque+1));
    console.println(“Rang “+indexCalque+” statut:”+statut)
    if(statut==1)
    {
    ocg[indexCalque].state=true;
    }
    else
    {
    ocg[indexCalque].state=false;
    }
    indexCalque=indexCalque+1;
    }
    }

    Extension de ce système à plusieurs pages, gestion interactive des calques par les destinataires…. Tout est possible! 

    en réponse à : Conserver l’affichage ou le masquage des calques avec Reader. #51183
    alex
    Participant

    Je cherche un moyen de vous mettre à disposition le document sous sa forme utilisable sous Adobe Reader (8,9,X), les fonctionnalités du Reader étant étendues.
    Le bouton “Tout” affiche tous les calques.
    Le bouton “Rien” les masque.
    Les calques sont verrouillés et ne peuvent être manipulés à la main.
    Les autres boutons permettent de sélectionner les calques à afficher. Le système fonctionne quelque soit le nombre de calques, il suffira de recopier ces boutons en leur attribuant le nom du calque.
    Le bouton Masquer les boutons fait disparaître les boutons et le champ de code. Ainsi, le document envoyé sera propre.

    La procédure:
    1-L’opératrice, à partir du MASTER joint, choisit les calques du client.
    Quand le document est prêt, elle masque boutons (pression du bouton rouge).
    Elle enregistre son document (sous un autre nom! Sinon, il faut reprendre l’original) et l’envoie.

    2-Le destinataire l’ouvre sous Adobe Reader, dans ses Préférences (Edition>Préférences>JavaScript) les cases à cocher “Activer Acrobat JavaScript” et “Autoriser les privilèges d’exécution JavaScript d’éléments de menu” sont cochées.
    Seuls les calques présélectionnés apparaissent.

    Explications détaillées et code complet pour bientôt.

    en réponse à : Conserver l’affichage ou le masquage des calques avec Reader. #51182
    alex
    Participant

    Salut Merlin!
    Oui, j’ai chargé ce fichier et je vais faire un essai… d’ici lundi j’espère.
    A+

    en réponse à : Conserver l’affichage ou le masquage des calques avec Reader. #51180
    alex
    Participant

    On pourrait peut-être résoudre ça par un petit JavaScript sur le principe suivant:
    Lors de l’enregistrement du document, un champ caché embarquerait un code correspondant à la combinaison des calques à afficher.
    Lors de l’ouverture du document, un script d’ouverture activerait les calques à afficher et désactiverait les autres en fonction de ce code.
    De plus, pour éviter la consultation pirate avec d’autres “viewers” pdf tels que Aperçu sur Mac, on ajouterait un calque opaque activé par défaut et désactivé par le script d’ouverture. En effet la plupart des “viewers” ignorent les objets fields et il ne faut pas espérer les utiliser comme masques.

    Je propose tout ça au conditionnel, ça demande à être testé, si ça vous intéresse je fais une maquette…

    en réponse à : LiveCycle designer, replication automatique d’un champ texte ? #51159
    alex
    Participant

    Pour la question 1:
    Pour passer une valeur d’un champ à un autre, sous Lc Designer, on aura un script de la forme suivante:

    formulaire1.#pageSet[0].Page2.Bouton2::click – (JavaScript, client)
    xfa.form.formulaire1.Page2.Texte2.rawValue=xfa.form.formulaire1.Page1.Texte1.rawValue

    Ici, l’évènement qui provoque le transfert de contenu est un click sur le Bouton2 de la Page2, mais ça peut être autre chose.

    Pour la question 2:
    Solution à minima: on peut utiliser une variable globale invisible pour l’utilisateur qui passera les champs de saisie en lecture seule à l’ouverture suivante et affichera une alerte. Evidemment, il suffit de changer de machine pour contourner cette protection mais il faut le savoir.
    La solution sûre: au lieu d’envoyer le formulaire en pièce jointe, on peut envoyer directement les données seules vers un serveur qui les collectera et retournera le formulaire rempli et protégé. Là, c’est imparable mais il faut maîtriser pas mal de techniques et de langages.

    en réponse à : Mon formulaire PDF rempli arrive vide après envoi par courriel. #51088
    alex
    Participant

    Fais un essai, ouvres par exemple listeslieesAcroform, (formulaire créé sous Acrobat) sous LC Designer….Et rien.

    alex
    Participant

    Il s’agit sans doute de l’ajout automatique de lignes dans un tableau  de saisie ?
    Sous LiveCycle Designer, il est possible de concevoir des formulaires qui s’adaptent au besoin des utilisateurs ou en fonction d’autres critères logiques.
    Ce problème est-il résolu?

    alex
    Participant

    Les formulaires développés sous AcroForm (directement sous Acrobat PRO sur Mac ou PC) ne peuvent être repris que sous Acrobat PRO.
    Les formulaires développés sous LiveCycle Designer (sur PC uniquement) ne peuvent être repris que sous LiveCycle Designer.Si vous ouvrez un formulaire LiveCycle sous Acrobat vous remarquerez que les outils de création de formulaire AcroForm sont désactivés (le document n’est donc pas protégé).
    Il n’y a pas de moyen simple de passer de l’un à l’autre, les formats et les langages de script diffèrent.
    Pour cette raison, je vous ai proposé deux maquettes de menus déroulants inter-dépendants.
    J’ai déjà expliqué les avantages et les inconvénients des deux types de formulaires sur ce forum.]

    en réponse à : Mon formulaire PDF rempli arrive vide après envoi par courriel. #51086
    alex
    Participant

    Les formulaires développés sous AcroForm (directement sous Acrobat PRO sur Mac ou PC) ne peuvent être repris que sous Acrobat PRO.
    Les formulaires développés sous LiveCycle Designer (sur PC uniquement) ne peuvent être repris que sous LiveCycle Designer.Si vous ouvrez un formulaire LiveCycle sous Acrobat vous remarquerez que les outils de création de formulaire AcroForm sont désactivés (le document n’est donc pas protégé).
    Il n’y a pas de moyen simple de passer de l’un à l’autre, les formats et les langages de script diffèrent.
    Pour cette raison, je vous ai proposé deux maquettes de menus déroulants inter-dépendants.
    J’ai déjà expliqué les avantages et les inconvénients des deux types de formulaires sur ce forum.]

    en réponse à : Mon formulaire PDF rempli arrive vide après envoi par courriel. #51082
    alex
    Participant

    Oui, très bien les Unicodes, j’avais oublié qu’on était chez les “Macintoshphiles”. J’ai d’ailleurs remarqué que les développeurs (Flex ou Flash Designer) étaient presque tous sur Mac. Au passage, on peut remarquer qu’Adobe a pris soin d’offrir (pour plus de 200€ quand même) un Flash Designer 4 fonctionnant sur Mac alors que nombre d’entre vous attendent toujours LiveCycle Designer sur Mac….
    Merci Merlin.

    en réponse à : Mon formulaire PDF rempli arrive vide après envoi par courriel. #51080
    alex
    Participant

    Effectivement, pour les formulaires Acrobat (AcroForm), il faut effectivement utiliser cette variante si le formulaire contient des listes déroulantes.
    Pour les formulaires LiveCycleDesigner, le problème ne se pose pas, vous pouvez vous appuyer sur mon exemple…

    alex
    Participant

    Oui, on peut supprimer le champ d’information, à condition de supprimer aussi les lignes le concernant (avec Texte1).
    La partie du script destinée à construire les tableaux peut être effectuée en initialisation (ouverture du document).
    Je fournirai une version qui illustre ça dès que possible, pas demain.
    Bonne soirée.

    alex
    Participant

    Je me lance, on aurait:

    Code:
    …..
    Fille=new Array();
    x=0;
    while(x{
    Fille[x]=new Array();
    x=x+1;
    }
    …..

    Un moyen d’avoir une police plus grosse comme en HTML?

    alex
    Participant

    Attention: Acrobat PRO et LiveCycle Designer sur Pc uniquement.
    Voici la solution complète… On peut voir le résultat sur Adobe Reader Mac ou Pc.

    Dans la maquette jointe :
    1-Un script d’ouverture efface le contenu des menus déroulants.
    Au passage, notez le déclencheur initialize et le placement des deux parties du script pour utiliser le champ d’information Texte1

    formulaire1::initialize – (JavaScript, client)
    console.clear();
    xfa.host.resetData();
    console.println(“Informations:”);
    TexteAlerte=”Reset des menus déroulants en ouverture de document.”;
    console.println(TexteAlerte);

    formulaire1.#pageSet[0].Page1.Texte1::initialize – (JavaScript, client)
    xfa.form.formulaire1.Page1.Texte1.rawValue=TexteAlerte;

    2-Un script associé à un bouton élabore les tables de données et remplit le menu déroulant Mère. On aurait pu élaborer les tables à l’initialisation (c’est plus élégant).
    Au passage notez la manière classique de créer un tableau à deux dimensions:

    …..
    Fille=new Array();
    x=0;
    while(x{
    Fille[x]=new Array();
    x=x+1;
    }
    …..
    NB:j’ai mis des [ et des ] car l’éditeur du forum me refuse ici les crochets!

    3-Un script lançé lors de la sélection d’un item Mère remplit le menu déroulant Fille.
    Il vaut mieux opter pour le déclencheur exit :
    formulaire1.#pageSet[0].Page1.Liste_M::exit – (JavaScript, client)

    Merci d’avoir attendu!

    [attachment deleted by admin]

    alex
    Participant

    Attention: Acrobat PRO et LiveCycle Designer sur Pc uniquement.
    Voici la première partie de la réponse…
    La maquette jointe montre :
    1-comment remplir les items d’une liste déroulante à partir d’un tableau après tri des données.
    2-Comment effacer les items de cette liste.
    Par ailleurs on voit comment faire pour atteindre les objets du formulaire et afficher des alertes (deux méthodes).
    Pour voir les scripts, il faut bien sûr travailler sur Pc et ouvrir LiveCycle Designer à partir d’Acrobat PRO: Formulaires>Modifier le formulaire dans Designer, puis cliquer su l’onglet Gabarits et chaque bouton lançant un script JavaScript client.
    Pour ne pas ouvrir la console lors de l’exécution des scripts, passer Console.show() en commentaire.
    Pour comparer les scripts JavaScript d’Acrobat (AcroForm) et de Designer se référer à:
    LiveCycleDesigner ES2 Scripting Basics
    où il y a un tableau de conversion de scripts très utile.

    Je n’oublie pas, Pepitos,  l’objectif de la liste liée, et vu le nombre de téléchargements de l’exemple sous Acrobat, il y a un record à battre!

    Nota: non réalisble avec Scribus.

    [attachment deleted by admin]

    alex
    Participant

    J’ai comme l’impression que le script sous Adobe Designer (pardon, Adobe LiveCycle Designer) est attendue… avec insistance?
    Hum.
    Il va falloir:
    1-Que je me résigne à quitter ce Mac pour retourner à mon PC (j’espère qu’il n’y aura pas trop de mises à jour à faire avant de travailler) …
    2-Que mes clients soient encore en vacances… Et les autres pas trop pressés.
    3-Que je me retrouve dans Designer (hiérarchie des objets pas intuitive même pour moi qui aime bien bricoler les codes).
    Ces conditions réunies, ça devrait être fait début septembre (seconde semaine), désolé, je ne peux faire mieux.

    En attendant, suite à un petit échange avec Merlin,  je lui ai envoyé pour vérification une version du script qui préserve les valeurs d’export des menus déroulants lors des exports de données, toujours destinée aux formulaires créés sous Acrobat (AcroForm), ainsi qu’une maquette qu’il mettra en ligne si tout va bien.

    en réponse à : JS -> liste déroute + cadre texte. – RÉSOLU #51004
    alex
    Participant

    Voilà, le script est bien exécuté à l’ouverture du document. J’ai supprimé les images et testé avec Acrobat et Adobe Reader.

    [attachment deleted by admin]

    en réponse à : JS -> liste déroute + cadre texte. – RÉSOLU #51003
    alex
    Participant

    J’ai exporté mes fichiers .sla sous Acrobat et vérifié à chaque fois leur fonctionnement et si les scripts étaient bien à leur place.
    Effectivement le zip dégrade le fichier .sla (disparition des icônes). Je vais tester l’association d’un script js à l’ouverture.

    en réponse à : JS -> liste déroute + cadre texte. – RÉSOLU #51001
    alex
    Participant

    Sur le fichier Scribus joint, j’ai corrigé une erreur (script manquant) et utilisé un script de document (Edition>JavaScripts>). N’ayant pas trouvé le moyen d’exécuter le script Ouverture() automatiquement à l’ouverture du document, il faut donc cliquer sur le bouton en haut à gauche.

    [attachment deleted by admin]

    en réponse à : JS -> liste déroute + cadre texte. – RÉSOLU #51000
    alex
    Participant

    Après recherches, je ne sais toujours pas comment lancer un scrip d’ouverture avec Scribus. J’ai crée un script de document baptisé Ouverture() qui intégre les fonctionnalités du feu bouton “Reset”. Dans cette démo je le lance avec le bouton Afficher/Masquer.
    Pour que ça marche il suffit donc de lancer le programme Ouverture();
    Question: sous Scribus, peut-on lancer un script en ouverture de page comme avec Acrobat? Si oui où se trouve l’accès?

    [attachment deleted by admin]

    en réponse à : JS -> liste déroute + cadre texte. – RÉSOLU #50999
    alex
    Participant

    Il suffit de recopier le script du bouton “Reset” et de le placer en ouverture de document.
    Ce script remplit le menu déroulant et précise les textes associés, il est bien sûr obligatoire! Par contre, il suffit de l’éxécuter une seule fois.

    en réponse à : JS -> liste déroute + cadre texte. – RÉSOLU #50997
    alex
    Participant

    Voilà le fichier Scribus promis.
    Le script asspocié au bouton “Reset” remplit la liste déroulante baptisée Menu, ainsi qu’une table (textes) des textes associés aux items. On peut aussi le faire à l’ouverture du document.
    Lors de la sélection d’un item, le texte associé apparaît dans le champ texte baptisé “Texte”.
    L’évènement qui lance le script à partir du sélecteur “Menu” est: Format>Sur mesure>Frappe.

    [attachment deleted by admin]

    en réponse à : JS -> liste déroute + cadre texte. – RÉSOLU #50995
    alex
    Participant

    Avec Scribus, il est effectivement possible d’insérer des scripts JavaScript et d’ajouter de l’interactivité au document pdf que l’on génère.
    Apparemment, on retrouve bien les propriétés des champs d’Acrobat, je vais donc proposer un fichier Scribus .sla avec un script de démo (pour affichage d’un texte associé à la sélection d’un item de menu déroulant) et le fichier .pdf généré par Scribus.
    Par contre je n’arrive pas à préremplir les données de champ. En particulier, pour le menu déroulant je ne peux pas prédéfinir les items à la main comme sous Acrobat. En conséquence je ferai ça par script aussi, mais si quelqu’un sait le faire, je suis preneur.
    Maquette demain matin.

    en réponse à : JS -> liste déroute + cadre texte. – RÉSOLU #50994
    alex
    Participant

    Pas de problème avec Acrobat PRO et un script JavaScript…. Mais je ne connais pas Scribus, je vais jeter un oeil…et je reviens de suite.

    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]

Affichage de 99 réponses de 397 à 495 (sur un total de 564)