abracadabraPDF › Forums › PDF – Général › IF-THEN quatrième : oui mais. – RÉPONDU
- Ce sujet est vide.
-
CréateurSujet
-
20 mars 2009 à 12:04 #43692passifacileParticipant
Bonjour à toutes et à tous,
Ayant une liste de “IF” longue comme un jour sans pain à laquelle s’allie une autre liste de “THEN” tout aussi longue, je voudrais savoir comment créer un script ou, idéalement, comment faire pour qu’Adobe lise deux fichiers (xls, txt, cvs etc.) afin de renvoyer la valeur correspondante :
Exemple :
Si je choisis “PAUL” dans le premier menu déroulant, alors “N° de tél. de Paul” s’affiche dans le champ “A”.
Paul se trouve présent dans une liste de 3’000 personnes.
et son n° dans une autre liste de 3’000 numéros.On peut imaginer que, dans un fichier Excel, deux colonnes distinctes contiennent lesdites informations.
Le fonctionnement des propriétés de liste déroulante avec valeurs d’exportation est super… pour autant que l’on ne doive pas saisir plus d’une vingtaine de cas différents.
Voici donc exposé mon problème. Alors je dis : AU SECOURS !
Merci de votre attention, et bonne journée.
-
CréateurSujet
-
AuteurRéponses
-
20 mars 2009 à 13:10 #50023MerlinMaître des clés
En attendant qu’Alex, notre abracadabra-grand-gourou “JavaScript” du forum, se penche sur ton cas je ne peux que t’orienter vers des forums consacrés au langage JavaScript, car là on touche vraiment aux limites entre JavaScript et PDF.
Et ici, à part Alex, on est forcément plutôt PDF que JavaScript.
:joker:
20 mars 2009 à 17:03 #50024passifacileParticipantMerci pour la réponse : je vais donc “enquêter” du côté de javascript.
Bon week-end.
20 mars 2009 à 22:16 #50025MerlinMaître des clésEn fait le JavaScript “normal” n’est pas tellement différent de celui utilisé par Adobe, d’ailleurs le conseil de base c’est “de commencer par essayer de faire fonctionner le script”, le reste n’est qu’une question de nom de champs ou de propriétés…
:soleil:
23 mars 2009 à 06:57 #50026passifacileParticipantBonjour,
J’ai failli trouver la solution ce week-end en dénichant ce script :
if(event.willCommit)
{
console.println(event.value);
switch(event.value)
{
case “Philippe”:
thist.getField(“NoTel”).value = 0102030405;
break;
case “Edouard”:
thist.getField(“NoTel”).value = 0908070605;
break;
case “Jérôme”:
thist.getField(“NoTel”).value = 9988776655;
break;
default:
this.getField(“NoTel”).value = 0;
break;}
}Mais je suis toujours obligé d’insérer tous les éléments (Case…) dans la liste déroulante (liste des éléments) !
Alors, il me reste l’espoir qu’Alex se penche sur mon cas et s’y intéresse…
1’000 mercis d’avance.
23 mars 2009 à 19:02 #50027MerlinMaître des clésJe pense que c’est possible, il faut construire un “array” et un petit code en boucle qui va chercher toutes les données possibles.
Genre:
for (i = ++
Mais je n’en connais que les premières paroles…
:Euuuh:
24 mars 2009 à 06:48 #50028passifacileParticipantA défaut d’avoir trouver LA solution, j’ai trouvé UNE solution.
Attention : les personnes sensibles pourraient être choquées par ce qui suit. Je les invite donc à s’éloigner de leur écran le temps de ma démonstration.
1) Ouvrir le fichier PDF contenant une liste déroulante avec 1-2 élément(s) et les valeurs d’exportation correspondantes AVEC WORDPAD (Tiens, qui a crié “C’est un scandale !” ?);
2) Repérer la zone “élément-valeur d’exportation” (pour faciliter le repérage, au point 1, mettez des éléments facilement identifiables, par exemple “Tintin”, ou “Rackham le Rouge”) : ça se présente de la façon suivante :
endstream
endobj
35 0 obj
(400)
endobj
38 0 obj
(123)(Tintin)][(456)(Rackham le Rouge)
endobj3) Préparer dans un autre fichier (par exemple Excel) la liste des 3’487 éléments utiles sur deux colonnes (avec 2’000, ça marche aussi);
4) Dans la 3ème colonne, concaténer les deux premières avec insertion des parenthèses (avec une formule du style =”[(“&B2&”)(“&C2&”)] “; (Tiens, qui a dit “mais où veut-il en venir, bon sang !” ?)
5) Copier la troisième colonne et la coller dans un fichier Word;
6) Transformer le tableau Word en texte (convertir le tableau en texte avec l’option “séparer le texte avec des tabulations”);
7) Remplacer toutes les marques de tabulations par “” (rien); (Tiens, qui a dit “Plus compliqué, ça c’est sûr qu’il n’y a pas !”)
Copier les 3’487 éléments formatés, collés les uns derrières les autres, et les coller, dans Wordpad, à l’emplacement du fichier PDF ad hoc (voir point 2); (Tiens, qui a dit “C’est n’importe quoi !” ?)
9) Sauvegarder et fermer le fichier Wordpad.
10) Ouvrir le fichier PDF “bidouillé” et découvrir avec béatitude que la liste déroulante contient… les 3’487 éléments.
11) Remarquer avec satisfaction qu’il n’a pas été utile de taper les 3’487 éléments et leurs valeurs d’exportation dans la liste déroulante. (Tiens, qui a dit “Et je parie même qu’il est fier, celui-là ! Moi, à la place du Modérateur, je lui supprimerai son identifiant ! Il est limite dangereux” ?)
Bien entendu, et plus sérieusement (Tiens, qui a dit “OUF !”) si quelqu’un dispose de LA solution (propre et tout et tout…), je reste preneur.
Je prie les puristes, ou tout simplement les utilisateurs “normaux”, d’être indulgents et de comprendre que, en cas de situation désespérée, on peut être tenté de résoudre ses problèmes de façon… particulière et désespérée !
Bonne journée à toutes et à tous.
24 mars 2009 à 21:06 #50029MerlinMaître des clésMoi je dis : bravo !
Deux observations seulement :
– tu te simplifierais bien la vie en utilisant un éditeur de texte (“éditeur de”, pas “traitement de”) plutôt que de jongler entre Word & Wordpad.– après ouverture du PDF (final) dans Acrobat je te conseille de l’enregistrer-sous. Parce ta manip doit forcément le corrompre un peu quelque part et parce-que Acrobat (et Reader) réparent automatiquement les PDF (pas trop) défectueux lors de l’ouverture du fichier.
Enregistrer-sous permet de les “remettre à plat” (au carré, tip-top, pile-poil, enfin : bien quoi !).:bravo:
26 mars 2009 à 16:37 #50030cdiautomationMembrePour simplifer, la méthode utilisée au départ au moyen d’Excel, je le fait aussi assez souvent.
Par contre, je n’utilise pas Wordpad mais Notepad (pas de tabulation).Ensuite au niveau programme dans le PDF, j’utilise les tables :
var XXYYZZ = new Array(“Premier Nom”, “Deuxième Nom”, etc.)
Cette variable, je la fabrique depuis Excel et je recopie ce texte dans la zone “level document javascript”.
Ce niveau se trouve dans le menu “Options avancées => Traitement du document => Scripts Javascript”Pour ce faire, créer une nouvelle fonction par exemple “TableDocument” et lorsque vous cliquez sur le bouton “Ajouter”, votre éditeur (dans mon cas Notepad), s’ouvre sur le texte suivant :
function TableDocument()
{
}
Vous effacez tout ça et vous coller le texte fabriqué depuis Excel (var XXYYZZ “….”). Fermez – sauvez
Enregistrez votre document.Que se passe-t-il ?
A l’ouverture du document, Acrobat (complet ou Reader) va lire cette variable.
Pour retrouver la valeur “Premier Nom”, il faut appeler la variable avec un index commençant par 0.Dans mon exemple il faut écrire XXYYZZ[0], si vous tapez cela dans la console, celle-ci vous répondra “Premier Nom” (sans les guillemets).
J’ai vu que vous aviez une table à 2 colonnes, dans ce cas la variable s’écrit de la manière suivante :
var XXYYZZ = new Array([“Premier Nom”, “Téléphone 1”],[“Deuxième Nom”, “Téléphone 2”]);
Pour lire la variable cela devient : XXYYZZ[0][1] donnera comme réponse Téléphone 1
XXYYZZ[1][0] donnera comme réponse Deuxième NomJe n’ai pas regardé votre problème, mais cette manière de faire permet de gérer des champs, des popUp etc… (j’utilise pour ce faire la fonction for ( ) { } else{ })
Pour me simplifier la vie, j’utilise une base de donnée Access et l’import de fichier fdf, mais c’est un sujet long à traiter…
Je vous conseille de téléchargr, si ce n’est déjà fait, le pdf de référence chez Adobe (malheureusement que en Anglais)
http://www.adobe.com/devnet/acrobat/pdfs/js_api_reference.pdf (ce lien donne le fichier pour la version 8.1)C’est là dedans que j’ai pioché pas mal de mes solutions.
Si vous avez besoin d’aide, je veut bien, mais il en faudra pas être pressé, j’ai pas mal de travail ces temps.
29 mars 2009 à 20:30 #50031alexParticipantUn champ texte baptisé “texte1” va recevoir la liste des noms séparés ici par des virgules ou autre chose (caractère séparateur à définir)
Un second champ texte baptisé “texte2” va recevoir la liste des téléphones séparés ici par le même caractère séparateur.
En lançant le script ci-dessous vous remplirez automatiquement la liste déroulante baptisée “Liste” .
Les valeurs affichées sont les noms, les valeurs d’export sont les téléphones.function Remplissage()
{
console.clear();
tablenoms=new Array();
tabletels=new Array();
//Format csv, le caractère de séparation est le “;”
caracteresep=”,”;
//Remplissage de la table des noms à partir du texte 1
chaine=this.getField(“texte1”).value;
indice=0;
indiced=0;
index=0;
while(indice{
if(chaine.substring(indice,(indice+1))==caracteresep|indice==chaine.length-1)
{
tablenoms[index]=chaine.substring(indice,indiced)
console.println(index+”-“+tablenoms[index]);
indiced=indice+1;
index=index+1;
}
indice=indice+1;
}
//Remplissage de la table des téléphones à partir du texte 2
chaine=this.getField(“texte2”).value;
indice=0;
indiced=0;
index=0;
while(indice{
if(chaine.substring(indice,(indice+1))==caracteresep|indice==chaine.length-1)
{
tabletels[index]=chaine.substring(indice,indiced)
console.println(index+”-“+tabletels[index]);
indiced=indice+1;
index=index+1;
}
indice=indice+1;
}
//Remplissage du menu déroulant
index=tablenoms.length;
this.getField(“Liste”).clearItems();
while(index>0)
{
index=index-1;
this.getField(“Liste”).insertItemAt(tablenoms[index],tabletels[index]);
}
}Vous trouverez sur ce forum comment renseigner un champs (“Téléphone”) automatiquement sur sélection d’un item du menu déroulant “Liste” ou je fais un petit rappel?
Désolé Merlin, je vous ai un peu délaissé.
Amitiés à tous.30 mars 2009 à 07:54 #50032MerlinMaître des clésTrop fort !
:bravo:
30 mars 2009 à 15:05 #50033alexParticipantEnfin, dans le menu déroulant “Liste”, Onglet Format>Script de touches personnalisé, il faut à partir de l’évènement de sélection d’un item renseigner le champ de sortie baptisé ici “Telephone”.
if(!event.willCommit)
{
//mise à jour du champ Telephone
this.getField(“Telephone”).value=this.event.changeEx;
}Bonsoir à tous.
27 juin 2013 à 20:00 #50034club3dtextMembreUn champ texte baptisé “texte1” va recevoir la liste des noms séparés ici par des virgules ou autre chose (caractère séparateur à définir)
Un second champ texte baptisé “texte2” va recevoir la liste des téléphones séparés ici par le même caractère séparateur.
En lançant le script ci-dessous vous remplirez automatiquement la liste déroulante baptisée “Liste” .
Les valeurs affichées sont les noms, les valeurs d’export sont les téléphones.function Remplissage()
{
console.clear();
tablenoms=new Array();
tabletels=new Array();
//Format csv, le caractère de séparation est le “;”
caracteresep=”,”;
//Remplissage de la table des noms à partir du texte 1
chaine=this.getField(“texte1”).value;
indice=0;
indiced=0;
index=0;
while(indice{
if(chaine.substring(indice,(indice+1))==caracteresep|indice==chaine.length-1)
{
tablenoms[index]=chaine.substring(indice,indiced)
console.println(index+”-“+tablenoms[index]);
indiced=indice+1;
index=index+1;
}
indice=indice+1;
}
//Remplissage de la table des téléphones à partir du texte 2
chaine=this.getField(“texte2”).value;
indice=0;
indiced=0;
index=0;
while(indice{
if(chaine.substring(indice,(indice+1))==caracteresep|indice==chaine.length-1)
{
tabletels[index]=chaine.substring(indice,indiced)
console.println(index+”-“+tabletels[index]);
indiced=indice+1;
index=index+1;
}
indice=indice+1;
}
//Remplissage du menu déroulant
index=tablenoms.length;
this.getField(“Liste”).clearItems();
while(index>0)
{
index=index-1;
this.getField(“Liste”).insertItemAt(tablenoms[index],tabletels[index]);
}
}je voulais savoir ou place ce script et dans quel champ il faut le placer exactement. Un ptit peu d’explication m’aiderais beaucoup plus.
et encore pour ce script a mettre Enfin, dans le menu déroulant “Liste”, Onglet Format>Script de touches personnalisé, il faut à partir de l’évènement de sélection d’un item renseigner le champ de sortie baptisé ici “Telephone”.
if(!event.willCommit)
{
//mise à jour du champ Telephone
this.getField(“Telephone”).value=this.event.changeEx;
}Merci
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.