Toutes mes réponses sur les forums
-
AuteurRéponses
-
maxwyssMembre
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.
maxwyssMembreJe 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ètresPour 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.
23 mai 2013 à 11:29 en réponse à : Comment charger un JPEG lors du remplissage d’un formulaire PDF ? – RÉPONDU #55062maxwyssMembre> 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…
23 mai 2013 à 10:02 en réponse à : Comment charger un JPEG lors du remplissage d’un formulaire PDF ? – RÉPONDU #55060maxwyssMembreJe 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.
maxwyssMembreLa 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.
23 mai 2013 à 07:46 en réponse à : Comment charger un JPEG lors du remplissage d’un formulaire PDF ? – RÉPONDU #55058maxwyssMembreUne 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.
17 mai 2013 à 17:22 en réponse à : Info bulle visible SI champ est actif ET présence de la souris. – RÉPONDU #55014maxwyssMembrePar 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.
maxwyssMembreL’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.
maxwyssMembreUne 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.
maxwyssMembrePour 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.
25 mars 2013 à 09:18 en réponse à : Bloquer le scroll ou empêcher le defilement d’une page à l’autre. – RÉPONDU #54779maxwyssMembreIl 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.
maxwyssMembreLa 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.
maxwyssMembreCest 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.
maxwyssMembreIl 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.
maxwyssMembreSi 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.
maxwyssMembreEn 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
maxwyssMembreAu 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.
maxwyssMembreLa 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.
17 février 2013 à 12:50 en réponse à : Plusieurs connecteurs logiques à la suite dans un même script. – RÉSOLU #54555maxwyssMembreLe 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.
maxwyssMembreMetrre 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.
29 janvier 2013 à 13:48 en réponse à : Supprimer le libellé "Avertissement : Fenêtre JavaScript". – RÉPONDU #53492maxwyssMembreJe 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.
maxwyssMembreJe 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.
27 janvier 2013 à 22:21 en réponse à : Message "Please Wait…." lors de l’ouverture de mes fichiers PDF. – RÉPONDU #54076maxwyssMembreC’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.
maxwyssMembreIl 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” ;
// etcHTH
Max Wyss.
PS : s’il y a assez d’interêt, je pourrais développer un outil qui ferait cela; contactez-moi en privé.
maxwyssMembreBonjour,
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.
22 janvier 2013 à 22:00 en réponse à : Créer automatiquement une très grande quantité de fichiers PDF. – RÉPONDU #54453maxwyssMembrePour 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.
17 janvier 2013 à 10:46 en réponse à : Deux champs texte dont un seul en lecture seule. – RÉSOLU #54379maxwyssMembreIl 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.
14 janvier 2013 à 09:08 en réponse à : Envoyer un formulaire par messagerie internet. – RÉPONDU #54349maxwyssMembreIl semble que le fichier de l’image n’est pas ou plus disponible…
11 janvier 2013 à 16:03 en réponse à : Quel logiciel utiliser pour un formulaire dynamique et interactif ? – DISCUSSION #54308maxwyssMembreMerci pour les compliments, Merlin.
Le calendrier/date picker est, comme déjà dit, disponible; contactez-moi en privé.
10 janvier 2013 à 21:27 en réponse à : Quel logiciel utiliser pour un formulaire dynamique et interactif ? – DISCUSSION #54306maxwyssMembreJ’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.
maxwyssMembreMerci pour les fleurs
En fait, la qualité du PDF généré par OpenOffice est très haute, en utilisant GhostScript (et ses libraries).
maxwyssMembreUne 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.
maxwyssMembreDans 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.
13 décembre 2012 à 11:18 en réponse à : Formule pour obtenir le chiffre pair supérieur à l’entrée. – RÉSOLU #54175maxwyssMembreLe 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.
maxwyssMembrePour ç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.
maxwyssMembreÇ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.
maxwyssMembremessageList 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.
maxwyssMembreBonjour,
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.
maxwyssMembreEn 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.
maxwyssMembreSi 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.
maxwyssMembreEn 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.
23 novembre 2012 à 21:41 en réponse à : Selon quantités : différentes valeurs de frais de port. – RÉSOLU #54014maxwyssMembreBienvenu 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.
maxwyssMembreL’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.
maxwyssMembreLe 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.
maxwyssMembreif (KALO.value == “content”)
{Merlin = “content aussi”;}:geek:
That’s a low-cost content management system…
hehe
Max.
15 novembre 2012 à 20:26 en réponse à : Intéractivité entre tableau et graph dans un PDF. – RÉSOLU #53937maxwyssMembre@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.
15 novembre 2012 à 19:49 en réponse à : Compatibilité entre Acrobat Pro 7 et OS X 10.8 (Mountain lion) ? – RÉPONDU #53945maxwyssMembreAhem… 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.
15 novembre 2012 à 18:26 en réponse à : Intéractivité entre tableau et graph dans un PDF. – RÉSOLU #53935maxwyssMembre@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.
15 novembre 2012 à 10:56 en réponse à : Compatibilité entre Acrobat Pro 7 et OS X 10.8 (Mountain lion) ? – RÉPONDU #53943maxwyssMembreSi 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.
maxwyssMembreDans 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.
maxwyssMembrePour 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.
15 novembre 2012 à 10:34 en réponse à : Intéractivité entre tableau et graph dans un PDF. – RÉSOLU #53929maxwyssMembreIl 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.
maxwyssMembrePour 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.
5 novembre 2012 à 14:15 en réponse à : Champ texte avec corps comme sur Auto, mais avec corps départ de 25 ? – RÉSOLU #53884maxwyssMembreMon plaisir, nini.
Et si ça ne fonctionne toujours pas, pose la prochaine quesiont…
Max Wyss.
2 novembre 2012 à 11:42 en réponse à : Champ texte avec corps comme sur Auto, mais avec corps départ de 25 ? – RÉSOLU #53882maxwyssMembreSalut 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.
1 novembre 2012 à 14:26 en réponse à : Champ texte avec corps comme sur Auto, mais avec corps départ de 25 ? – RÉSOLU #53880maxwyssMembreSalut 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.
1 novembre 2012 à 11:13 en réponse à : Champ texte avec corps comme sur Auto, mais avec corps départ de 25 ? – RÉSOLU #53878maxwyssMembreSalut 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
31 octobre 2012 à 23:07 en réponse à : Champ texte avec corps comme sur Auto, mais avec corps départ de 25 ? – RÉSOLU #53876maxwyssMembreEn 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 ligneLa 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.
30 octobre 2012 à 19:23 en réponse à : Forcer la capitalisation de la première lettre des mots. – RÉPONDU #53870maxwyssMembreExcusez 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.
maxwyssMembreLa communauté anglophone appelle ça “the even number curse”.
Max Wyss.
maxwyssMembreIl 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.
21 octobre 2012 à 18:42 en réponse à : Afficher/Masquer une deuxième page d’un PDF. – RÉPONDU #53817maxwyssMembreMerlin: 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.
21 octobre 2012 à 13:53 en réponse à : Afficher/Masquer une deuxième page d’un PDF. – RÉPONDU #53814maxwyssMembreBonjour 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.
maxwyssMembreJe 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.
21 octobre 2012 à 09:45 en réponse à : Afficher/Masquer une deuxième page d’un PDF. – RÉPONDU #53812maxwyssMembreKalo: 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.
maxwyssMembreSelon “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.
18 octobre 2012 à 16:10 en réponse à : Duplication Template et noms des champs utilisant des Javascript. – RÉSOLU #53731maxwyssMembreJe suis heureux d’entendre que ça marche maintenant.
Max.
18 octobre 2012 à 12:11 en réponse à : Duplication Template et noms des champs utilisant des Javascript. – RÉSOLU #53728maxwyssMembrePour 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.
17 octobre 2012 à 19:52 en réponse à : Duplication Template et noms des champs utilisant des Javascript. – RÉSOLU #53726maxwyssMembrePour 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.
maxwyssMembreBonjour 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.
maxwyssMembreUne 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.
3 octobre 2012 à 19:26 en réponse à : Formulaire Livecycle et suppression / renommage / déplacement. – RÉPONDU #53633maxwyssMembreLiveCycle 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.
19 septembre 2012 à 08:46 en réponse à : Affichage des nombres… : discussion : bug ? problème ? – DISCUSSION #53553maxwyssMembrePour 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.
maxwyssMembreCa 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.
24 août 2012 à 08:43 en réponse à : Est-il possible de faire des calculs complexes avec des PDF ? – RÉPONDU #53431maxwyssMembreComme 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.
23 août 2012 à 18:35 en réponse à : Est-il possible de faire des calculs complexes avec des PDF ? – RÉPONDU #53429maxwyssMembreSalut,
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.
22 août 2012 à 22:03 en réponse à : Formulaire : capitaliser la première lettre des mots. – RÉSOLU #53422maxwyssMembreLe 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.
22 août 2012 à 13:33 en réponse à : Est-il possible de faire des calculs complexes avec des PDF ? – RÉPONDU #53426maxwyssMembre1. 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.
17 août 2012 à 00:23 en réponse à : Rendre invisibles à l’impression des champs de texte superposés. – RÉSOLU #53417maxwyssMembreCeci 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.
16 août 2012 à 10:45 en réponse à : Duplication de formulaires et indépendance entre eux. – RÉSOLU #53408maxwyssMembreA 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.
16 août 2012 à 10:30 en réponse à : 5 formulaires différents avec champs globaux. Comment les lier ? – RÉSOLU #52835maxwyssMembreEn 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.
29 juillet 2012 à 21:41 en réponse à : Création d’un script pour valider les champs obligatoires avec autre couleur. – #53298maxwyssMembreComme 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.
3 juillet 2012 à 07:55 en réponse à : Comment ajouter un bouton aplatir, et aplatir certainS champs ? – RÉPONDU #53275maxwyssMembreAcrobat 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.
maxwyssMembreMon plaisir…
maxwyssMembreC’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.
30 juin 2012 à 13:51 en réponse à : Effacer une image importée dans un bouton avec JavaScript ? – RÉSOLU #53270maxwyssMembreAllons 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.
maxwyssMembreIl 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.
12 juin 2012 à 12:55 en réponse à : Comment mettre des retours à la ligne dans le code JavaScript – RÉSOLU #53184maxwyssMembreSelon 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.
maxwyssMembrePour 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.
maxwyssMembreMoi non plus (clavier sans pavé numerique), mais KeyRemap4MacBook fonctionne très bien, et maintenant, ma touche
HTH.
maxwyssMembreUne 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.
maxwyssMembreSi 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.
maxwyssMembreJe 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”.
maxwyssMembreUne 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.
-
AuteurRéponses