Donnez vie à vos documents numériques !
 

maxwyss

Toutes mes réponses sur les forums

Affichage de 95 réponses de 1 à 95 (sur un total de 95)
  • Auteur
    Réponses
  • en réponse à : Splitter / Découper / Scinder du PDF #57395
    maxwyss
    Membre

    @cri-cri: Cette solution serait vraiment une solution très haut-de-gamme.

    en réponse à : Splitter / Découper / Scinder du PDF #57391
    maxwyss
    Membre

    Bonjour,

    Un outil qui peut faire ça se laisse bien faire avec Acrobat JavaScript. En fait, dans le passé, j’ai effectué des choses similaires.

    Le tout est un peu trop pour ce forum, mais si vous décidez que “acheter” surpasse “faire”, n’hesitez pas de me contacter par message privé, pour discuter les exigeances et les frais.

    HTH

    Max Wyss.

    en réponse à : Sauts automatiques de champs impossibles. – RÉSOLU #55041
    maxwyss
    Membre

    Je sais que j’écris avec l’accent étranger…

    > En revanche, je n’ai pas compris le message de maxwyss :
    > – comment définir la fonction AutoTab ?
    > Je pensais pourtant lui avoir donné les bons paramètres

    Pour qu’on puisse appeler une fonction, celle-ci doit être definie. La question est, ou est-elle definie, et comment. AutoTab n’est pas une fonction qui fait partie de Acrobat JavaScript, et elle n’est egalement pas incluse dans le fichier de définitions JavaScript qui vient avec tous les installations Acrobat/Reader (ce fichier est pre-compilé, et pas documenté).

    Donc, sans savoir comment et ou cette fonction AutoTab est definie, il est impossible de savoir les arguments/paramètres.

    > s’il faut utiliser des champs avec des boites, utilisez des champs peigne : je n’ai pas vu cette  possibilité de fabriquer des champs peigne.

    L’option “champ de peigne” est selectionnée dans le dialogue des propriétés des champs, dans le secteur Options

    HTH

    Max Wyss.

    maxwyss
    Membre

    > Ca fonctionne, que le formulaire XFA soit activé ou non.

    Mais pour enregistrer : il faut ces droits. Et quelle est la valeur d’avoir une image incorporée, mais de ne pas être capable d’enregistrer…

    maxwyss
    Membre

    Je suis sur qu’il y existe une petite application Windows qui fait la conversion; je ne suis pas ici le mieux placé.

    Concernant LiveCycle Designer, il faut être attentif et très bien verifier si les Droits Additionnelles d’Acrobat Pro sont suffisant pour importation des images avec Reader (les formulaires XFA, produit par LiveCycle Designer demandent ces droits, même avec Reader XI).

    HTH.

    Max Wyss.

    en réponse à : Sauts automatiques de champs impossibles. – RÉSOLU #55038
    maxwyss
    Membre

    La raison primaire pourquoi la continutation automatique ne fonctionne pas est parce-que la fonction AutoTab() qui est demandé, n’est pas definie. C’est si simple…

    En outre, les commentaires de Merlin sont bien fait; s’il faut utiliser des champs avec des boites, utilisez des champs peigne.

    HTH

    Max Wyss.

    maxwyss
    Membre

    Une possibilité serait de convertir les images avant de les importer. Il y a des outils simples qui permetteront cette operation; sur Mac, Preview.app est le choix evident, et on pourrait même créer un droplet qui simplifie les choses même plus.

    HTH

    Max Wyss.

    maxwyss
    Membre

    Par contre, ce qui est possible, c’est de créer un champ texte contenant le texte de l’info bulle, de le montrer lors de l’activation du champ, et de le masquer lors de la désactivation du champ (onFocus et onBlur).

    HTH

    Max Wyss.

    en réponse à : Recadrage et rognage multiple. – RÉSOLU #54919
    maxwyss
    Membre

    L’implémentation des cadres dans Acrobat est telle que l’encadrage est non-détruisant, veut dire que rien est supprimé quand on met les cadres.

    Mais il y a une possibilité qui est détruisante, et ne laisse que l’image cadrée. On fait le cadrage manuellement, et puis on lit les coordonnées de la Cropbox et on change la Mediabox avec ces coordonnées. Le resultat n’a que les dimensions du cadre. Ensuite, si on veut créer une feuille A4, on peut remettre les coordonnées de la Mediabox.

    On va répéter celà avec tout les petits images du document scanné.

    HTH

    Max Wyss.

    en réponse à : Script Biffure par lot. – RÉSOLU #54882
    maxwyss
    Membre

    Une autre possibilté à evaluer seraient les outils de Appligent (http://www.appligent.com) pour la “Redaction” (terme anglais pour la biffure). Ces outils sont toujours considerés comme la référence dans ce domaine.

    HTH

    Max Wyss.

    en réponse à : Outils PDF serveur. – RÉPONDU #54748
    maxwyss
    Membre

    Pour supporter la réponse de Merlin, cela vaut la peine de parler de Callas et Enfocus. Les deux companies ont des produits serveur qui sont utilisés pour manipuler des fichiers PDF pour la production. En fait, Callas est à l’origine des fonctions Prépresse dans Acrobat.

    Si les produits de base ne conviennent pas à cent pourcent, il est toujours possible de chercher pour une adaption specifique.

    Si qualité est le plus important (et non pas performance quantitative), on pourrait egalement considérer le PQF PrintOptimizer (qui utilise Acrobat comme moteur); contactez-moi in privé pour plus d’informations.

    HTH.

    Max Wyss.

    maxwyss
    Membre

    Il y a une méthode un peu crue qui pourrait fonctionner. Le truc serait de incorporer une page vide entre toutes les pages. Puis on a un script “partir de la page” sur chaque page “active” qui va retourner vers la même page. Les pages intermédiaires sont nécessaires pour proprement separer ces pages.

    S’il est “légal” de partir d’une page, on peut metre un drapeau/marqueur qui est evalué par le script de sortie de page. Ce drapeau peut être mis par la commande de menu, par exemple.

    HTH

    Max Wyss.

    maxwyss
    Membre

    La procédure normale est de créer un petit fichier FDF contenant les données plus le lien au formulaire de base, et envoyer ce FDF. Un navigateur configuré proprement, avec Adobe Reader installé, peut interpréter cela et récupérer le formulaire de base et le remplir.

    Pour un système plus stable et performant, il faudrait considérer une application qui remplit les formulaires sur le serveur et envoyer le document personalisé. Un exemple pour un tel logiciel est FDFMerge par Appligent.

    HTH

    Max Wyss.

    en réponse à : Modèle de page. – RÉPONDU #54625
    maxwyss
    Membre

    Cest donc la solution de créer et supprimer des pages avec retention des données.

    Une autre possibilité dépend du nombre de champs sur les pages modèles et le nombre de pages en total. Il est possible de utiliser un autre mechanisme de dynamique, que est basé sur des champs en totalité. On place les pages individuelles dans des champs Button, et on place les champs actuels en dessus. Avec des fonctions show/hide, on peut afficher des pages individuelles. S’il y a une page répétante, on sauvegarde les données et on efface les champs sur la page. Après remplir ces nouveaux données, on les sauvegarde egalement, et on a un mechanisme do charcher les données de ces “pages virtuelles”.

    Un tel scénario fonctionne sous Reader (parce que on n’a plus besoin des pages modèles), et a été implementé dans le passé. Mais une discussion détaillée serait trop longue pour ce forum.

    HTH 

    Max Wyss.

    en réponse à : Modèle de page. – RÉPONDU #54623
    maxwyss
    Membre

    Il est possible de montrer et cacher les pages modèles en utilisant JavaScript.

    MAIS, ce n’est que possible dans Acrobat et non pas dans Reader.

    La commande est

    Code:
    this.getTemplate(“myTemplate”).hidden = false ;

    pour montrer, et

    Code:
    this.getTemplate(“myTemplate”).hidden = true ;

    pour cacher.

    Si on ne veut que presenter (et après ça fermer) une page de modèle sous Reader, il faut la créer et supprimer.

    HTH

    Max Wyss.

    en réponse à : Modèle de page. – RÉPONDU #54620
    maxwyss
    Membre

    Si on a ces préfixes “Pimodele.”, il faout modifer les calculations tels que les noms de champ sont corrects. Dans mon travail, je definis une variable “prefix” qui contient cette information. Pour une calculation specifique on peur l’extraire du nom du champ concerné (via event.target.name), comme dans:

    Code:
    var myprefix = event.target.name.substr(0,event.target.name.indexOf(“,”)) ;

    notez que ce n’a pas été verifié, et il pourrait être necessaire de modifier le second argument de substr pour assurer que le point est inclus.

    Acceder un champ sur la même page serait donc via

    Code:
    this.getField(myprefix + ““)

    Comme la page actuelle fait partie du prefix, il est donc possilbe de l’extraire, et de calculer le prefix pour une autre page.

    Ce modèle de traitement ne fonctionne que si on n’enlève aucune page. Si on doit enlever une page avant la premièe page créée d’un modèle, il faout sauvegarder les données, enlever tout les pages après la page supprimée, et regenerer le document.

    HTH

    Max Wyss.

    en réponse à : Supprimer une page à partir d’un bouton. – RÉPONDU #54600
    maxwyss
    Membre

    En fait, ce script fonctionne sour Reader…

    … à condition que la page a été créée depuis un modèle dans la même session Reader (donc le document doit être ouvert tout le temps depuis que la page a été “spawnée”.

    HTH

    Max Wyss

    en réponse à : Changer l’état d’un bouton. – RÉSOLU #54595
    maxwyss
    Membre

    Au sujet de readonly et readOnly…

    Pour des champs, c’est readonly, et je me ne souviens pas d’une version de le documentation que ça a été incorrect.

    Pour des Annotations (commentaires etc.), c’est readOnly, et ça a été correct dans la documentation si je me souviens correctement.

    La conclusion est qu’il n’y avait pas de coordination entre les groupes de programmateurs pour ces morceaux du logiciel…

    HTH

    Max Wyss.

    en réponse à : Modifier le texte des bulles dans des pages BD. – #54584
    maxwyss
    Membre

    La question est si ce sont les fichiers traités par toi qui vont être utilisés pour la publication (ou si ton travail va être procédé ultérieurement).

    Dans le deuxième scénario, tu pourrais utiliser Acrobat (Pro ou Standard), ou même Reader XI pour additionner la traduction sous forme de commentaires (qui vont être procédés).

    Dans le premier scénario, qui est recommandé, comme déjà dit : je te conseille de demander pour les fichiers originaux puis de travailler sur ces fichiers.
    En dépendance de la langue originale, il peut devenir necessaire de modifier les dimensions ou la forme des bulles.

    HTH

    Max Wyss.

    maxwyss
    Membre

    Le problème avec l’éditeur externe sur Mac est qu’il faut terminer l’application de l’éditeur pour que les changements soient pris en compte par Acrobat.

    Je me souviens que l’utilisation d’un éditeur externe n’était pas possible sur Mac mais seulement sur Windows. Et (opinion personnelle), il semble qu’on a simplement essayé de porter la logique Windows. Donc les signaux de fermeture de fenêtre sous Windows ont leur équivalent Mac seulement comme signal de termination de procès.

    La conséquence est que je développe avec BBEdit, mais j’utilise TextWrangler comme éditeur externe pour Acrobat. Et ça a fonctionné pour moi depuis Acrobat 6 ou 7; je ne me souviens plus exactement.

    HTH

    Max Wyss.

    en réponse à : Mettre en gras du texte en script. – RÉPONDU #54556
    maxwyss
    Membre

    Metrre en gras veut dire dans le contexte des champs “simples” choisir une police “bold”. La propriété de l’objet Champ utilisée est textFont. La syntaxe et utilisation est expliqué dans la documentation Acrobat JavaScript.

    Pour un champ du type richText, tous les pièces avec les mêmes popriétés font partie d’un array des objects Span.

    HTH

    Max Wyss.

    maxwyss
    Membre

    Je ne peux pas le vérifier, mais je crois que si les dialogues et alertes sont appelés par une fonction privilégiée (trustedFunction), les dialogues aparaitront sans ces textes. Mais pour éxécuter une telle fonction, il faudrait l’installation d’un script au niveau application sur la machine de l’utilisateur.

    HTH

    Max Wyss.

    en réponse à : Alimenter un agenda outlook via un formulaire. – #54459
    maxwyss
    Membre

    Je n’ai pas d’exemple pour le format ics, mais j’ai créé des fichers XML, FDF, .tab, AppleScript par cette methode.

    L’idée est de concatener les contenus des champs (avec des éléments fixes) puis d’écrire le tout dans un champ multiligne. Ensuite on va créer un Data Object du contenu de ce champ et on exporte ce Data Object comme fichier.

    PS : concernant mon code dans l’exemple, il y a une erreur (qui peut être découverte facilement; au lieu d’un “n”, il faudrait un “m”). Édition par Lionel : pour celles et ceux qui feront une recherche et tomberont dessus, le code original est modifié.

    HTH

    Max Wyss.

    maxwyss
    Membre

    C’est bien possible que Windows n’etait pas encore prêt.

    Mais aussi Acrobat prend son temps pour ourvrir un fichier la première fois après le démarrage. Pour donner l’allure que Acrobat s’ouvre rapidement, presque tous les modules sont chargé quand il en faut. Puisque XFA (sous le manteau de PDF) demande plusieurs modules importants pour ouvrir, ça prend son temps. En outre, ces modules pourraient demander plus de mémoire, et pour cela il est possible qu’un autre fichier Swap soit créé.

    HTH

    Max Wyss.

    en réponse à : Alimenter un agenda outlook via un formulaire. – #54457
    maxwyss
    Membre

    Il est possible de faire ça parce que le format .ics est un format texte structuré.

    Dans le PDF, on peut créer soit un champ multiligne, ou bien simplement une variable qui est produite liigne par ligne. Quand le contenu du fichier .ics est assemblé, on va créer un Data Object et puis on va exporter ce Data Object. Par raison, de securité il n’est pas possible d’exporter ce Data Object avec un nom de fichier prédéfini en toute discrétion. Il faut spécifier le nom du fichier manuellement.

    Voici un modèle comment on va assembler ce fichier texte structuré:

    // nous avons egalement un champ “myField”
    var monics = “” ;
    monics += “ma première ligner” ;
    monics += “ma ” + this.getField(“myfield”).value + ” ligne” ;
    // etc

    HTH

    Max Wyss.

    PS : s’il y a assez d’interêt, je pourrais développer un outil qui ferait cela; contactez-moi en privé.

    en réponse à : Fusion de formulaires. – #54438
    maxwyss
    Membre

    Bonjour,

    La terminologie “Champ1#0” , “Champ1#1”, “Champ1#2”, etc. indique les occurrence de champ “Champ1”. Cela veut dire qu’il s’agit du même champ, qui existe en trois endroits dans le document. La documentation Acrobat JavaScript (qui fait partie du Acrobat SDK, à télécharger sur le site Adobe) explique cela avec ldes propriétés au niveau “field” (par example le nom du champ) et au niveau du “widget” (par example l’alignement du champ). Pour des propriétés du niveau “widget”, on fait la distinction dans JavaScript avec les suffices .0, .1, .2 etc.

    Maintenant, la valeur (value) d’un champ est au niveau “champ”. Ce que veut dire que si on fusionne les fichiers, le contenu des champs va être egalisé. Donc, si on veut composer plusieurs instances du fichier et garder les valeurs de champs différents, il faut prendre d’autres précautions. Ou il faut utiliser des outils adéquats (disponibles, par exemple, chez Appligent ou des PDF-Tools).

    HTH

    Max Wyss.

    maxwyss
    Membre

    Pour de telles quantités, et particulièrement si PDF-A est demandé, il faut des outils adéquats. Acrobat est trop lent, et “grâce” à des trous de mémoire, le nombre de fichiers traitable par automatisme est limité.

    Une des premières adresses pour des outils haute performance pour la création de PDF from .doc ou des autres formats “office” est PDF-Tools AG (http://www.pdf-tools.com/).

    HTH

    Max Wyss.

    en réponse à : Deux champs texte dont un seul en lecture seule. – RÉSOLU #54379
    maxwyss
    Membre

    Il est commun d’avoir des champs de copie ou je ne veux pas que l’utilisateur change des valeurs. Pour passer des informations du champ d’entrée il y a plusieurs possibilitiés (notez que le champ d’entrée porte le nom “champDEntree” et les champs de copie “champDEntröö_1”:

    • “push”: lorsque la valeur dans le champ d’entrée est confirmée, elle est poussée vers les champs de copie. Dans l’événement Validation du champ d’entrée on a le code suivant:

    this.getField(event.target.name + “_1”).value = event.value ;

    notez que cette ligne de code est reutilisable, si la convention de nom de champs est maintenue; on pourrait même créer une fonction au niveau du document.

    • “pull”: lorsque la valeur dans le champ d’entrée est confirmée, la sequence de calcul est executée automatiquement, et donc, on peur executer le code suivant dans l’événement Calcul:

    event.value = this.getField(event.target.name.substr(0, event.target.name.length-2)).value ;

    (pour avoir du code portable).

    Personellement, je préfère la première méthode parce qu’elle provoque moins de calculs, et est donc plus performante.

    HTH

    Max Wyss.

    en réponse à : Envoyer un formulaire par messagerie internet. – RÉPONDU #54349
    maxwyss
    Membre

    Il semble que le fichier de l’image n’est pas ou plus disponible…

    maxwyss
    Membre

    Merci pour les compliments, Merlin.

    Le calendrier/date picker est, comme déjà dit, disponible; contactez-moi en privé.

    maxwyss
    Membre

    J’arrive un peu tard dans la discussion, voici quand-même quelques commentaires :

    • Infopath : Système pour formulaires électroniques développé par Microsoft, utilisant MS Word comme moteur de développement et affichage. Il y a quelques entreprises qui travaillent avec Infopath, mais c’est plutôt un environnement fermé. Il faut un environnement strictement Microsoft, et très bien géré.

    • LiveCycle Designer et XFA : Les sources de ce système ont à peu près le même âge que Acrobat et PDF pour formulaires. Originalement développé par JetForms pour la base des serveurs de distribution de formulaires. JetForms s’est re-nommé Accelio et a été acquis par Adobe. Il y avait une période chez Adobe ou on avait “XFA über Alles”, et c’est pourquoi on a co-emballé LiveCycle Designer avec Acrobat Pro pour Windows (Adobe n’a jamais considéré Mac comme plateforme de développement de formulaires (bon, ils ont toujours demandé les lemmings des grandes corporations lors leurs sondages). On a ajouté à Reader (et Acrobat) la capacité d’utiliser des formulaires XFA. Avec Acrobat XI, LiveCycle Designer ne fait plus partie du produit “Acrobat Pro”, mais ce logiciel est vendu séparément par les canaux pour entreprises (et donc remis à sa place originale où il peut briller et être vraiment utile).

    Notez que XFA ne fait pas partie de la norme ISO 32000, mais est indiqué comme “aide supplementaire”, ce que veut dire qu’il n’est pas illégal de complémenter un fichier PDF avec XFA.

    • Formulaires dynamiques avec PDF : Il est absolument possible de créer des formulaires dynamiques avec Acroforms. Si la granularité est au niveau d’une page, l’utilisation des modèles est élémentaire et existe depuis des années. Si la granularité est plus fine qu’une page, c’est un petit peu plus difficile et complexe, mais de tels formulaires existent et ils sont utilisés en production. Pour une implémentation spécifique, contactez-moi en privé

    • Calendrier pour la date (“date picker”): Il existe plusieurs solutions. Entre outre, une solution très facile a intégrer, mais bien performante a été développée par “yours truly”; pour plus de détails contactez-moi en privé (je suis en train de commercialiser cette solution, mais ça va durer un peu de temps; néanmoins, elle est disponible sur demande).

    HTH

    Max Wyss.

    en réponse à : Interdire d’imprimer des documents PDF. – RÉPONDU #54251
    maxwyss
    Membre

    Merci pour les fleurs

    En fait, la qualité du PDF généré par OpenOffice est très haute, en utilisant GhostScript (et ses libraries).

    en réponse à : Interdire d’imprimer des documents PDF. – RÉPONDU #54249
    maxwyss
    Membre

    Une autre possibilité de évaluer au moins serait OpenOffice. OpenOffice contient un export de PDF de qualité acceptable. Mais je ne suis pas sur si des liens etc. sont exportés; je crois, mais il faudrait verifier. Mais le prix de OpenOffice ne peut pas être battu…

    HTH

    Max Wyss.

    en réponse à : Formule condition si / alors. – RÉSOLU #54148
    maxwyss
    Membre

    Dans cette situation, il n’est même pas nécessaire d’utiliser une decision; les mathématiques le font directement :

    var P1 = this.getField(“Texte_49”).value*1 ;
    event.value = Math.max(100000, (100000 + ((P1-100000)/2)))) ;

    HTH

    Max Wyss.

    maxwyss
    Membre

    Le code pour cette conversion est un simple one-liner:

    var myValue;
    myValue = Math.ceil(myValue*0.5) * 2 ;

    et nous avons toujours des chiffres pairs…

    HTH

    Max Wyss.

    en réponse à : Commande spawnPageFromTemplate – RÉSOLU #54136
    maxwyss
    Membre

    Pour ça, il faut utiliser les modèles de page. Procédez comme suit (dans Acrobat XI):

    1. Ouvrez le document à la page qui devrait devenir le modèle.

    2. Ouvrez le panneau Outils, et sélectionnez la section Traitement du document

    3. Cliquez sur Modèles de page

    4. Dans le dialogue donnez un nom pour ce modèle, puis cliquez sur Ajouter; dans notre example ça sera “myTemplate”

    5. Confirmez et fermez le dialogue

    6. Ouvrez la Console ( ou )

    7. Entrez le code

    this.getTemplate(“myTempate”).spawn(4, false, false) ;

    8. Executez le code

    Et ça devrait créer une copie de la page choisie après la page 5 (Acrobat commence le compte des pages à zéro)

    Si la nouvelle page est introduite après le numéro de page incorrect, corrigez le premier argument dans la ligne de code.

    Une explication de la méthode utilisée se trouve dans la documentation pour Acrobat JavaScript (Acrobat JavaScript Reference, qui fait partie du SDK pour Acrobat, téléchargeable du site de Adobe.

    HTH

    Max Wyss.

    en réponse à : JavaScript : je loop la boucle. – RÉSOLU #54092
    maxwyss
    Membre

    Ça fonctionn avec console.println() parce que la commande d’ecrire sur la console est dans le loop, et répété chaque fois la loop est passée. Donc le resultat est “sauvegardé” sur la console par chaque tour.

    Par contre, dans le second example, il n’y a pas cette sauvegarde dans un protocole, donc tout ce que tu vois est le tout dernier resultat.

    HTH

    Max Wyss.

    en réponse à : JavaScript : je loop la boucle. – RÉSOLU #54090
    maxwyss
    Membre

    messageList est redéfinie avec chaque loop, et donc, il est clair que le résultat n’existe que pour le dernier champ.

    Une alternative serait l’utilisation d’un array:

    var messageList = new Array()
    for (var j = 0 ; j < this.numFields ; j++) {
    messageList[j] = this.getNthFieldName(j)
    }

    ou si on veut garder l’indexe dans la liste, utilisez la ligne suivante:

    messageList =

    Dans notre cas spécifique, il n’y a aucune différence fondamentale entre un Object et un Array, parce que l’indexe est le numéro ordinale.

    HTH

    Max Wyss.

    en réponse à : Convertir un formulaire XFA en AcroForm. – RÉPONDU #52752
    maxwyss
    Membre

    Bonjour,

    Une possibilité serait d’extraire la partie XML du format XFA, et la réinterpréter pour créer des éléments Acroforms.

    Il y a également des utilitaires, par exemple de Windjack, mais les résultats ne sont pas parfait. Pour récupérer la logique, il n’est pas possible d’avoir un processus automatique, car il y a des différences fondamentales entre Acrobat JavaScript et JScript.

    Si c’est pour un projet sérieux, nous pouvons en discuter…

    HTH

    Max Wyss.

    en réponse à : Masquer les zéros si aucun nombre. – RÉSOLU #54050
    maxwyss
    Membre

    En fait, la methode proposée fonctionne, parce que l’événement Format ne change pas la valeur du champ; ça ne change que comment la valeur est affichée.

    Max Wyss.

    en réponse à : Masquer les zéros si aucun nombre. – RÉSOLU #54048
    maxwyss
    Membre

    Si 0 n’est pas une valeur “legale” (ou valide), il est simple de masquer: Dans l’èvènement Format, additonner le code JavaScript suivant:

    if (event.value == 0) {event.value = “”}

    et ça va afficher un champ vide.

    Si le champ devrait être formatté quand la valeur est valide, le code se modifierait comme suit:

    if (event.value == 0) {
    event.value = “” ;
    } aelse {
    event.value = util.printf(“%.2f”, event.value) ;
    }

    La syntaxe du string de formattae est decrite dans la documentation Acrobat JavaScript, qui fait partie du Acrobat SDK, téléchargeable du site Adobe.

    HTH

    Max Wyss.

    en réponse à : Personnaliser l’ordre de tabulation. – RÉSOLU #54039
    maxwyss
    Membre

    En cas des formulaires AcroForm (non créés par LiveCycle Designer), chaque champ a son numéro d’ordre de tabulation. Ce numéro d’ordre de tabulation est egalement l’ordre verticale des champs.

    Pour modifier l’ordre de tabulation, il y a une possibilité, la fonction setFocus(), qu’on place normalement dans l’événement Champ désactivé (onBlur).

    Mais attention: si on fait trop, il n’est plus possible de sortir d’une suite de champs.

    HTH

    Max Wyss.

    maxwyss
    Membre

    Bienvenu dans le Forum.

    Une possibliité pour simplifier le tout est de utiliser la valeur affichée et la valeur de retour dans la liste déroulante (quantité). Dans les “Proprietés” du champ, dans la section “Options”, on entre dans le 1er champ la valeur qui va être affichée, et dans le 2e champ la valeur des frais de ports.

    Le champ Port seraa rempli automatiquement, et devrait être en “lecture seule” (même chose pour le champ Total).

    Et maintenant, il faut placer un petit JavaScript dans l’événement “Calcul” du champ “Total”:

    this.getField(“Port”).value = this.getField(“Quantite”).value ;
    event.value = this.getField(“Prix”).value*1 + this.getField(“Port”).value*1 ;

    Et ça devrait fonctionner.

    HTH

    Max Wyss.

    en réponse à : Infobulle préremplie dans un champ texte. – RÉSOLU #53961
    maxwyss
    Membre

    L’evenement “onFocus” se nomme “champ activé”, et l’evenement “onBlur” est nommé “champ desactivé”. Les deux se trouvent dans les Actions des proprietés de champ.

    HTH

    Max Wyss.

    en réponse à : Documentation linéarisation ? – RÉPONDU #53986
    maxwyss
    Membre

    Le premier choix serait les spécifications ISO 32000, dont une version peut être téléchargée gratuitement du site Adobe. (merci Adobe, sinon cela couterait normalement quelques centaines d’Euros.)

    L’autre document à étudier serait la documentation générale du SDK.

    HTH

    Max Wyss.

    en réponse à : Infobulle préremplie dans un champ texte. – RÉSOLU #53959
    maxwyss
    Membre

    if (KALO.value == “content”)
    {Merlin = “content aussi”;}

    :geek:

    That’s a low-cost content management system…

    hehe

    Max.

    en réponse à : Intéractivité entre tableau et graph dans un PDF. – RÉSOLU #53937
    maxwyss
    Membre

    @alex: Merci pour lacorrection; je n’ètais pas assez precis…

    Il y a cette discrepance entre la documentation at la realité; j’ai deposé des bug reports et des feature requests avec Adobe… peut-être au cours de la prochaine decennie, ça va être corrigé…

    Concernant la documentation “readOnly”; c’est correct dans le PDF qui fait part de la documentation du SDK pour Acrobat 10 (la version couramment disponible; il semble qu’ils unt quelques delais avec la version pour Acrobat 11.

    Max Wyss.

    maxwyss
    Membre

    Ahem… tu as raison; Acrobat 7 est une application PowerPC pour laquelle Rosetta est necessaire…

    C’est pourquoi 10.6.8 est surnommé parfois “le XP de Apple”…

    Max Wyss.

    en réponse à : Intéractivité entre tableau et graph dans un PDF. – RÉSOLU #53935
    maxwyss
    Membre

    @alex: J’ai vraiment oublié la possibilité des annotations qui, en fait, permettraient d’utiliser du texte si necessaire.

    Un petit problème existe avec les annotations: Même si elles sont generés readonly, elles ne sont pas, et elles sont accessibles par la sequence tab. Il faut donc prendre des mesures pour qu’elles ne soient pas accessibles. Et egalement, même si generés readonly, ils peuvent être déplacées. Auquel cas, il suffit de placer un champ transparent et readonly en dessus.

    HTH

    Max Wyss.

    maxwyss
    Membre

    Si je me souviens correctement, Rosetta n’etait plus disponible pour OSX 10.7. Donc, des applications originalement PowerPC ne fonctionnent plus. Et une fois de plus, si je me souviens correctement, rien n’a changé avec 10.8.

    Comme il me faut de temps en temps acceder Acrobat 5, je suis bloque avec 10.6.8.

    La conclusion: si Acrobat 7 fonctionne sous 10.7, il devrait fonctionner sous 10.8.

    Mais il est possible que j’ai tort… ça ne serait pas la première fois…

    HTH

    Max Wyss.

    en réponse à : Suite d’un texte dans un champ différent. – RÉPONDU #53889
    maxwyss
    Membre

    Dans un champ multiligne normal, il n’est pas possible de changer l’interlignage (sauf si on préparait une police avec cet interlignage specifique).

    Il y a l’option de richText pour un champ (je crois que ça apparait dans les options des propriétés du champ par “utiliser RTF” ou comme-ça). Si cette option est activée, on peut lancer la barre des propriétés (en tapant ou ). Et là, on peut changer l’interlignage.

    HTH.

    Max Wyss.

    en réponse à : Infobulle préremplie dans un champ texte. – RÉSOLU #53953
    maxwyss
    Membre

    Pour les champs du type listbox et combobox, c’est simple; creez un champ contenant ce texte (par example “faites votre choix”), et donnez lui une valeur de retour specifique (souvent, je prends 0 ou -1).

    Pour les champs de texte, c’est un petit peu plus complexe, mais pas de problème serieux:

    a) La valeur par défaut sera le texte à afficher (par ex “nom”

    b) Dans l’evenement onFocus ajoutez le code suivant:

    if (event.target.value === event.target.defaultValue) { event.value = “”}
    if (event.target.value === event.target.defaultValue) { event.target.value = “”}

    c) dans l’evenement onBlur ajoutez le code suivant:

    if (event.value == “”) { event.value = event.target.defaultValue }
    if (event.target.value == “”) { event.target.value = event.target.defaultValue }

    Et ça devrait fonctionner.

    Ces codes déterminent s’il y a une valeur dans le champ soit la valeur de l’infobulle; si c’est le cas, le champ est vidé quand on clique dedans ou on vient dedans par tab. Quand on quitte le champ, le code decide, si le champ est vide que rien a été rempli, et il va donc remontrer l’infobulle.

    HTH

    Max Wyss.

    en réponse à : Intéractivité entre tableau et graph dans un PDF. – RÉSOLU #53929
    maxwyss
    Membre

    Il y a deux possibilités, les deux demandent de la programmation:

    a) Inserer un objet Flash, et faire lacommunication entre les champs du fichier et cet objet Flash (si je me souviens correctement, il faudrait Flex Builder pour quelques composants)

    b) Il y a une metode non-documentée en Acrobat JavaScript, nommée createIcon(), avec laquelle on peut peindre directement en utilisant les codes PDF. D.P. Story, professeur emeritié de l’université de Akron, OH a publié des essais; il faudrait chercher un peu pour les trouver. Un example est http://www.math.uakron.edu/~dpstory/tutorial/demos/graphPDF.pdf

    Si c’est serieux, je pourrais aider; pour des informations supplémentaires ou un devis, contactez-moi en privé.

    HTH.

    Max Wyss.

    en réponse à : Création PDF/A à partir d’un PDF. – RÉPONDU #53853
    maxwyss
    Membre

    Pour des ressources additionnelles “tout autour de PDF/A”, on pourrait visiter le site de la PDFAssociation (http://www.pdfa.org). Si je me souviens correctement, il y a une liste d’outils pour la creation et egalement pour la verification.

    HTH

    Max Wyss.

    maxwyss
    Membre

    Mon plaisir, nini.

    Et si ça ne fonctionne toujours pas, pose la prochaine quesiont…

    Max Wyss.

    maxwyss
    Membre

    Salut nini,

    Sous Acrobat X, les JavaScripts du document sont accedé par le panneau Outils –> JavaScript –> Scripts JavaScript du Document. Par défaut, la section JavaScript n’est pas montrée; il faut donc la activer par le tout petit bouton en haut à droite du panneau Outils.

    HTH

    Max Wyss.

    maxwyss
    Membre

    Salut nini,

    quelle version de Acrobat utilises-tu?

    La fonction n’est pas definie comme script de document, et parce que la methode pour additionner un tel script depend de la version Acrobat, je demande pour pouvoir donner les instructions correctes.

    Max Wyss.

    maxwyss
    Membre

    Salut nini,

    je m’excuse si les instructions n’etaient pas suffisamment clairs…

    La fonction devrait être definie comme script du document (avec ça elle devient disponible pour tout les champs du document).

    Dans l’evenement Format du champ, la fonction est appellé comme suit:

    multisize(event.target, 18, 4) ;

    Attention: dans la version courante, les coupures de ligne automatiques ne sont pas considerés; il faut donc couper les lignes manuellement; pour un automatisme avec les coupures de ligne automatiques, il faudrait egalement compter les charactères et adapter la logique.

    HTH

    Max Wyss

    maxwyss
    Membre

    En fait, la commutation entre fixe et automatique est plus simple quand on a des champs multilignes.

    On compte soit les charactères pour une nouvelle ligne, soit le nombre de charactères, et on peut changer entre fixe et automatique.

    Voici une fonction qui peut être utilisé dans l’evenement Format:

    Code:
    function multisize(fieldvar, fsze, zeilen)
    {
    var count = 0;
    var pos = event.value.indexOf(“r”);
    while ( pos != -1 ) {
    count++;
    pos = event.value.indexOf(“r”,pos+1);
    }
    if (count > (zeilen – 1)) {
    fieldvar.textSize = 0 ;
    } else {
    fieldvar.textSize = fsze ;
    } ;
    }

    Les arguments ont la signification suivante:

    fieldvar: Objet de Champ concerné; normalement c’est event.target
    fsze: Taille de police fixe
    zeilen: nombre de ligne

    La fonction est definie comme un script de document. Si elle est appellée par exemple comme

    Code:
    multisize(event.target,18,4)

    ça veut dire que le champ dans lequel la fonction est appellée dans l’evenement Format va avoir quatre lignes de texte avec la taille 18 points; s’il y a plus que 4 lignes, la taille du texte est automatique

    HTH.

    maxwyss
    Membre

    Excusez la réponse un peu tardive, SVP.

    Je n’ai pas verifié, mais en principe, le code de touches

    Code:
    if (event.value.toString().length < 1 || /s/gim.test(event.value.toString().charAt(event.value.toString().length-1))) {
    event.change = event.change.toUpperCase() ;} 

    pourrait être modifié de la manière suivante:

    Code:
    if (event.value.toString().length < 1 || /[-s]/gim.test(event.value.toString().charAt(event.value.toString().length-1))) {
    event.change = event.change.toUpperCase() ;
    } else {
    event.change = event.change.toLowerCase() ;
    }

    Notez que le Regular Expression est egalement modifié pour prendre en consideration le trait d’union.

    HTH

    Max Wyss.

    en réponse à : Nombre de ligne de script dans un bouton. – #53833
    maxwyss
    Membre

    La communauté anglophone appelle ça “the even number curse”.

    Max Wyss.

    en réponse à : Nombre de ligne de script dans un bouton. – #53830
    maxwyss
    Membre

    Il depend de la longueur des lignes… si chaque ligne a 1500 charactères, il y a une limite…

    En fait, l’editeur interne de Acrobat a une limitaion a 32k characteres. Si on utilise un editeur externe, par exemple NoteTab Pro ou BBEdit, la limite est dans les MB…

    Mais comme Merlin dit, Acrobat X est vraiment problematique (c’est la raison pourquoi je ne l’utilise que pour tout derniers tests, si le client le demande.

    Max Wyss.

    en réponse à : Afficher/Masquer une deuxième page d’un PDF. – RÉPONDU #53817
    maxwyss
    Membre

    Merlin: Le fichier est absolument adequate pour demonstrer ce qu’il est prevu pour. Le script ancien fonctionne toujours, même avec Acrobat XI. En fait, ce fait est un peu etonnant, concernant la non-longéivité de autres implementations de scripting… donc une autre preuve que les investissements dans PDF (et AcroForms) sont bien justifiés.

    Max Wyss.

    en réponse à : Afficher/Masquer une deuxième page d’un PDF. – RÉPONDU #53814
    maxwyss
    Membre

    Bonjour Kalo: Je viens de telecharger le fichier example, et je note que cet example utilise une version “ancienne” de la commande de créer une page d’un modèle: spawnPageFromTemplate(), qui fait partie du Object Doc. Selon la documentation Acrobat JavaScript, cette méthode ist considerée obsolète, et il est recommandé de utiliser spawn() du Object Template. Neanmoins, les arguments de la méthode sont similaires, et en fait, le flag pour renommer les champs est posé, Si on crée une troisième page, les noms de champs sont adaptés.

    Le problème avec le fichier démo est que la première page a été créée par la même methode, devenant la deuxième page, et ensuite, la première page a été effacée. Pour être consistant, on aurait du renommer les champs de la (nouvelle) première page en “P0.trombi.xxx”.

    Cet example est une demonstration (pas prévu, certainement) de ce qui peut se passer si on a des pages créées d’un modèle et on “joue” avec des pages…

    Le code pour créer une nouvelle page est vachement simple, et il est associé au champ “P1.trombi.reseticon”.

    HTH.

    Max Wyss.

    en réponse à : Attribution de script sur bouton. – RÉSOLU #53791
    maxwyss
    Membre

    Je ne peux pas prouver, mais je crois que pour une simple connection (deux expressions logiques) & donne le resultat correct. La cause est que JavaScript est “loosely typed”, qui veut dire que le type d’une variable ou d’un expression est adapté à la fonction. Donc true serait converti à 1 et false à 0. Et maintenant, on a des integers, qui faisant le bitwise AND resultent à 1 seulement si les deux sont 1. Et le resultat (0 ou 1) est reconverti à false ou true…

    Max Wyss.

    en réponse à : Afficher/Masquer une deuxième page d’un PDF. – RÉPONDU #53812
    maxwyss
    Membre

    Kalo: Le code pour créer une page du modèle, a une option qui renomme les champs sur les pages. Avec ça, on n’a pas cet effet.

    en detail: template.spawn() a l’option bRename qui devrait être active (true) par defaut.

    HTH.

    Max Wyss.

    en réponse à : Attribution de script sur bouton. – RÉSOLU #53789
    maxwyss
    Membre

    Selon “JavaScript, the Definitve Guide” by David Flanagan, publié par O’Reilly, il y a une grande difference entre & et &&.

    & est “bitwise AND” (je cite: “The & operator performs a Boolean AND operation on each bit of its integer arguments.
    A bit is set in the result only if the corresponding bit is set in both operands.”). Cet operateur utilise des integers et fait la comparaison.

    && est “logical AND”, et ist normalement utilisé pour combiner des expressions logiques.

    Il est donc très dangereux de dire que & et && sont le même.

    Max Wyss.

    maxwyss
    Membre

    Je suis heureux d’entendre que ça marche maintenant.

    Max.

    maxwyss
    Membre

    Pour acceder un champ avec prefix, on utiliserait

    this.getField(myPrefix + “DATE”)

    is le prefix a été nommé “myPrefix”. Ceci fonctionne egalement si on travaille sans prefix; dans ce cas … myPrefix = “”

    Si on utilise le code indexOf(name), et on utilise le nom de base, is n’est pas necessaire de connaitre le nom du modèle, car il arrive automatiquement dans le prefix.

    HTH.

    Max Wyss.

    maxwyss
    Membre

    Pour differencier les champs sur des pages spawned d’un modèle, le defaut est de additionner un prefix au nom des champs du modèle.

    Ce prefix se compose de P plus le numéro logique de la page crée au temps de la création, plus le nom du modèle (donc dans l’example “P1” (la deuxième page du document a été crée par l’action spawn), et le nom du modèle.

    La consequence pour des scripts est de prendre en compte ce prefix. Lors de l’action spawn, on sait le numéro de la page crée, et on pourrait donc sauvegarder ce prefix dans un array (IMHO, la methode la plus simple). Pour des calculations automatiques dans la page, on peut deduire le prefix du nom du champ contenant la calculation en utilisant event.target.name , par example

    var myPrefix = event.target.name.substring(0,event.target.name.indexOf(“DATE”)) ;

    (notez que cette ligne n’est pas verifiée; le point avant “DATE” devrait être inclus dans le prefix; si ce n’est pas le cas, utilisez

    …(event.target.name.indexOf(“DATE”)+1)

    HTH

    Max Wyss.

    en réponse à : Date en en-tête de pied de page. – RÉSOLU #53661
    maxwyss
    Membre

    Bonjour KALO,

    Deux choses avec ma réponse:

    a) L’événement “willPrint” est accedé (en Acrobat 9) par le menu Options avancées –> Traitement du document –> Définir les actions de scripts –> Le document sera imprimé

    b) La ligne de code à entrer est :

    this.getField(“printdate”).value = “Date d’impression : ” + util.printd(“dd/mm/yyyy”, new Date() ;

    HTH.

    Max Wyss.

    en réponse à : Date en en-tête de pied de page. – RÉSOLU #53659
    maxwyss
    Membre

    Une possibilité est de placer un champ texte sur les pages. Nommons ce champ “printdate”, et faisons-le visible qu’en impression.

    Puis nous créons un petit JavaScript dans le willPrint événement:

    this.getField(“printdate”).value = util.printd(“dd/mm/yyyy”, new Date() ;

    Voilà…

    HTH

    Max Wyss.

    maxwyss
    Membre

    LiveCycle Designer n’est plus inclus dans le package Acrobat Pro Windows. Ca est correct. LiveCycle Designer est disponible comme applicaiton autonome du site Adobe, section LiveCycle.

    LiveCycle Designer a une très bonne raison d’êtere: la création des documents utilisés par les differents serveurs LiveCycle (Forms Server, Document Server, Output Server etc.). Pour cela ce programme est necessaire. Donc, ce programme wa exister le long que les serveurs LiveCycle existent.

    Ce que n’est plus le cas, (et IMHO, n’aurait jamais pu fait) est l’inclusion avec un logiciel Acrobat.

    Max Wyss.

    maxwyss
    Membre

    Pour une solution “rapide et sale” (quick and dirty), on pourrait utiliser aucun format pré-defini, mais le code JavaScript suivant dans l’èvènement Format du champs:

    event.value = util.printf(“%,2.2f”,event.value).toString().replace(/./gim,” “) ;

    HTH.

    Max Wyss.

    en réponse à : Ajout de champs à l’aide d’un bouton. – RÉSOLU #53508
    maxwyss
    Membre

    Ca pourrait être un petit peu plus simple à effectuer dans LiveCycle Designer, mais dans certaines limites, il se fait aussi bien avec Acroforms (the format de formulaire original PDF). Il faut un petit peu de programmation en Acrobat JavaScript. Pour cela il est indispensable de se familiariser avec la documentation de Acrobat JavaScript (qui fait partie du Acrobat SDK, à telecharger du site Adobe).

    HTH

    Max Wyss.

    maxwyss
    Membre

    Comme dit, la documentation fait part du Acrobat SDK. Ceci est la page de telechargement des SDK: http://www.adobe.com/devnet/acrobat/downloads.html. Installez le SDK, et toute la documentation est dans le repertoire Documentation (et ça inclut les specification de PDF, equivalent à la Norme ISO 32000).

    HTH

    Max Wyss.

    maxwyss
    Membre

    Salut,

    Du point de vue documentation, il y a deux documents qu’il faut (IMHO):

    • La documentation Acrobat JavaScript, qui fait part de la documentation du Acrobat SDK, telechargeable du site Adobe. La version actuelle du SDK concerne Acrobat X, et il est important de procurer la version la plus actuelle. Heureusement, la documentation Acrobat JavaScript est disponible en PDF (de nouveau; il y avait une epoque ou tout ce qui était disponible était de la ferraille en HTML…

    • La documentation du core de JavaScript, soit disponible via site Mozilla development, ou bien (ma version préferée), le livre “JavaScript, the definitive Guide” 6ème édition par David Flanagan, publié par O’Reilly. La les parties du Core sont relevants; les parties concernant JavaScript dans le Browser peuvent être ignorés.

    Pour des implementations, si “buy” devient préferé sur “make”, envoye-moi un message privé, et on peut discuter… Un workshop personalisé serait egalement possible.

    HTH

    Max Wyss.

    maxwyss
    Membre

    Le problème est un petit peu plus complexe, parce qu’on devrait definir quoi est un début de mot.

    Le code suivant teste si le charactère précédent est un espace (Unicode), defini par le Regular Expression s. Le code modifié pour l’événement Keystroke est le suivant:

    if (event.value.toString().length < 1 || /s/gim.test(event.value.toString().charAt(event.value.toString().length-1))) {
    event.change = event.change.toUpperCase() ;
    }

    Nous avons deux tests:

    a) si nous avons le premier charactère de notre texte (qui veut dire que event.value n’existe pas, ou bien a la longeur de string de 0).

    b) si le charactère précedent est un charactère d’espace. Le charactère précédent est le dernier charactère de event.value.

    Pour modifier la règle quand de capitaliser, il faudrait donc ajuster le Regular Expression.

    HTH.

    Max Wyss.

    maxwyss
    Membre

    1. Est-il possible de lier des champs PDF avec une feuille de calcul Excel ?

    2. Ou fait-il faire un script pour effectuer ces calculs ?

    Comme déjà indiqué, il n’est pas possible de lier des champs PDF avec une feuille de calcul Excel. Bon, il y a des possibliités, si le moteur de calcul est sur un serveur, on pourrait envoyer les donnes entrées vers ce serveur, et afficher les resultats. Mais ça peut devenir un peu compliqué, et on a toujours besoin de programmer le moteur de calcul.

    JavaScript est une langue de programmation complète, et tout problème qui peut être resolu numériquement peut être resolu avec JavaScript. Il faut donc savoir les algorithmes necessaires. C’est donc bien faisable…

    FWIW, mon premier projet de formulaire intelligent en PDF etait la specification des trains de courroie (les deux, courroies V et dentées). Dans un cas une iteration etait necessaire. Ce formulaire a été presenté à un grand public lors de la Seybold Conference à Boston… en Février 1999…

    HTH

    Max Wyss.

    maxwyss
    Membre

    Ceci est une solution rapide; on devrait voir si relache souris est le meilleur evenement pour initier la logique.

    Si on a des option de visibilité un peu special, il faut programmer la logique avec JavaScript. Le code est assez simple…

    pour la liste 1:

    this.getField(“texte1”).display = display.noPrint ;
    this.getField(“texte2”).display = display.hidden ;
    this.getField(“texte3”).display = display.hidden ;

    pour la liste 2:

    this.getField(“texte1”).display = display.hidden ;
    this.getField(“texte2”).display = display.noPrint ;
    this.getField(“texte3”).display = display.hidden ;

    pour la liste 3:

    this.getField(“texte1”).display = display.hidden ;
    this.getField(“texte2”).display = display.hidden ;
    this.getField(“texte3”).display = display.noPrint ;

    Et ça devrait être ce qu’on aimerait…

    HTH

    Max Wyss.

    maxwyss
    Membre

    A condition que les pages ne soient jamais effacées, il est bien possible de créer la page de consultation et de la marquer comme modèle de page (ou Template). Il est possible de créer une copie de cette page plusieurs fois dans le document.

    Pour créer une copie du modèle de la page, il y a la methode JavaScript de l’objet Template spawn(). Un des arguments de cette methode definit si les champs vont recevoir un nom unique. Et ça est le point important pour l’application du dossier de consultation. Avec des noms de champs uniques, on n’a pas de répétition du contenu lors de la duplication des pages-templates. Mais on peut transferer quand-même le contenu de certains champs.

    HTH

    Max Wyss.

    maxwyss
    Membre

    En fait j’ai créé plusieurs formulaires sur une même feuille et c’est pas facile a gérer en terme de mise en page quand tu as beaucoup de champs.
    Je voulais savoir si il y avait une solution pour faciliter ça ? de type calque que tu peux cacher/voir quand tu le souhaite, mais à priori les formulaires ne sont pas géré dans des calques.

    Superposer un grand nombre de champs est bien possible, mais il peut devenir un problème s’il faut changer quelque chose.

    Ayant des experiences dans ce champ, ma procédure standard est de developper chaque “page” individuellement, soit dans son propre document, soit sur une page physique. Tout doit fonctionner correctement avant que les champs sont copié sur la même page, et je fais ça seulement après avoir crée une copie du fichier.

    En outre, car on va faire apparaitre et disapparaitre des champs, il faut developper une strategie de noms de champs. Il est donc important de comprendre les noms de champs hierarchiques. Avec une bonne hierarchie (avoir tout les champs d’une “page” dans le même groupe, il devient possible de fair apparaitre ou disapparaitre tout les champs concernés avec une seule commande.

    Pour le problème discuté, il depend si les formulaires doivent fonctionner avec Reader. Si l’utilisation de Acrobat est garanti, il est bien possible de utiliser des Modèles de pages (aka Templates). Cela permettrait de definir des pages comme modèles, et de les cacher et créer quand on en a besoin, ou bien de les faire visible (mais ça ne fonctionne qu’en Acrobat).

    Pour plus de details, consulter la documentation Acrobat JavaScript qui est part du Acrobat SDK, à telecharger du site Adobe.

    maxwyss
    Membre

    Comme il a déjà été mentionné, il n’est pas possible d’empecher l’utilisateur d’imprimer le document. Il y a un événement “WillPrint” qui permet de executer du JavaScript avant l’impression, mais quand ça se passe, il est trop tard pour arrêter l’impression.

    Donc, tout ce qu’on peut faire s’il est important que tout les champs obligatoires sont rempli, est de faire une indication que le formulaire n’est pas valable. On peut faire ça avec un champ invisible sur écran mais qui imprime, qui contient un message “pas valable” etc.

    Pour implementer cela, appelons ce champ “invcvr”. Dans l’événement WillPrint, on va executer le script suivant:

    this.getField(“invcvr”).display = display.noView ; // preparer le champ d’indication
    var cntr = 0 ; // initialiser un compteur
    for (var i = 0 ; i < this.numFields ; i++) {
    var mf = this.getField(this.getNthFieldName(i)) ;
    if (mf.type != “button” && mf.type != “signature”) {
    if (mf.required == true) {
    if (mf.value === mf.defaultValue) {
    cntr++ ;
    }
    }
    }
    }

    if (cntr == 0) {
    this.getField(“invcvr”).display = display.hidden ;
    }

    Maintenant, l’indication de champ obligatoire. Ceci est un peu plus difficile, parce que le contour rouge est fourni par Acrobat quand l’option de marquer les champs est activée. On n’a donc pas de controle sur cette option, parce qu’elle est une préference d’utilisateur.

    On a la possiblilité de créer un mechanisme similaire au “champ obligatoire”, qui n’utilise pas la proprieté required. Dans ce cas, on n’a pas de contour rouge fourni de Acrobat. Ca devient un petit peu plus complexe, mais pas trop…

    On va créer un script au niveau document dans lequel on execute le code suivant (important: ce code doit être hors d’une definition de fonction:

    var chobli = new Array() ;
    chobli[0] = “myField” ;
    chobli[1] = “anotherField” ;

    etc. En autre mots, on define un array contenant les noms des champs obligatoires.

    Le prochain script est executé quand la premiere page du document s’ouvre:

    for (var co = 0 ; co < chobli.length ; co++) {
    this.getField(chobli[co]).lineWidth = 3 ;
    this.getField(chobli[co]).strokeColor = color.red ;
    }

    Ce script fait un contour rouge epais autour des champs définis comme obligatoires dans l’array chobli.

    Le prochain script va dans l’événement Format de chaque champ defini comme obligatoire dans chobli:

    if (event.value != event.target.defaultValue) }
    event.target.lineWidth = 1 ;
    event.target.strokeColor = color.green ;
    } else {
    event.target.lineWidth = 3 ;
    event.target.strokeColor = color.red ;
    }

    Et pour augmenter la confusion, le script pour la validation avant l’impression change egalement… mais il se simplifie:

    var cntr = 0 ;
    for (var mf = 0 ; mf < cobli.length ; mf++) {
    if (this.getField(chobli[mf]).value === this.getField(chobli[mf]).defaultValue) {
    cntr++ ;
    }
    }

    if (cntr == 0) {
    this.getField(“invcvr”).display = display.hidden ;
    }

    Et ça devrait fonctionner. Note: Je n’ai pas testé les scripts actuels; il est donc toujours possible qu’il y a des erreurs.

    HTH.

    Max Wyss.

    maxwyss
    Membre

    Acrobat ne peut applatir que des pages entières, mais pas des champs individuels. Pour applatir une page, on utiliserait la fonction flattenPages() (voir documentation Acrobat JavaScript, qui fait partie du Acrobat SDK, à telecharger du site Adobe).

    Ce qu’on peut faire avec des champs individuels, c’est de les changer en readonly (readonly = true). Avec cela, l’utilisateur n’a plus d’accès direct à ces champs (mais avec Acrobat, il peut remettre cela sans problèmes).

    Si applatir est demandé, il faudrait le support d’un serveur, et utiliser FDFMerge de Appligent. Ce logiciel qui remplit des formulaires au serveur peut applatir des champs individuels. Mais, c’est une infrastructure à etablir…

    HTH

    Max Wyss.

    en réponse à : Imprimer seulement les champs. – RÉPONDU #53264
    maxwyss
    Membre

    Mon plaisir…

    en réponse à : Imprimer seulement les champs. – RÉPONDU #53262
    maxwyss
    Membre

    C’est déjà marqué comme répondu, mais un des trucs anciens était de créer un champ de la taille de la page. Ce champ peut être text ou bouton, c’est egal. le fond est blanc, et le bord est 1% noir. Ce champ doit ensuite avoir la position 1 dans l’ordre de tabs qui le met en plus bas de tout les champs. Et le plus important avec ce champ, il est caché sur l’ecran et visible pour l’impression.

    Quand on imprime ce formulaire, le fond du document est couvert par ce champ, mais parce qu’il est sur la position la plus basse, tous les autres champs sont visibles.

    Si on veut donner à l’utilisator le choix de cacher le fond du formulaire ou pas, on va changer la propireté display entre display.hidden et display.noView.

    HTH.

    maxwyss
    Membre

    Allons retour à

    app.alert(“Voulez-vous vraiment effacer la photo ?”, 2, 2);
    if (reply == 3);
    else
    this.getField(“BoutonPhoto”).buttonPosition = position.textOnly;

    cette piece de code n’est pas très propre. Il serait mieux de changer à

    if (app.alert(“Voulez-vous vraiment effacer la photo ?”, 2, 2) == 4) {
    this.getField(“BoutonPhoto”).buttonPosition = position.textOnly ;
    } else {
    // do nothing
    }

    Il pourrait être necessaire de prevoir une reactivation pour pouvoir etre capable d’importer une photo de nouveau (ça depend du processus general).

    HTH

    Max Wyss.

    en réponse à : Comment justifier un texte ? – RÉSOLU #53194
    maxwyss
    Membre

    Il y a une possibilité de justifier le texte (à l’exeption de la dernière ligne dans le paragraphe), mais c’est un peu compliqué.

    Quand le champ est activé pour les formats enrichis (activé “pour texte RTF”), l’option “justifié” apparait dans la barre d’outils propriétés (/ ) (verifié dans Acrobat 7, et je ne crois pas que ça a changé depuis cette epoque).

    Le problème avec ces champs est qu’ils sont un peu compliqués à gerer par JavaScript (voir la description de richValue dans la documentation Acrobat JavaScript…)

    HTH

    Max Wyss.

    maxwyss
    Membre

    Selon mes experiences, n et r sont plus ou moins equivalents. Ca peut donc être une question de preferences personelles. Pour moi, c’est le r.

    J’avais dans le passé un cas ou il m’a fallu de faire rn, et c’etait quand j’ai assemblé un fichier .bat pour Windows…

    Max Wyss.

    en réponse à : Sauvegarde et compteur. – RÉSOLU #53145
    maxwyss
    Membre

    Pour une solution locale, on pourrait additionner un champ invisible pour chaque localité. Dans ce champ on ecrit le nom du fichier quand on l’a sauve (événement “did Save”) (this.documentFileName). Puis, pour sauver le document une nouvelle fois, on va analyser le contenu du champ echeant, en trouvant le numero d’ordre (on pourrait par example utiliser la methode suivante:

    var orderNumber = this.getField(“nomSauve”).valueAsString.replace(/[^0-9]/gi, “”) * 1 ;

    Puis incrementer ce numero et reassembler le nom du fichier.

    HTH.

    en réponse à : Compter les pages sur des centaines de PDF. – RÉPONDU #53139
    maxwyss
    Membre

    Moi non plus (clavier sans pavé numerique), mais KeyRemap4MacBook fonctionne très bien, et maintenant, ma touche

    HTH.

    en réponse à : Sauvegarde et compteur. – RÉSOLU #53143
    maxwyss
    Membre

    Une solution locale (avec Adobe Reader, mais j’ai mes doutes concernant Foxit Reader) est possible seulement si la copie du fichier utilisée est la seule en utilisation. Dans ce cas, on pourrait utiliser un champ invisible contenant les derniers noms sauvés. On peut donc utiliser ces noms sauvegardés comme base pour les noms suivants.

    Si ces conditions ne sont pas realisables, il faut une solution de support serveur. On pourrait, par example envoyer les données au serveur qui remplisserait le formulaire et, utilisant und base de données, sauverait le fichier sous un nom unique suivant les conventions.

    HTH.

    en réponse à : Compter les pages sur des centaines de PDF. – RÉPONDU #53135
    maxwyss
    Membre

    Si on indique sur la console le nombre de pages par document, il n’est pas necessaire de utiliser une variable globale, et le code de JavaScript se simplifierait considerablement:

    console.show() ; // meme cela n’est pas necessaire…
    console.println(“Le fichier examiné (” + this.documentFileName + ” contient ” + this.numPages + ” pages.”) ;

    La raison de utiliser un compteur global n’est que pour calculer la totalité des pages.

    en réponse à : Compter les pages sur des centaines de PDF. – RÉPONDU #53131
    maxwyss
    Membre

    Je m’excuse pour les differences de terminologie; comme la localisation et traduction produit parfois des resultats “etranges”, je ne travaille que dans la version originale du logiciel.

    Remplace “secqence batch” par “traitement par lot…” our “sequence de traitement par lot”.

    en réponse à : Compter les pages sur des centaines de PDF. – RÉPONDU #53128
    maxwyss
    Membre

    Une autre possibilité serait un peu plus orientée vers la programmation, mais elle ne créerait pas des fichiers à mettre dans la poubelle.

    Comme préparation, il nous faut un tout simple fichier JavaScript à installer dans le repertoire JavaScripts de l’installation de Acrobat. Ce ficier contient une seule ligne de code:

    var myGlobalPageCounter = 0 ;

    Créer ce fichier dans un editeur de texte, et le sauver comme .js. Transferer dans le repertoire indiqué en dessus. Redemarrer Acrobat.

    Puis on va créer un sequence batch qui contient une action JavaScript contenant la ligne de code suivante:

    myGlobalPageCounter += this.numPages ;

    Pour le traitement du fichier après la sequence batch, choisissez “fermer sans sauver”.

    Completer la sequence batch.

    Ouvrir la Console, et executer la ligne suivante:

    myGlobalPageCounter = 0 ;

    Faire executer la secuence batch.

    Quand tout s’est passé, retourner à la Console et executer la ligne suivante:

    console.println(“Les fichiers procédés ont une totalité de ” + myGlobalPageCounter + ” pages.” ) ;

    Malheureusement il faut faire ces pas dans la console parce qu’il n’y a pas de possibllités de traitement avant et après la sequence.

    Noter que dans Acrobat X, sequence batch a été remplacé par les “Actions”; le principe est neanmoins le même.

Affichage de 95 réponses de 1 à 95 (sur un total de 95)