Donnez vie à vos documents numériques !
 

Script d’impression se lance sur Acrobat Pro mais pas sur Acrobat Reader

abracadabraPDF Forums PDF – Général Script d’impression se lance sur Acrobat Pro mais pas sur Acrobat Reader

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #46664
    Prop0f0L
    Participant

    Bonjour à tous,

    Encore un grand merci à ce super forum et leur admins qui m'a permis d'avancer beaucoup de projets avec autonomie  :extra:
    Mais là je planche malgré mes recherches… :Euuuh:

    J'ai créé un pdf dont le bouton final a pour but de lancer une impression si toutes mes conditions sont remplies.
    Si tel est le cas, le script affiche les pages modèles devant être imprimées, juste avant le “this.print”.
    Tout fonctionne sur Acrobat Pro, mais sur la visionneuse simple, le script bloque sur la demande d'affichage des pages modèles…
    Une idée de la raison de ce problème ? Les modèles de pages (ou leur affichage/masquage) ne seraient pas gérées par Reader ?

    Voilà un simplifié de la fin du script :

    if(this.getField(“CB1”).isBoxChecked(0) && this.getField(“CB7”).isBoxChecked(0))
    {this.getTemplate(“G5PROX”).hidden = false;}
    this.print({bShrinkToFit: true});

    J'ai essayé de remplacer this.getTemplate(“G5PROX”).hidden = false par le fameux this.getTemplate(“G5PROX”).spawn….. trouvé sur le site, mais  le problème est le même…

    NB : le script avec les conditions fonctionne et sont bien exécutées.
    Merci !  :soleil:

