Donnez vie à vos documents numériques !
 

Affichage conditionnel document si javascript activé dans le lecteur. – RÉSOLU

abracadabraPDF Forums PDF – Général Affichage conditionnel document si javascript activé dans le lecteur. – RÉSOLU

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #44636
    lulu38
    Membre

    Bonjour,

    Je travail avec Adobe Acrobat X, est-il possible de masquer le contenu d’un fichier PDF (ou/et d’afficher un message d’alerte) si javascipt est désactivé dans le soft de lecture ?

    Merci à tous.

    Luc 

Affichage de 18 réponses de 1 à 18 (sur un total de 18)
  • Auteur
    Réponses
  • #55620

    Bonjour,

    Tout d’abord bienvenue sur le forum.

    Il me semble avoir déjà lu cela sur le forum. :idee: Une recherche est à faire. 

    Lionel :alien2:

    #55621

    Bonjour,

    Pour répondre à ton message perso : il n’y a pas de question “triviale”. Toute question, écrite en français, est bonne à poser.

    De mémoire (mais cela peut être inexact) : met maxwyss comme auteur dans tes critères de recherche.

    Lionel :alien2:

    #55622
    Merlin
    Maître des clés

    Bonjour,

    En fait on fait l’inverse : contenu masqué par défaut, et qui ne s’active qu’en présence de JavaScript.
    (Parce-qu’on ne peut pas JavaScriptement détecter l’absence de JavaScript…)
    :Smiley03:

    #55623
    lulu38
    Membre

    Merci pour vos réponses,

    Bonjour,

    En fait on fait l’inverse : contenu masqué par défaut, et qui ne s’active qu’en présence de JavaScript.
    (Parce-qu’on ne peut pas JavaScriptement détecter l’absence de JavaScript…)
    :Smiley03:

    j’ai donc créer un document à masqué avec par défaut un calque opaque importé créer en parallèle (ci-joint).  Première difficulté, je ne suis pas parvenu dans Acrobat Pro X à régler l’étendu d’application du calque sur l’ensemble du document à masquer. Faut il obligatoirement importer le calque page par page sur le document à masquer ou j’ai zappé un truc dans l’opération ?

    deuxième étape, il faut ajouter un code en javascipt qui supprime automatiquement l’ensemble des calques lors de l’ouverture du document. Et là c’est l’angoisse, c’est sans doute trivial mais j’ai pas trouvé sur le site de piste à ce sujet…    :Ooops:

    une piste peut-être (trouvé sur le net) :

    Code:
    // InVisible layer
    var docOCGs = this.getOCGs();
    for (var x=0; x < docOCGs.length; x++)
    {
    docOCGs[x].state = false;
    }

    Merci

    [attachment deleted by admin]

    #55624
    Merlin
    Maître des clés

    Il y a 2 méthodes pratiques :

    – 1re page : La 1re page du document est une page ne contenant qu’un avertissement textuel.
    Si JavaScript est activé le document s’ouvre sur la page 2 (ou n’importe quelle autre).
    Exemple : http://abracadabrapdf.net/pdf-de-demo/jeux-pdf/lapin-cretin/
    (Exemple qui n’a rien à voir avec l’activation de JavaScript, on y détecte la version du logiciel mais le principe est le même.)

    – calque qui se masque si JavaScript est activé (et non pas l’inverse*), le calque en question doit recouvrir la totalité des pages, donc il doit être non-blanc (transparent). Un fond de page avec du noir à 1% suffit à obtenir l’opacité totale (R 254, V 254, B 254) ou (C 0, M 0, J 0, N 1).
    Il y en a certainement un exemple aussi sur le site mais je n’en n’ai pas en tête…

    Pour insérer un calque par-dessus toutes les pages il y a aussi 2 méthodes :

    – soit “importer comme calque” un document ayant le même nombre de pages,

    – soit utiliser la fonction “Filigrane” et ajouter une seule page importée sur toutes les pages du document.

    Ces 2 méthodes n’utilisent pas exactement les mêmes scripts.

    Le code que tu cites à l’air OK.

    :Smiley15:

    * Les lecteurs de PDF non-Adobe affichent tous les calques en même temps les uns sur les autres.

    #55625
    lulu38
    Membre

    Merci pour ces précieuses précisions, ça avance.

    1- J’ai ajouter un calque réalisé au préalable sur toutes les pages du document cible par l’outils d’ajout de filigrame, ça marche en effet super bien (par contre, les filigrames n’apparaissent pas en tant que calques dans la fenêtre des calques, mais c’est pas grave).

    2- J’ai utilisé la 2ème méthode du calque qui doit disparaitre lors de l’exécution du code proposé plus haut (fenêtre vignettes de pages>clic droit sur la 1ere page => propriétés de la page =>onglet actions >exécuter un script de javascipt => je colle le code ). Après sauvegarde et réouverture du document avec javascipt acrobat activé, ça marche mais seulement pour la 1ère page du document ???. la 2ème reste toujours masquée.

    Autre petit problème, et c’est dommage, le calque reste toujours présent sur la vignette même si le script l’a bien supprimé du document affiché dans la fenêtre principale.

    [attachment deleted by admin]

    #55626
    Merlin
    Maître des clés

    Je te répondrais plus complètement dans les jours qui viennent, en attendant :

    ==> http://acrobatusers.com/tutorials/print/creating-and-using-layers-ocgs-with-acrobat-javascript

    Et examine le ci-joint.
    Il faut juste comprendre qu’un Filigrane c’est un calque presque comme un autre : par défaut il est invisible dans la palette des calques et il se nomme toujours “Watermark”, mais on peut l’utiliser à l’identique d’un calque “normal”.

    D’autre part le script n’est pas à placer en action “ouverture de page”, mais en ouverture de document : panneau outils JavaScript : Scripts JavaScript du document : Ajouter (il faut renseigner un nom d’abord).

    :Smiley01:

    [attachment deleted by admin]

    #55627
    lulu38
    Membre

    D’autre part le script n’est pas à placer en action “ouverture de page”, mais en ouverture de document : panneau outils JavaScript : Scripts JavaScript du document : Ajouter (il faut renseigner un nom d’abord).

    J’ai supprimé le script en action “ouverture de page” et créer le script “verif” en ouverture de document :

    Code:
    function verif()
    {
    var docOCGs = this.getOCGs();
    for (var x=0; x < docOCGs.length; x++)
    {
    docOCGs[x].state = false;
    }
    }

    ça ne marche malheureusement pas  :mur:.  je vais chercher de ce coté en attendant tes lumières

    #55628
    Merlin
    Maître des clés

    Ceci devrait suffire dans tous les cas, quel que soit le nom du calque d’avertissement et y compris s’il s’agit d’un Watermark masqué :

    var ocgArray = this.getOCGs(0);
    for (var i=0; i < ocgArray.length; i++)
    ocgArray.state = false;

    Exemple* ici : http://cl.ly/R80p
    C’est le même que là : http://abracadabrapdf.net/pdf-de-demo/multimedia-pdfs-de-demo/holiday-rave/
    mais en version non-protégée.
    Dans cet exemple* le script est un peu plus long car on ne cherche qu’à détecter la version du logiciel (Reader ou Acrobat version 9+), donc il y a une condition supplémentaire.

    :extra:

    * Surtout, ne pas oublier de mettre le volume de l’ordinateur à fond avant d’ouvrir…
    :geek:

    #55629
    lulu38
    Membre

    Avant tout, merci pour l’investissement de temps sur ce problème.

    J’ai collé ton code dans la fonction “verif” (outils>Javascript>scripts de javascipt de document) et appliqué au document le Watermark d’avertissement

    Malheureusement ça ne marche toujours pas et le comportement du document obtenu(joint) est très bizarre :

    – Si javascript est désactivé dans les préférences d’acrobat j’ai un massage de sécurité du soft m’informant que javascipt est désactivé et que je prends un risque si j’active. En parallèle le calque s’affiche bien (même sur les vignette). A priori c’est donc ok.

    – Si j’active le javascipt dans les préférence puis réouvre le document ça marche pas : j’ai toujours le message du calque. Par contre, pour une page donnée (mais pas pour l’ensemble du document !?) si je vais ouvrir outils>Javascript>scripts de javascipt de document puis ferme la fenêtre le calque disparait ?? mais réapparait si je change la page consultée dans la fenêtre principale ??

    Par ailleurs, le calque ne disparait jamais de vinettes.

    il y a vraiment un truc que je ne maitrise pas, c’est  un poil la honte  :Smiley11: 

    [attachment deleted by admin]

    #55630
    Merlin
    Maître des clés

    Ca fonctionne ! (ci-joint)

    – Il faut savoir que l’exécution des script à l’ouverture du document ne fonctionne pas toujours dans Acrobat (certains plugins bloquent parfois certaines fonctions à l’ouverture), surtout avec Acrobat X.
    ==> Par principe il faut toujours tester avec Reader.

    – Je t’ai embrouillé avec le Watermark/Filigrane, j’ai testé : ça ne fonctionne pas correctement quand il y a plusieurs pages. A oublier. (En fait si, ça fonctionne bien mais ça fonctionne comme s’il y avait un calque par page, donc ce n’est pas intéressant dans le cas qui nous intéresse.)

    – Pour ton doc j’ai donc créé (en fait récupéré  :Smiley03: ) un autre document-masque contenant exactement le même nombre de pages que le document à protéger (donc 2).
    Ce document-masque a ensuite été “Importé comme calque” via la palette des calques dans le doc à protéger.

    – J’ai aussi modifié le script, apparemment ça fonctionne mieux quand le nom du calque est inscrit en dur dedans…

    – Il ne faut pas oublier de verrouiller le calque, sinon n’importe quel petit malin peut quand même le masquer via la palette des calques de Reader.

    :Smiley15:

    [attachment deleted by admin]

    #55631
    adrith
    Participant

    Bonjour Merlin,

    Je me permet de poser une question sur ce sujet déjà répondu afin de le compléter.

    Cet méthode est nickel (moi je testais avec la version du logiciel), mais dans les 2 cas, si nous avons des champs de formulaire sur la première page, alors on voit quand même les champs et donc ça ne fait pas top.
    A chaque fois je bidouille en mettant tous les champs de la 1ère page en invisible et dès que le javascript est activé par l’utilisateur, cela masque le calque et affiche les champs. Mais ce n’est pas pratique car si le document est enregistré puis réouvert alors que le javascript n’a pas été activé pour toujours, alors on voit le calque et les champs.
    As tu une idée par hasard ?

    Merci bien.

    #55632
    Merlin
    Maître des clés

    Est-ce que ceci pourrait répondre à ta problématique ?
    ==> http://abracadabrapdf.net/utilitaires/acrobat-plugins/pdf2fdf-forcer-louverture-dun-pdf-avec-adobe-reader/

    :Smiley01:

    #55633
    adrith
    Participant

    Euh non :)
    Peut-être je me suis mal exprimé.

    Je viens de faire l’exemple dans le fichier joint. C’est toujours plus parlant :)
    C’est ton document où j’ai juste ajouté 2 champs. En ouvrant, sans le javascript activé, tu vas comprendre direct, on voit les champs et ce n’est pas beau.

    Alors comme je disais, je pourrais les rendre invisible avant de fermer mon document et de le livrer. Puis les faire apparaitre après dès que le javascript est activé, mais dès qu’il y a un enregistrement, une fermeture puis une réouverture du doc, les champs seront visibles en même temps que le calque.

    L’idéal serait peut-être de dire que si le calque est affiché alors on masque tous les champs, mais je ne sais pas si c’est possible.
    Tu en penses quoi ?

    [attachment deleted by admin]

    #55634
    Merlin
    Maître des clés

    On pourrait facilement afficher/masquer les champs en même temps que le calque d’alerte, mais le vrai problème c’est que la plupart des lecteurs de PDF non-Adobe et les navigateurs web afficheront de toute façon les champs par-dessus tout le reste, ce qui n’est ni joli, ni user-friendly.

    Donc :
    – soit on exige et on s’assure que le PDF ne sera utilisé qu’avec Adobe Reader, auquel cas on ignore le problème,
    – soit on rajoute une page 1 de couverture sans champ de formulaire, et on fait JavaScriptement passer le document à la page 2 (ou autre) en même temps que l’on masque le calque d’alerte.

    :Smiley01:

    #55635
    adrith
    Participant

    Oui c’est certain ce n’est utilisé qu’avec Adobe Reader  :Smiley01:

    Dans l’exemple que j’ai mis, comment je peux masquer les champs quand le calque est affiché ? Je ne vois pas du tout.
    Par contre j’arrive à les afficher quand je retire le calque, ça c’est ok.

    Merci de ton aide

    #55636
    Merlin
    Maître des clés

    Pour afficher les champs, à ton code on ajoute ce qui est en bleu :

    var ocgArray = this.getOCGs();
    for (var i=0; i < ocgArray.length; i++)
    {
    if (ocgArray.name == “masque”)
    {
    ocgArray
    .state = false;
    this.getField(“Page1”).display = display.visible;
    }

    }

    Par-contre on ne peut pas les masquer “si le calque est visible” :
    – “Visible” c’est son état par défaut, celui qui prévaut lors de l’ouverture, il n’y a pas de changement d’état pendant que le document est ouvert.
    – Et s’il reste visible c’est que justement on ne dispose pas de JavaScript…

    Donc le mieux c’est de les masquer lors de la fermeture du document en ajoutant ce code en Script d’évènement :

    this.getField(“Page1”).display = display.hidden;

    En croisant les doigts pour que l’utilisateur clique sur “Oui” au moment de la fermeture quand il sera invité à enregistrer…

    Exemple ci-joint.
    :Smiley15:

    [attachment deleted by admin]

    #55637
    adrith
    Participant

    Ok merci Merlin pour ton retour.

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