Donnez vie à vos documents numériques !
 

Conserver l’affichage ou le masquage des calques avec Reader.

abracadabraPDF Forums PDF – Général Conserver l’affichage ou le masquage des calques avec Reader.

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #43864
    Yorigami
    Membre

    Bonjour à toutes et à tous.

    Je suis à la recherche d’une solution pour permettre aux opératrices d’accueil de mon entreprise, d’enregistrer un PDF sous Reader (fonction étendue depuis Acrobat Pro) en gardant visibles certains calques visibles, d’autres masqués suivant le profil du client. Cette opération permettrait d’envoyer le PDF profilé, juste les informations qui concernent le client dessus et laisserait à l’opératrice un document de base avec toutes les données.
    Je pensais que l’extension des fonctions depuis Acrobat Pro autorisée cela. Mais je vois que ce n’est pas le cas.
    Entrevoyez-vous une solution ?

    Merci pour votre aide

Affichage de 21 réponses de 1 à 21 (sur un total de 21)
  • Auteur
    Réponses
  • #51174
    Merlin
    Maître des clés

    Salut,

    non, pas de solution en vue avec les calques, par contre cela devrait être possible en affichant/masquant des champs de formulaire.

    T’ai-je déjà parlé de la “Convention de nomage des champs de formulaire” de Adobe, et de l’importance du point dans les noms de champs ?
    :idee:   :???:

    #51175
    Yorigami
    Membre

    Bonjour Merlin,
    oui j’ai bien noté ces contraintes de nom de champs. Malheureusement, ça ne fonctionne pas non plus. L’enregistrement ramène à l’affichage de départ comme si le fichier était ouvert la première fois. Un autre problème est que le principe du formulaire ne semble pas pouvoir cumuler les calques en affichage. C’est chaque fois l’état d’affichage qui est applicable. Ça rend mon projet impossible, car j’aurais au bas mot 20 calques. Certains profils demandent 3 calques, d’autre 18 le nombre de boutons serait énorme pour proposer toutes les combinaisons possibles, et ce serait ingérable par les hôtesses.
    J’avais pensé à une fonction pour exporter en JPG le cumul des calques visibles ou une fonction comme aplatir les calques en enregistrement sous, mais je n’ai rien trouvé de tel.
    Dommage, l’idée aurait bien arrangé le service accueil.  :(

    Merci pour ta réponse et bonne journée.

    #51176
    Merlin
    Maître des clés

    Est-ce que tu peux m’envoyer un exemple de ce formulaire en m’indiquant sa base de fonctionnement désiré pour que je puisse m’en faire une meilleure idée ?
    ;)

    #51177
    Yorigami
    Membre

    Je t’envoie ça.

    Merci de te pencher dessus.  :soleil:

    #51178
    Yorigami
    Membre

    Voici le lien Plan PDF. Pour chaque affichage, je crée un bouton. Là il n’y a que 5 calques, mais déjà c’est compliqué, sur la version finale il y en aurait plus de 20. Une trop grande quantité de combinaisons et je n’ai pas trouvé comment conserver une combinaison d’affichage sous Reader.  :Euuuh:

    #51179
    Merlin
    Maître des clés

    Bon…
    Je ne t’avais pas oublié, ça fait 2 jours que je pense à cette affaire mais je ne vois toujours pas de solution avec Adobe Reader.
    On ne peut pas enregistrer la visibilité des calques, et ce ne serait que très difficilement gérable avec des champs de formulaire…
    :Euuuh:  :doute:

    :joker:

    #51180
    alex
    Participant

    On pourrait peut-être résoudre ça par un petit JavaScript sur le principe suivant:
    Lors de l’enregistrement du document, un champ caché embarquerait un code correspondant à la combinaison des calques à afficher.
    Lors de l’ouverture du document, un script d’ouverture activerait les calques à afficher et désactiverait les autres en fonction de ce code.
    De plus, pour éviter la consultation pirate avec d’autres “viewers” pdf tels que Aperçu sur Mac, on ajouterait un calque opaque activé par défaut et désactivé par le script d’ouverture. En effet la plupart des “viewers” ignorent les objets fields et il ne faut pas espérer les utiliser comme masques.

    Je propose tout ça au conditionnel, ça demande à être testé, si ça vous intéresse je fais une maquette…

    #51181
    Merlin
    Maître des clés

    Super Alex,

    je n’y avais pas pensé, comme quoi plusieurs cerveaux valent mieux qu’un !
    As-tu téléchargé le fichier de Yorigami ?
    :)

    #51182
    alex
    Participant

    Salut Merlin!
    Oui, j’ai chargé ce fichier et je vais faire un essai… d’ici lundi j’espère.
    A+

    #51183
    alex
    Participant

    Je cherche un moyen de vous mettre à disposition le document sous sa forme utilisable sous Adobe Reader (8,9,X), les fonctionnalités du Reader étant étendues.
    Le bouton “Tout” affiche tous les calques.
    Le bouton “Rien” les masque.
    Les calques sont verrouillés et ne peuvent être manipulés à la main.
    Les autres boutons permettent de sélectionner les calques à afficher. Le système fonctionne quelque soit le nombre de calques, il suffira de recopier ces boutons en leur attribuant le nom du calque.
    Le bouton Masquer les boutons fait disparaître les boutons et le champ de code. Ainsi, le document envoyé sera propre.

    La procédure:
    1-L’opératrice, à partir du MASTER joint, choisit les calques du client.
    Quand le document est prêt, elle masque boutons (pression du bouton rouge).
    Elle enregistre son document (sous un autre nom! Sinon, il faut reprendre l’original) et l’envoie.

    2-Le destinataire l’ouvre sous Adobe Reader, dans ses Préférences (Edition>Préférences>JavaScript) les cases à cocher “Activer Acrobat JavaScript” et “Autoriser les privilèges d’exécution JavaScript d’éléments de menu” sont cochées.
    Seuls les calques présélectionnés apparaissent.

    Explications détaillées et code complet pour bientôt.

    #51184
    Yorigami
    Membre

    Merci Merlin et merci Alex de vous être penchés sur mon problème.
    Je suis très curieux de voir votre solution.  :idee:

    #51185
    alex
    Participant

    Procédure de création du document MASTER  (sous Acrobat 8 ou 9 de préférence)
    Document Acrobat d’une seule page contenant des calques.
    Boutons obligatoires:
    “Tout”,”Rien”,”Masquer les boutons” ainsi qu’un bouton par calque à manipuler.
    Champ obligatoire “Code” à placer dans un coin.

    Après création de votre MASTER:
    1-protégez-le en modification par mot de passe.
    2-Activez les fonctionnalités Reader Extensions pour les formulaires (NB:ne fonctionne pas avec Acrobat X, utiliser Acrobat 9)

    Procédure à suivre par l’opératrice: voir post ci-dessus.

    Fonction associée à chaque bouton de calque (nom de calque identique au nom du bouton):

    function GestionCalques()
    {
    console.clear();
    //Activation du calque…
    ocg=this.getOCGs(this.pageNum);
    indexCalque=0;
    while(indexCalque {
    if(ocg[indexCalque].name==this.event.target.name)
    {
    ocg[indexCalque].state=true;
    //app.alert(“Activation du calque correspondant au bouton sollicitu00E9:r”+this.event.target.name,3);
    }
    indexCalque=indexCalque+1;
    }
    //Analyse de la configuration des calques et élaboration du code.
    console.println(“Analyse de la configuration des “+indexCalque+” calques et u00E9laboration du code.”)
    ocg=this.getOCGs(this.pageNum);
    indexCalque=0;
    code=””;
    TexteAlerte=”Calques activu00E9s suite à ajout “”+this.event.target.name+”””;
    while(indexCalque {
    if(ocg[indexCalque].state)
    {
    TexteAlerte=TexteAlerte+”r*”+indexCalque+”-“+ocg[indexCalque].name;
    code=code+”1″;
    }
    else
    {
    code=code+”0″;
    }
    indexCalque=indexCalque+1;
    }
    if(this.getField(“Code”))
    {
    this.getField(“Code”).value=code;
    app.alert(TexteAlerte+”rCode de la configuration des calques:r””+this.getField(“Code”).valueAsString+””.”,3)
    }
    else
    {
    app.alert(“Le champ de code manque!rIl faut le créer…”,1)
    }
    //console.show();
    }

    Fonction associée aux deux boutons “Tout” et “Rien”:

    function ToutRien()
    {
    //Affichage ou masquage de tous les calques.
    console.clear();
    ocg=this.getOCGs(this.pageNum);
    if(this.event.target.name==”Tout”){statut=true;}else{statut=false;}
    indexCalque=0;
    code=””;
    while(indexCalque {
    ocg[indexCalque].state=statut;
    if(statut){code=code+”1″;}else{code=code+”0″;};
    indexCalque=indexCalque+1;
    }
    this.getField(“Code”).value=code;
    console.println(“Code: “+this.getField(“Code”).value+”.”);
    console.println(“Les “+indexCalque+” calques sont de statut “+statut+”.”);
    }

    Fonction associée au bouton “Masquer les boutons”:

    function MasquerBoutons()
    {
    statut=false;
    reponse=app.alert(“Masquer les boutons?rAttention, cette opération est irréversible.rAssurez-vous de conserver un original de ce document.”,2,2)
    if(reponse==4){statut=true;}
    indexChamp=0;
    while(indexChamp {
    nom=this.getNthFieldName(indexChamp);
    ff=this.getField(nom);
    if(ff.type==”button”){ff.hidden=statut;}
    indexChamp=indexChamp+1;
    }
    this.getField(“Code”).hidden=statut;
    this.getField(“Code”).readonly=true;
    }

    Fonction d’ouverture de la page du document:

    function Ouverture()
    {

    //Activation des calques en fonction du code
    ocg=this.getOCGs(this.pageNum);
    code=this.getField(“Code”).valueAsString;
    indexCalque=0;
    while(indexCalque {
    statut=code.substring(indexCalque,(indexCalque+1));
    console.println(“Rang “+indexCalque+” statut:”+statut)
    if(statut==1)
    {
    ocg[indexCalque].state=true;
    }
    else
    {
    ocg[indexCalque].state=false;
    }
    indexCalque=indexCalque+1;
    }
    }

    Extension de ce système à plusieurs pages, gestion interactive des calques par les destinataires…. Tout est possible! 

    #51186
    Yorigami
    Membre

    😮 impressionnant !

    Je vais essayer de finaliser mon fichier à partir de vos explications.

    Merci encore pour votre aide.  :soleil:

    #51187
    Yorigami
    Membre

    Bon ben après plusieurs essais, je patauge complet.

    J’ai ma page. Une dizaine de calques.
    Je passe par clic droit sur chaque propriété de calque, je les masques et les verrouilles.
    Je crées les boutons “TOUT” “RIEN” “Code” “Effacer et aplatir” plus mes calques et je copie colle les codes indiqués plus haut.

    Question 1/ comment dois-je coller le code qui doit-être se lancer à l’ouverture du fichier ? Est-ce dans les propriétés du document ? J’ai trouvé, c’est dans les propriété de la page.

    Question 2/ une fois les premières opérations faites, si j’enregistre, mon PDF voit tous les calques (alors qu’ils sont masqués par leurs propriétés) et je ne peux plus accéder à la boite de dialogue des préférences de calques qui reste gris et non cliquable.
    C’était une mauvaise manip de ma part.

    Si je teste les boutons, rien ne se passe.
    Chose curieuse également, sur le fichier que vous m’avez transmis par email ce matin, le code JS n’est visible que sur la première ligne. Mais le fichier se comporte très bien.

    Je continue à chercher ou je me trompe dans la mise en place du fichier.

    #51188
    alex
    Participant

    Oops!
    1-Le champ “Code” est un champ texte. L’élaboration du code et son remplissage se font automatiquement par sélection des calques.
    2-Les boutons de calque embarquent une simple ligne JavaScript :

    GestionCalques();
    Les boutons “Tout” et “Rien” embarquent une seule ligne de code:
    ToutRien();
    Le bouton “Masquer les boutons” embarque une seule ligne de code:
    MasquerBoutons();

    3-Les scripts des fonctions GestionCalques(), ToutRien(), Ouverture(), MasquerBoutons() complets sont situés au niveau document et appelés par les actions sur les boutons. Il ne faut pas les recopier dans les boutons!

    Explication suffisante?

    #51189
    Yorigami
    Membre

    Oui, je pense que j’ai pigé,
    je m’y remets demain matin.

    Merci pour le temps passé et ces explications.

    [édit] “3-Les scripts des fonctions GestionCalques(), ToutRien(), Ouverture(), MasquerBoutons() complets sont situés au niveau document et appelés par les actions sur les boutons. Il ne faut pas les recopier dans les boutons!”
    L’accès à ce niveau passe par quel chemin ? C’est par le menu document ?
    Désolé, mais je suis perdu sur l’implantation du code à ce niveau.

    #51190
    Merlin
    Maître des clés

    Les scripts de document se trouvent dans : menu Options Avancées > Traitement du document > Scripts JavaScript.

    ;)

    #51191
    Yorigami
    Membre

    Merci Merlin,
    cette fois j’ai tout compris.

    Merci pour votre aide. Je finalise le fichier demain.  :soleil:

    #51192
    Yorigami
    Membre

    Je viens de finir la mise en place du fichier et c’est du caviar.  :bravo:
    Quand on a pigé le principe :siffle:, ça va très vite et c’est très pratique à paramétrer en quelques minutes grâce à votre code.

    Merci beaucoup pour votre aide et pour le temps que vous m’avez consacré.

    #51193
    alex
    Participant

    Sur ce même principe qui consiste à stocker un code caché qui, relu à l’ouverture du document, définira sa présentation future , on peut  imaginer beaucoup d’autres applications. A vous d’en imaginer d’autres… Comme indiqué au début, je vous conseille d’ajouter un calque opaque qui interdira toute lecture à l’aide d’un viewer autre que Adobe Reader (tels qu’Aperçu sur Mac ou PDF Opener et autres couteaux suisses proposés sur le NET)….

    #51194
    Merlin
    Maître des clés

    Bien, moi je viens de prendre une grande leçon, comme souvent avec Alex.
    :)

    Concernant le calque opaque je ne le crois pas nécessaire dans ce cas particulier car l’usage du PDF de Yorigami se fait en interne dans sa société.
    ;)

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