Affichage de 11 réponses de 1 à 11 (sur un total de 11)
  • Auteur
    Réponses
  • #69659
    bebarth
    Maître des clés

    bonjour,
    Si tu regardes cette propriété, tu t'apercevras qu'elle n'est plus utilisable depuis Adobe Reader 7 (• For Adobe Reader 7.0, this property cannot be set under any circumstances.) :
    https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/html2015/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FTemplate_properties.htm%23TOC_hidden3bc-1&rhtocid=_6_1_8_74_0_0
    Pour réaliser ce que tu veux faire avec Adobe Reader, il faut donc ajouter une page à ton document à partir d'une page modèle (spawnPageFromTemplate) ou la supprimer avec deletePage (Beginning with version 6.0, this method deletes spawned pages from within Adobe Reader for documents with forms usage rights enabled.).
    https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/html2015/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FDoc_methods.htm%23TOC_spawnPageFromTemplatebc-105&rhtocid=_6_1_8_23_1_104
    https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/html2015/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FDoc_methods.htm%23TOC_deletePagesbc-20&rhtocid=_6_1_8_23_1_19
    @+
    :bonjour:

    #69660
    Merlin
    Maître des clés

    Oui, Acrobat Reader ne peut pas afficher/masquer des Templates.
    Par-contre il* peut générer (spawn) des pages à partir de Templates et il peut supprimer les pages ainsi générées (mais il peut pas supprimer les pages statiques).

    Bizarrement, Foxit Reader permet lui aussi de générer des pages à partir de Templates mais pas de supprimer les pages ainsi générées…  :oh:

    * (Acrobat Reader DC et Adobe Reader XI seulement, pas les versions antérieures)

    #69661
    Prop0f0L
    Participant

    Merci à vous deux pour vos réponses !

    il peut supprimer les pages ainsi générées (mais il peut pas supprimer les pages statiques).

    Alors je crois qu'un problème sera impossible à résoudre …
    Je voudrai effectivement supprimer une page avant l'impression (pour qu'ellene soit pas imprimée), et la faire réapparaître après l'impression.
    Or cette page est un modèle, et non une page spawn à partir de ce modèle…
    Une idée de bidouille pour contourner ceci ?

    #69662
    Merlin
    Maître des clés

    Pas besoin de bidouiller, la solution est simple.
    Il faut générer une page à partir du template et masquer le template.

    Cette page générée “non statique” peut donc être supprimée avant l'impression, et re-générée ensuite à partir du template masqué.

    :Smiley15:

    #69663
    Merlin
    Maître des clés

    L'autre méthode, plus “brutale”, c'est de recouvrir la page à ne pas imprimer avec un champ à fond blanc réglé pour être “invisible à l'écran et visible à l'impression”.
    Ainsi ladite page ne s'imprime pas, mais ça ajoute une page blanche/vide lors de l'impression.
    :Smiley03:

    #69664
    bebarth
    Maître des clés

    bonjour,
    Ci-joint un exemple à tester avec Adobe Reader.
    @+
    :bonjour:

    #69665
    Merlin
    Maître des clés

    bebarth, merci pour l'exemple mais j'utiliserais les scripts autrement : placés en action “Document sera imprimé” et en action “Document a été imprimé”.
    Ainsi il n'y a pas forcément besoin de bouton Imprimer et ça fonctionne quelle que soit la commande choisie par l'utilisateur (menu Fichier : Imprimer, raccourci-clavier, icône d'outil rapide…) pour imprimer.
    :Smiley03:

    // Document sera imprimé (document will print)
    this.deletePages({nStart: this.numPages-1});
    console.println(“Suppression de la page modèle pendant l'impression…”);

    // Document a été imprimé (document did print)
    this.spawnPageFromTemplate({cTemplate: “pageModele”});
    console.println(“…puis réaffichage de la page.”);

    #69666
    Merlin
    Maître des clés

    Scripts qu'on peut améliorer ainsi pour éviter que l'utilisateur soit invité à enregistrer le document s'il n'a pas fait de modication avant de l'imprimer :

    // Document sera imprimé (document will print)
    var bSale = this.dirty;
    this.deletePages({nStart: this.numPages-1});
    console.println(“Suppression de la page modèle pendant l'impression…”);

    // Document a été imprimé (document did print)
    this.spawnPageFromTemplate({cTemplate: “pageModele”});
    this.dirty = bSale;
    console.println(“…puis réaffichage de la page.”);

    :geek:

    À propos de “this.dirty” voir : https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/html2015/Acro12_MasterBook/JS_API_AcroJS/Doc_properties.htm?rhhlterm=dirty&rhsyns=%20#XREF_39186_dirty

    #69667
    Prop0f0L
    Participant

    D'abord, merci à vous deux, vraiment  :bonjour:

    Il faut générer une page à partir du template et masquer le template.
    Cette page générée “non statique” peut donc être supprimée avant l'impression, et re-générée ensuite à partir du template masqué.

    L'idée est là, mais le problème vient du fait que le bouton “imprimer” est placé sur le template à supprimer avant impression… :mur:
    L'objectif est d'arriver à masquer le template contenant le bouton (sauf qu'à l'ouverture du document c'est une page statique), tout en évitant d'avoir une page indésirable (ou blanche) à l'impression…

    Et ayant un script de validation dans le bouton imprimer, je préfèrerai le conserver plutôt qu'utiliser un script en “will print”  :Ooops:

    Ci joint mon exemple

    #69668
    Prop0f0L
    Participant

    Eclair de génie… Ou pas  :geek:
    Plutôt que de supprimer la page à ne pas imprimer, j'ai trouvé l'idée (sur le forum bien sur  :jerisjaune: ) d'utiliser printRange dans l'objet printParams, et ça fonctionne à merveille !! Cependant …
    J'aimerai ajouter le paramètre bShrinkToFit en true, mais je n'arrive pas à l'intégrer dans ce bloc :

    var f = this.numPages
    var pp = this.getPrintParams();
    pp.printRange = 1,f -1;
    this.print(pp);

    J'ai fouiné sur le forum, sans succès, j'ai essayé ceci (sans succès aussi) en dernière ligne :
    this.print({bShrinkToFit: true, printParams: pp});

    Pourriez-vous m'aider s'il vous plaît ?  :priere:

    #69669
    Merlin
    Maître des clés

    Il faut ajouter cette ligne :

    var f = this.numPages
    var pp = this.getPrintParams();
    pp.printRange = 1,f -1;
    pp.pageHandling = pp.constants.handling.fit; // ajuster au papier
    this.print(pp);

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