abracadabraPDF › Forums › PDF – Général › Dupliquer une page grâce à une liste déroulante
- Ce sujet est vide.
-
CréateurSujet
-
11 août 2014 à 16:33 #44925psykolivierMembre
Hello,
Une nouvelle question, car là je n’ai trouvé aucune info
Autant dupliquer des valeurs de champs, ca semble easy. Mais là j’aimerai pouvoir dupliquer des pages PDF.Explication, sur ma page 1, grâce à une liste déroulante je peux choisir 1, 2, 3 ou 4.
Et donc en fonction, cela me duplique la page 2 en x1, x2, x3 ou x4.Merci pour votre aide !
-
CréateurSujet
-
AuteurRéponses
-
11 août 2014 à 20:26 #57502MerlinMaître des clés
Bonjour,
La duplication de page ne peut fonctionner qu’avec Acrobat, pas avec Adobe Reader.
On continue ?
:idee:12 août 2014 à 07:44 #57503psykolivierMembreLa conception du formulaire est faites avec Acrobat Pro oui.
Mais la consultation sera faire avec Acrobat Reader dans la très grande majorité des cas je pense.
C’est là que ça coince ?12 août 2014 à 10:03 #57504MerlinMaître des clésC’est là que ça coince ?
Exactement.
Il va falloir trouver une autre méthode ou une autre solution…
:joker:12 août 2014 à 10:29 #57505psykolivierMembreArf OK.
Bon d’un côté ca me rassure, j’ai tellement trifouillé du script sans réussirJ’ai cru comprendre qu’il était possible de “cacher” des pages.
Autrement-dit, il serait possible d’avoir la même page 4 fois, toute cacher.
Et grâce au choix du menu déroulant, les rendre visibles… je vais testouillé vers cette piste.12 août 2014 à 12:46 #57506psykolivierMembreJ’avance dans ma recherche…
A priori, il faut pouvoir nommer les pages pour pouvoir les identifier en template (un simple “Page 2” ne semble pas convenir).
Et ensuite, utiliser “spawn” pour dupliquer la page.Par exemple :
var MyTemplate;
MyTemplate = this.getTemplate(“AssoAdhesion”);
MyTemplate.spawn (this.pageNums);Seulement, je n’ai pas encore trouvé où nommer mes pages-templates. Je n’ai pas cette option dans mes outils.
Et je ne comprends pas trop l’intérêt de “pageNums”
12 août 2014 à 12:59 #57507psykolivierMembreSeulement, je n’ai pas encore trouvé où nommer mes pages-templates. Je n’ai pas cette option dans mes outils.
Pour ce point c’est trouvé !
Bien cachéDans le tout petit icône “Afficher ou masquer les panneaux”.
Et activer “Traitement du document”J’avais jamais autant trifouiller dans Acrobat
Bon reste à faire la suite…
12 août 2014 à 13:36 #57508psykolivierMembreCa avance, ca avance…
Voici mon état d’avancement.
– Ma PAGE 1 présente une formulaire qui permet entre autre de choisir le nombre d’adhérents (jusqu’à 6) – régler à 0 à l’ouverture.
– Ma PAGE 2 est nommée en template ADHERENT
– Ma PAGE 2 est cachée, pour ne pas être visible à l’ouverture– Sur ma PAGE 1, je valide mon formulaire par un bouton et une action javascript.
Avec notamment cette partie, pour afficher/créer autant de fiche adhérent que nécessaire :Code://ADHERENTS
var NewPage = getTemplate(“ADHERENT”);
var TotalAdherents = this.getField(“NOMBRE_ADHERENTS”).value;if (TotalAdherents >= 0) {
for (var i =0; i < TotalAdherents; i++) {
NewPage.spawn(numPages,true,false);
}
}De base, ca fonctionne.
Mais 2 points me posent encore un petit soucis.1 : les pages ajoutées s’ajoutent à la fin de mon PDF.
Or, cela doit s’ajouter après la page 1.
J’imagine que cela se joue avec “numPages”, mais je ne pige pas très bien le principe avec true, false2 : Si au départ, j’ai choisir 2 adhérents, cela m’ajoute 2 fiches : OK
Mais si finalement je veux mettre 3, cela m’ajoute +3 fiches.
Je m’en retrouve donc avec 5 !
Arf… je ne trouve pas comment détecter le nombre de fiche déjà “spawner” pour ne créer que les supplémentaires, et par reprendre à 0.Et effet inverse.
Si j’avais choisi 3, cela me créé 3 fiches.
Mais si je change à 2, cela me rajoute 2 fiches.
Donc au total 5 fiches.
Alors que l’idéal serait de détecter le nombre déjà de fiches déjà “spawner” pour supprimer celle(s) en trop.Bref… dans les 2 cas, c’est une détection de nombre total de fiche déjà présentes.
12 août 2014 à 16:35 #57509psykolivierMembrePour l’ordre de “spawn” des pages, j’ai fais un truc pas très propre… mais qui fonctionne.
Code://ADHERENTS
var NewPage = getTemplate(“ADHERENT”);
var TotalAdherents = this.getField(“NOMBRE_ADHERENTS”).value;var j = pageNum;
if (TotalAdherents >= 0) {
for (var i =0; i < TotalAdherents; i++) {
NewPage.spawn({nPage: j + 1, bRename: false, bOverlay: false});
j = j+1;
}
}Me reste mon soucis de pages en trop
12 août 2014 à 18:29 #57510MerlinMaître des clésScuse, j’ai répondu par habitude.
Mais effectivement dans Adobe Reader XI (et certainement aussi dans les versions à venir) ça fonctionne très bien, sous réserve d’enregistrer la page à dupliquer comme “modèle”.
Je prépare un article sur le sujet (après les vacances…), en attendant il y a un exemple à télécharger ici : http://abracadabrapdf.net/file/ReaderXI_trombinoscope_demo.pdf:Smiley01:
13 août 2014 à 07:18 #57511psykolivierMembreHello,
Je viens de tester ton fichier d’exemple, avec la duplication de template (modèle).
Cette partie là c’était OK.
Mais comment faire pour savoir combien de duplication ont été créé au total ?un truc du genre : template(“MonModele”).count :idee:
/// EDIT ///
Ceci étant, le sujet initial de la duplication est réglé
Mon code un peu tordu :
Code://ADHERENTS
var NewPageA = getTemplate(“ADHERENT”);
var NewPageB = getTemplate(“ADHERENT_COMPLETEMENT”);
var TotalAdherents = this.getField(“NOMBRE_ADHERENTS”).value;var j = pageNum;
if (TotalAdherents > 0) {
for (var i =0; i < TotalAdherents; i++) {
NewPageA.spawn({nPage: j + 1, bRename: false, bOverlay: false});
NewPageB.spawn({nPage: j + 2, bRename: false, bOverlay: false});
j = j+2;
}
}Je me permets d’ouvrir un autre sujet pour la suite de mon questionnement
13 août 2014 à 12:32 #57512MerlinMaître des clésMais comment faire pour savoir combien de duplication ont été créé au total ?
Il faut les compter et les additionner en utilisant JavaScript, en espérant avoir prévu tous les cas de figure…
Une bonne galère en perspective.
:tutut:13 août 2014 à 14:38 #57513psykolivierMembreUne bonne galère en perspective.
LoL ok
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.