abracadabraPDF › Forums › PDF – Général › Affichage conditionnel document si javascript activé dans le lecteur. – RÉSOLU
- Ce sujet est vide.
-
CréateurSujet
-
27 août 2013 à 15:20 #44636lulu38Membre
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
-
CréateurSujet
-
AuteurRéponses
-
27 août 2013 à 15:25 #55620LionelMacBruSoftMembre
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:
27 août 2013 à 15:58 #55621LionelMacBruSoftMembreBonjour,
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:
27 août 2013 à 16:54 #55622MerlinMaître des clésBonjour,
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:28 août 2013 à 08:38 #55623lulu38MembreMerci 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]
28 août 2013 à 21:03 #55624MerlinMaître des clésIl 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.
29 août 2013 à 08:37 #55625lulu38MembreMerci 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]
29 août 2013 à 10:30 #55626MerlinMaître des clésJe 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]
29 août 2013 à 19:25 #55627lulu38MembreD’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
31 août 2013 à 11:49 #55628MerlinMaître des clésCeci 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:4 septembre 2013 à 07:12 #55629lulu38MembreAvant 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]
4 septembre 2013 à 09:00 #55630MerlinMaître des clésCa 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]
8 janvier 2014 à 14:52 #55631adrithParticipantBonjour 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.
8 janvier 2014 à 15:07 #55632MerlinMaître des clésEst-ce que ceci pourrait répondre à ta problématique ?
==> http://abracadabrapdf.net/utilitaires/acrobat-plugins/pdf2fdf-forcer-louverture-dun-pdf-avec-adobe-reader/:Smiley01:
8 janvier 2014 à 15:58 #55633adrithParticipantEuh 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]
9 janvier 2014 à 13:07 #55634MerlinMaître des clésOn 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:
10 janvier 2014 à 09:06 #55635adrithParticipantOui 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
10 janvier 2014 à 11:04 #55636MerlinMaître des clésPour 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]
20 janvier 2014 à 14:25 #55637adrithParticipantOk merci Merlin pour ton retour.
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.