abracadabraPDF › Forums › PDF – Général › Impression
- Ce sujet contient 30 réponses, 4 participants et a été mis à jour pour la dernière fois par destylast, le il y a 2 années et 1 mois.
-
CréateurSujet
-
16 novembre 2022 à 08:55 #71906michel c.Participant
Bonjour, j’ai un document de plusieurs pages et j’aimerais que lorsque je clique sur le bouton imprimer une boite de dialogue s’ouvre dans laquelle je peux cocher les noms des pages que je souhaite imprimer (champs nom.1 à nom.5 proposés)
et j’aimerais également que les champs vides ne soient pas imprimés.
Pour la 2ème demande, j’ai essayé d’utiliser le script trouvé ICI mais ça n’a rien donné
Merci
-
CréateurSujet
-
AuteurRéponses
-
16 novembre 2022 à 17:56 #71911michel c.Participant
A priori il faut que j’utilise plutôt une liste qu’une liste déroulante afin pouvoir faire une sélection multiple.
- Cette réponse a été modifiée le il y a 2 années et 2 mois par michel c..
16 novembre 2022 à 21:44 #71913bebarthMaître des clésbonjour,
Voici un exemple de boite de dialogue personnalisée que l’on pourrait adapter.et j’aimerais également que les champs vides ne soient pas imprimés.
Ce ne sont que des champ texte ?
@+
😎Attachments:
You must be logged in to view attached files.17 novembre 2022 à 10:14 #71922michel c.ParticipantJ’ai adapté ta solution à mon document, mais j’ai quelques soucis :
- J’ai un décalage entre la page choisie et la page imprimée
- Je n’arrive à choisir le format de la page ni l’imprimante
- J’ai un problème d’impression : ça imprime une plage de pages et non pas des pages spécifiées.
Merci
- Cette réponse a été modifiée le il y a 2 années et 2 mois par michel c..
- Cette réponse a été modifiée le il y a 2 années et 2 mois par michel c..
- Cette réponse a été modifiée le il y a 2 années et 2 mois par michel c..
- Cette réponse a été modifiée le il y a 2 années et 2 mois par michel c..
- Cette réponse a été modifiée le il y a 2 années et 2 mois par michel c..
- Cette réponse a été modifiée le il y a 2 années et 2 mois par michel c..
- Cette réponse a été modifiée le il y a 2 années et 2 mois par michel c..
17 novembre 2022 à 10:30 #71928destylastParticipantLa question pourquoi pas utiliser la boite de dialogue de l’impression qui est beaucoup plus pratique et où tu peux déjà choisir les pages que tu souhaites imprimer avec comme une prévisualisions de ton document.
17 novembre 2022 à 10:40 #71929michel c.ParticipantPour cela il faut que je note sur un post-it le nom des élèves dont je souhaite imprimer la fiche avec le numéro de page qui correspond.
Là je coche directement les noms des élèves dont je souhaite imprimer les fiches. Et comme il y a environ 30 élèves par classe et parfois un enseignant a 10 classes, à l’approche du conseil de classe, le gain de temps est assez énorme.
17 novembre 2022 à 10:57 #71933michel c.ParticipantJ’ai réussi à résoudre certains trucs :
J’ai un décalage entre la page choisie et la page imprimée : c’est bon
- J’arrive à choisir le format de la page et l’imprimante
- J’ai toujours ce problème d’impression d’une plage de pages et non pas des pages spécifiées.
Par exemple si je choisis d’imprimer la page de l’élève 20 (page 21) ; celle de l’élève 25 (page 26) et celle de l’élève 30 (page 31), alors ça me lance l’impression des pages 21 à 33 puis l’impression des pages 26 à 33 et enfin l’impression des pages 31 à 33.
Il faudrait pour bien faire que j’ai uniquement ces 3 pages de lancées en une seule impression (à chaque impression nous devons saisir le code de l’imprimante)
Je pense qu’il y a une solution dans ce code que j’ai trouvé sur le net et qu’il faut que j’adapte :
var pp = this.getPrintParams();
var printRange = [];
printRange.push([0,0]); // print page 1
printRange.push([2,2]); // print page 3
printRange.push([4,4]); // print page 5
printRange.push([7,7]); // print page 8
pp.printRange = printRange;
this.print(pp);
Pas sur que j’y arrive rapidement
Merci
17 novembre 2022 à 12:18 #71937destylastParticipantavec ton bouton d’impression impossible d’avoir toute la liste il faudrait une liste déroulante, et je ne vois même pas le bouton final pour imprimer.
En pj l’explication.
Attachments:
You must be logged in to view attached files.17 novembre 2022 à 14:46 #71940michel c.ParticipantOui, effectivement, je cherche comment avoir les éléments de la dialog box organisés différemment (en 2 ou 3 colonnes ce serait bien).
Si tu as la réponse, je suis preneur.
Merci
17 novembre 2022 à 22:32 #7194918 novembre 2022 à 00:24 #71953michel c.ParticipantMerci pour la mise en page en 3 colonnes de la dialog box. Je n’aurais pas trouvé tout seul.
Par contre, il y a toujours un bug lors de l’impression mais celui-ci n’est pas présent avec adobe reader DC (ce qui est dommage car au lycée nous avons acheté la licence pour le logiciel PDFXChange Editor)
Lorsque je sélectionne par exemple la page 1 et la page 3, cela lance 2 impressions.
Sur la 1ère il y a les pages 1 ; 2 ; 3 ; 4 et 5 et sur la 2ème impression, les pages 3 ; 4 et 5
J’ai le même bug pour chaque impression demandée, sauf si je demande uniquement la page 5.
Si je demande l’impression de toutes les pages, alors j’aurais 5 impressions lancées :
- toutes les pages
- les pages 2 ; 3 ; 4 et 5
- les pages 3 ; 4 et 5
- les pages 4 et 5
- la page 5
Avec adobe reader j’ai une impression pour chaque page demandée. C’est mieux mais pas très pratique car à chaque impression je dois saisir le code du photocopieur. Je ne sais pas si il est possible d’avoir toutes les pages cochées en une seule impression.
Merci
18 novembre 2022 à 14:20 #71956bebarthMaître des clésbonjour,
Essaye avec :
...
eval("if (theCB"+i+"==true) {console.println(\"Nom Page \"+"+(i+1)+");this.print({bUI: false, nStart: "+i+", nEnd: "+i+"});}");
...
mais normalement lorsqu’on n’indique pas nEnd, seule la page nStart est imprimée !@+
😎18 novembre 2022 à 15:41 #71957MerlinMaître des clésmais normalement lorsqu’on n’indique pas nEnd, seule la page nStart est imprimée !
Il faut se méfier de ces raccourcis (propres à Adobe ?) qui ne fonctionnent pas dans tous les logiciels, j’en ai aussi fait l’amère expérience avec Foxit.
18 novembre 2022 à 16:23 #71960michel c.Participantbebarth wrote:
bonjour, Essaye avec :... eval("if (theCB"+i+"==true) {console.println(\"Nom Page \"+"+(i+1)+");this.print({bUI: false, nStart: "+i+", nEnd: "+i+"});}"); ... mais normalement lorsqu’on n’indique pas nEnd, seule la page nStart est imprimée ! @+
Merci !
Là ça fonctionne bien mieux avec le soft que l’on utilise au boulot.Seules les pages demandées sont imprimées. Elles ne sont toujours pas regroupées dans une seule impression ce qui empêche de faire du recto-verso et qui oblige à saisir le code du photocopieur pour chaque page.
Par contre avec adobe reader DC, ça reste bloqué sur la console qui affiche : “Les pages à imprimer sont :” et c’est tout, rien ne se passe après.
- Cette réponse a été modifiée le il y a 2 années et 1 mois par michel c..
18 novembre 2022 à 16:36 #71964bebarthMaître des clésContrairement à l’interface utilisateur, le JavaScript ne permet d’imprimer que des plages de pages, on est donc obligé de créer plusieurs impressions et donc pas (ou pas complètement) de recto/verso.
La solution serait peut-être de mettre toutes les pas imprimables en pages modèles et de cacher celles qui ne sont pas imprimées, cela permettrait de faire du recto/verso. On re-affiche toutes les pages après l’impression !@+
😎18 novembre 2022 à 20:25 #71968michel c.ParticipantJe vais potasser un peu ça ou alors essayer de trouver une astuce pour que ça fonctionne en imprimant une plage de pages.
18 novembre 2022 à 23:15 #71969michel c.ParticipantJe viens de penser à 2 façons de contourner le problème mais je ne sais pas si c’est possible.
- Serait il possible qu’après avoir cochée les pages à imprimer, le script supprime du document celles qui n’ont pas été cochées, lance l’impression de la totalité des pages puis annule l’opération de suppression des pages.
- Sinon même chose mais juste après l’impression, le document est automatiquement sauvegardé sous un autre nom pour ne pas écraser le fichier original et ne pas se retrouver avec des pages en moins.
Merci
19 novembre 2022 à 15:01 #71973bebarthMaître des clésPour le 1 c’est ce qui se passe avec les pages modèles sauf qu’elles sont juste cachées et non supprimées.
Je vais essayer de faire quelque chose ce soir….
il est possible de cocher les cases de la boîte de dialogue par défaut si ça t’intéresse. Ça dépend si la majeure partie du temps il y a plus de cases cochées ou non cochées. Tu me dis.
@+
😎19 novembre 2022 à 20:48 #71976bebarthMaître des clésVoici ce que ça pourrait donner… peut-être un peut long (17 s pou l’impression de toutes les pages), mais tout est relatif !
Attention, pour les 2 script, l’instruction d’impression est désactivé. Il faudra supprimer les 2 slash en début de ligne:
this.print({bUI: false});
Le lien pour télécharger l’exemple : https://we.tl/t-swe5I6wAd7
… et j’ai oublié, le script pour créer une page modèle pour toutes les pages :
for (var i=0; i<this.numPages; i++) {
if (i<10) var t=this.createTemplate({cName:"pageModele.0"+i, nPage: i});
else var t=this.createTemplate({cName:"pageModele."+i, nPage: i});
}
@+
😎- Cette réponse a été modifiée le il y a 2 années et 1 mois par bebarth.
- Cette réponse a été modifiée le il y a 2 années et 1 mois par bebarth.
Attachments:
You must be logged in to view attached files.20 novembre 2022 à 08:18 #71983michel c.ParticipantPar contre je ne vois pas ou placer ce script.
J’ai essayé plusieurs choses et j’ai à chaque fois le même message d’erreur :
Début du process : 20/11/2022 – 08:16:30
Field:Mouse Up:256: TypeError: t is undefined
20 novembre 2022 à 10:16 #71984bebarthMaître des clésbonjour,
Le message signifie que le script n’a pas trouvé de page modèle. J’imagine donc qu’il apparait depuis ton document !
Il faut donc créer les pages modèles sur ton document avec ce script :
for (var i=0; i<this.numPages; i++) {
if (i<10) var t=this.createTemplate({cName:"pageModele.0"+i, nPage: i});
else var t=this.createTemplate({cName:"pageModele."+i, nPage: i});
}
mais on ne peut pas l’exécuter depuis un bouton, donc soit via la console ou une action.
Le script d’impression devrait marcher beaucoup mieux ensuite…@+
😎20 novembre 2022 à 16:18 #71986michel c.ParticipantJe l’ai exécuté depuis la console.
Je n’ai plus le message d’erreur, du coup lorsque je clique sur le bouton, la console me renvoie le message suivant :
Début du process : 20/11/2022 – 16:05:29
Pages à imprimer : 20,32
Fin du process : 20/11/2022 – 16:05:29
Durée :
Mais par contre l’impression ne se lancait pas.
J’ai réactivé la ligne
// this.print({bUI: false});
Après ça l’impression se lançait mais pour toutes les pages.
Du coup, j’ai essayé de remplacer cette ligne par :
this.print({bUI: true, nStart: "+i+", nEnd: "+i+"});
var t=this.templates;
var bDialog={
DoDialog: function(){return app.execDialog(this);},
validate: function(bDialog) {
oRslt=bDialog.store();
for (var i=0; i<t.length; i++) {
if (i<10) eval("theCB"+i+"=oRslt[\"cb0"+i+"\"];");
else eval("theCB"+i+"=oRslt[\"cb"+i+"\"];");
}
testOK1=1;
var condition="if (";
for (var i=0; i<t.length; i++) {
if (i!=0) condition+=" && ";
condition+="theCB"+i+"==false";
}
condition+=") testOK1=0;";
eval(condition);
var alertReturn=(testOK1);
if(!alertReturn) app.alert("\nSélectionnez au moins une page à imprimer.");
return alertReturn;
},
description: {
name: "Dialog",
align_children: "align_top",
elements: [
{
type: "view",
align_children: "align_left",
elements: [
{
type: "cluster",
name: "Fiches à imprimer",
align_children: "align_top",
elements: [
{
type: "view",
char_width: 10,
char_height: 3,
elements: [
{
type: "view",
align_children: "align_top",
elements: [
{
type: "view",
width: 80,
elements: [
{
type: "check_box",
item_id: "cb00",
name: "Plan de salle"
},
{
type: "check_box",
item_id: "cb01",
name: this.getField("agoto.1").value
},
{
type: "check_box",
item_id: "cb02",
name: this.getField("agoto.2").value
},
{
type: "check_box",
item_id: "cb03",
name: this.getField("agoto.3").value
},
{
type: "check_box",
item_id: "cb04",
name: this.getField("agoto.4").value
},
{
type: "check_box",
item_id: "cb05",
name: this.getField("agoto.5").value
},
{
type: "check_box",
item_id: "cb06",
name: this.getField("agoto.6").value
},
{
type: "check_box",
item_id: "cb07",
name: this.getField("agoto.7").value
},
{
type: "check_box",
item_id: "cb08",
name: this.getField("agoto.8").value
},
{
type: "check_box",
item_id: "cb09",
name: this.getField("agoto.9").value
},
{
type: "check_box",
item_id: "cb10",
name: this.getField("agoto.10").value
},
]
},
{
type: "view",
width: 80,
elements: [
{
type: "check_box",
item_id: "cb11",
name: this.getField("agoto.11").value
},
{
type: "check_box",
item_id: "cb12",
name: this.getField("agoto.12").value
},
{
type: "check_box",
item_id: "cb13",
name: this.getField("agoto.13").value
},
{
type: "check_box",
item_id: "cb14",
name: this.getField("agoto.14").value
},
{
type: "check_box",
item_id: "cb15",
name: this.getField("agoto.15").value
},
{
type: "check_box",
item_id: "cb16",
name: this.getField("agoto.16").value
},
{
type: "check_box",
item_id: "cb17",
name: this.getField("agoto.17").value
},
{
type: "check_box",
item_id: "cb18",
name: this.getField("agoto.18").value
},
{
type: "check_box",
item_id: "cb19",
name: this.getField("agoto.19").value
},
{
type: "check_box",
item_id: "cb20",
name: this.getField("agoto.20").value
},
{
type: "check_box",
item_id: "cb21",
name: this.getField("agoto.21").value
},
]
},
{
type: "view",
width: 80,
elements: [
{
type: "check_box",
item_id: "cb22",
name: this.getField("agoto.22").value
},
{
type: "check_box",
item_id: "cb23",
name: this.getField("agoto.23").value
},
{
type: "check_box",
item_id: "cb24",
name: this.getField("agoto.24").value
},
{
type: "check_box",
item_id: "cb25",
name: this.getField("agoto.25").value
},
{
type: "check_box",
item_id: "cb26",
name: this.getField("agoto.26").value
},
{
type: "check_box",
item_id: "cb27",
name: this.getField("agoto.27").value
},
{
type: "check_box",
item_id: "cb28",
name: this.getField("agoto.28").value
},
{
type: "check_box",
item_id: "cb29",
name: this.getField("agoto.29").value
},
{
type: "check_box",
item_id: "cb30",
name: this.getField("agoto.30").value
},
{
type: "check_box",
item_id: "cb31",
name: this.getField("agoto.31").value
},
{
type: "check_box",
item_id: "cb32",
name: this.getField("agoto.32").value
},
]
},
]
},
]
},
]
},
{
alignment: "align_right",
type: "ok_cancel",
},
]
},
]
}
};
if("ok"==bDialog.DoDialog()) {
//
d0=new Date();
debut=util.printd("dd/mm/yyyy – HH:MM:ss",d0);
console.show();
console.clear();
console.println("Début du process : "+debut);
//
var lesPages=[];
for (var i=0; i<t.length; i++) eval("if (theCB"+i+"==true) lesPages.push("+i+");");
console.println("Pages à imprimer : "+lesPages);
for (var i=0; i<t.length; i++) t.hidden=true;
for (var i=0; i<lesPages.length; i++) t[lesPages].hidden=false;
if (lesPages[lesPages.length-1]!=t.length-1) t[t.length-1].hidden=true;
this.print({bUI: true, nStart: "+i+", nEnd: "+i+"});
for (var i=0; i<t.length; i++) {
t.hidden=true;
t.hidden=false;
}
//
df=new Date();
fin=util.printd("dd/mm/yyyy – HH:MM:ss",df);
console.println("Fin du process : "+fin);
temps=(df.valueOf()-d0.valueOf())/1000/60;
var lesMinutes=parseInt(temps);
var lesSecondes=(temps-lesMinutes)*60;
var lesSecondes=parseInt(lesSecondes*10)/10;
var leTemps="";
if (lesMinutes>0) {
if (lesMinutes==1) var leTemps="1 minute";
else var leTemps=lesMinutes+" minutes";
}
if (lesSecondes>0) {
if (lesSecondes<2) var leTemps=leTemps+" "+lesSecondes+" seconde";
else var leTemps=leTemps+" "+lesSecondes+" secondes";
}
var leTemps=leTemps.replace(/^\s+|\s+$/gm,"");
console.println("Durée : "+leTemps);
//
}
Mais là seulement la 1ère page s’imprime.
Je vais continuer de creuser…
- Cette réponse a été modifiée le il y a 2 années et 1 mois par michel c..
21 novembre 2022 à 17:12 #71994michel c.ParticipantJe viens de penser à une autre option : mettre une checkbox (CB.n) devant chaque champ agoto.n qui serait cochée si on souhaite imprimer la fiche de cet élève puis ce script affecté au bouton “imprimer” :
var pp = this.getPrintParams();
var printRange = [];
if (this.getField("CB.1").value = 1) {printRange.push([1,1]);}
if (this.getField("CB.2").value = 1) {printRange.push([2,2]);}
if (this.getField("CB.3").value = 1) {printRange.push([3,3]);}
.
.
.
if (this.getField("CB.32").value = 1) {printRange.push([32,32]);}
this.print(pp);
Mais ça ne fonctionne pas, lorsque je clique sur imprimer, toutes les pages sont imprimées…
- Cette réponse a été modifiée le il y a 2 années et 1 mois par michel c..
21 novembre 2022 à 18:12 #71996MerlinMaître des clésC’est parce-que tu as oublié que comparer l’égalité c’est avec == (et non pas avec =)
😉
Si en plus on utilise une boucle ça nous donne :
var pp = this.getPrintParams();
var printRange = [];
for (var i = 1; i < 33; i++) {
if (this.getField("CB." + i).value == 1) {printRange.push([i,i]);}
}
// console.println("printRange: " + printRange);
this.print(pp);
21 novembre 2022 à 20:59 #71997bebarthMaître des clésbonjour,Après ça l’impression se lançait mais pour toutes les pages.
Je suis désolé d’apprendre que ce script ne fonctionne pas avec ton logiciel alors qui fonctionne parfaitement avec Acrobat !
Voici un nouveau lien pour ceux que ça intéresse car il y avait une inversion de page dans certains cas avec la version précédente.
La modification est en fin de script :
...
for (var i=0; i<lesPages.length; i++) t[lesPages].hidden=false;
t[t.length-1].hidden=true;
if (lesPages[lesPages.length-1]==t.length-1) t[t.length-1].hidden=false;
this.print({bUI: false});
...
N’oubliez-pas de supprimer les 2 slashs dans le script du fichier exemple.
Je viens de penser à une autre option : mettre une checkbox (CB.n) devant chaque champ agoto.n qui serait cochée si on souhaite imprimer la fiche de cet élève puis ce script affecté au bouton « imprimer » :
Je n’avais pas pensé au paramètre “printRange”, et on pourrait faire la même chose avec la boite de dialogue…
@+
😎22 novembre 2022 à 08:45 #71999bebarthMaître des clésbonjour,
Voici un lien pour la boite de dialogue et le paramètre printRange :
https://we.tl/t-Jer1xMZsPB
… le temps d’exécution est réellement meilleur et je pense que c’est la bonne solution !@+
😎22 novembre 2022 à 13:03 #72000michel c.ParticipantAlors là, un grand merci, je commençais à désespérer. Ça fonctionne nickel.
Je vais me plonger dans le script pour essayer d’apprendre quelques trucs, mais en le regardant en diagonale, ce n’est pas de mon niveau…
La précédente méthode ne marchait pas chez moi, même avec acrobat Reader (version gratuite)
- Cette réponse a été modifiée le il y a 2 années et 1 mois par michel c..
23 novembre 2022 à 08:48 #72023destylastParticipantBonjour,
je trouve ton formulaire lourd, il bug chez moi pas simple pour tout tester.
23 novembre 2022 à 09:04 #72024michel c.ParticipantLe formulaire est lourd car il y a beaucoup de champs et de pages je suppose.
Chez moi et au boulot, il n’y a pas de bug et l’exécution est très rapide (aussi bien avec PDF XChange Editor qu’avec adobe acrobat reader DC), aucun ralentissement mais mon pc est assez récent. Celui du boulot et moins performant et moins récent mais ça n’est pas lent non plus.
Peux tu poster les messages d’erreurs renvoyés par la console s’il y en a ?
Si tu as une idée ou des pistes pour améliorer le formulaire, je suis preneur.
Merci
- Cette réponse a été modifiée le il y a 2 années et 1 mois par michel c..
23 novembre 2022 à 19:12 #72034bebarthMaître des clésbonjour,
Je n’ai pas étudié entièrement le fichier, mais lorsqu’il y a beaucoup de champs et de scripts, il vaut mieux éviter les scripts de calcul qui sont exécutés à chaque fois qu’un des champs du formulaire passe par l’événement « Champ désactivé ».L’ordre d’exécution des événements dans les champs de formulaire PDF
Il vaut donc mieux préférer un autre déclencheur… quand c’est possible !@+
😎1 décembre 2022 à 11:28 #72112destylastParticipantBonjour,
Avec mes formulaires, je tourne sur PC et IMAC, mais l’essentiel est réaliser sur PC vieux de 10 ans avec changement de disque SSD, mais pas du M2 et mémoire à 16 Go et les problèmes qui j’ai eu avec ton formulaire et que j’avais surtout trop de dossier ouvert et après avoir réduit cela tourne bien, mais avec des ralentissements voici donc mon retour sur ton formulaire.
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.