Donnez vie à vos documents numériques !
 

Impression

abracadabraPDF Forums PDF – Général Impression

  • Créateur
    Sujet
  • #71906
    michel 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

Affichage de 30 réponses de 1 à 30 (sur un total de 30)
  • Auteur
    Réponses
  • #71911
    michel 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 1 année et 5 mois par michel c..
    #71913
    bebarth
    Maître des clés
    bonjour,
    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.
    #71922
    michel c.
    Participant

    J’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

    print_test-1.2_BB

    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    #71928
    destylast
    Participant

    La 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.

    #71929
    michel c.
    Participant

    Pour 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.

    #71933
    michel c.
    Participant

    J’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

    print_test-1.3_BB

    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    #71937
    destylast
    Participant

    avec 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.
    #71940
    michel c.
    Participant

    Oui, 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

    #71949
    bebarth
    Maître des clés

    Voici !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #71953
    michel c.
    Participant

    Merci 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

    #71956
    bebarth
    Maître des clés

    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 !

    @+
    😎

    #71957
    Merlin
    Maître des clés

    mais 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.

     

    #71960
    michel c.
    Participant

    bebarth 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.

     

    print_test-1.6_BB.pdf

    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    #71964
    bebarth
    Maître des clés

    Contrairement à 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 !

    @+
    😎

    #71968
    michel c.
    Participant

    Je vais potasser un peu ça ou alors essayer de trouver une astuce pour que ça fonctionne en imprimant une plage de pages.

    #71969
    michel c.
    Participant

    Je viens de penser à 2 façons de contourner le problème mais je ne sais pas si c’est possible.

    1. 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.
    2. 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

    #71973
    bebarth
    Maître des clés

    Pour 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.

    @+
    😎

    #71976
    bebarth
    Maître des clés

    Voici 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 1 année et 5 mois par bebarth.
    • Cette réponse a été modifiée le il y a 1 année et 5 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    #71983
    michel c.
    Participant

    Par 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

    #71984
    bebarth
    Maître des clés

    bonjour,
    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…

    @+
    😎

    #71986
    michel c.
    Participant

    Je 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 1 année et 5 mois par michel c..
    #71994
    michel c.
    Participant

    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” :

    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 1 année et 5 mois par michel c..
    #71996
    Merlin
    Maître des clés

    C’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);

     

     

    #71997
    bebarth
    Maître des clés
    bonjour,

    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…

    @+
    😎

    #71999
    bebarth
    Maître des clés

    bonjour,
    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 !

    @+
    😎

    #72000
    michel c.
    Participant

    Alors 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 1 année et 5 mois par michel c..
    #72023
    destylast
    Participant

    Bonjour,

    je trouve ton formulaire lourd, il bug chez moi pas simple pour tout tester.

    #72024
    michel c.
    Participant

    Le 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 1 année et 5 mois par michel c..
    #72034
    bebarth
    Maître des clés

    bonjour,
    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 !

    @+
    😎

    #72112
    destylast
    Participant

    Bonjour,

    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.

Affichage de 30 réponses de 1 à 30 (sur un total de 30)
  • Vous devez être connecté pour répondre à ce sujet.