Donnez vie à vos documents numériques !
 

Utilisation des signets pour activer ou masquer des calques

abracadabraPDF Forums PDF – Général Utilisation des signets pour activer ou masquer des calques

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #46365
    jjT
    Membre

    Bonsoir,

    D’abord toutes mes félicitations pour ce site !
    Mon problème du jour :J’ai créé dans un PDF un certain nombre de signets que j’utilise comme “bouton poussoir” pour rendre visible ou masquer des calques.Jusque là tout va bien, mais si je clique une deuxième fois sur le même signet je me retrouve en mode édition pour renommer ledit signet.
    Quelle commande rajouter pour qu’à chaque clic, le focus soit renvoyé sur le document principal (ou sur un autre signet) ?
    Voici le bout de code :

    Code:
    var ocgArray1 = this.getOCGs(); for (var i=0; i           if (ocgArray1.state == false) {
                ocgArray1.state = true ;
                }
            else {
                ocgArray1.state = false ;
            }
        } else if (ocgArray1.name == “Signet2”) {
            ocgArray1.state = false;
        } else if (ocgArray1.name == “Signet3”) {
            ocgArray1.state = false;
        } else if (ocgArray1.name == “Signet4”) {
            ocgArray1.state = false;
        } else if (ocgArray1.name == “Signet5”) {
            ocgArray1.state = false;
        } else if (ocgArray1.name == “Signet6”) {
            ocgArray1.state = false;
        }
    }

    Grand merci d’avance.

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

    Bonjour et bienvenue

    1. Fais attention à l’utilisation des balises de formatage quand tu rédiges ton message. Celui ci-dessus était illisible (voir capture ci-dessous).

    2. Il n’y a rien à faire. Il faut juste se dire qu’avec Acrobat Reader ou Foxit Reader les noms des signets ne sont pas modifiables, donc ça ne peut pas arriver.

    :Smiley15:

    #67827
    jjT
    Membre

    Bonjour,

    1. Effectivement, je n’avais pas fait attention au formatage.

    2. Là, je ne comprends pas la réponse…

    La solution est de fermer et de rouvrir le signet supérieur, donc de rajouter :
    var myRoot = this.bookmarkRoot;
    var myChild = myRoot.children[0];
    myChild.open = false;
    myChild.open = true;

    À chaque clic sur le signet, c’est le signet parent qui est sélectionné.

    :joker:

    #67828
    bebarth
    Maître des clés

    bonjour,

    2. Là, je ne comprends pas la réponse…

    Merlin veut dire qu’avec les “Reader” on ne peut pas modifier le nom des signets. Tu y arrives parce que tu utilises Acrobat Pro, mais tu ne pourrais le faire avec les “Reader”.
    Peux-tu partager un fichier, car il y aurait certainement moyen de “simplifier” ton script, mais ça dépend un peu si tu as juste 6 calques ou d’autres…

    Jusque là tout va bien, mais si je clique une deuxième fois sur le même signet je me retrouve en mode édition pour renommer ledit signet.

    …et là, je ne comprends pas pourquoi !
    @+
    :bonjour:

    #67829
    jjT
    Membre

    Bonsoir,

    J’ai extrait une page du PDF en question en version basse définition (7 Mo tout de même), le PDF complet en 300 dpi pèse plus de 600 Mo…
    Il s’agit d’un atlas de la ville de Paris en 1791 dans lequel j’ai intégré énormément de données et une quinzaine de calques avec différents découpages administratifs de l’époque, d’autres cartes, et aussi le cadastre parisien actuel.
    Pour l’instant cet instrument de travail pour des recherches historiques est à mon seul usage. Le fait qu’il ne soit guère fonctionnel avec un reader n’a donc pas trop d’importance.
    Dans l’extrait que j’ai fait, ne figure pas les 7000 signets de la version complète ni tous les liens.

    Pour l’instant, lorsque l’on clique sur un signet correspondant à un calque, celui-ci s’affiche, le signet en mis en rouge (ce qui permet de savoir quel est le calque affiché), tous les autres sont remis en bleu et le signet parent est sélectionné (ce qui permet de cliquer à nouveau sur le même signet pour le masquer (il se remet alors en bleu).
    Seule exception, le cadastre actuel, seul calque qu’il peut être intéressant de superposer à un autre, qui lui, est en italique, rouge ou bleu selon qu’il est activé, mais qui ne modifie pas la visibilité des autres calques.

    Le javascript que j’ai bricolé n’est pas vraiment élégant (!) et un peu lourd à modifier si je dois à l’avenir rajouter d’autres couches de données…

    Dernier problème pour lequel je ne vois pas de solution : comment faire pour qu’Acrobat ne demande pas  si l’on veut enregistrer le fichier à chaque fermeture puisque des modifications ont été faite sur les signets ?

    Merci d’avance pour votre aide. :Smiley01: :Smiley01: :Smiley01:

    Lien pour télécharger le PDF :
    https://drive.google.com/file/d/1GjDWpQkXGbfQq96VaagEZy62ZPeWfE6b/view?usp=sharing

    #67830
    bebarth
    Maître des clés

    En “Actions de Scripts lorsque le document sera fermé” il faut écrire :
    this.dirty=false;

    #67831
    jjT
    Membre

    Ben, alors là, merci !
    :bonjour:
    C’est une épine de moins !
    J’attends avec impatience la suite de votre expertise…

    #67832
    Merlin
    Maître des clés

    En “Actions de Scripts lorsque le document sera fermé” il faut écrire :
    this.dirty=false;

    C’est acceptable pour un document à usage privé, encore qu’on risque de se piéger soi-même, mais la solution la plus élégante c’est de placer :
    var bSale = this.dirty;
    avant toute fonction modifiant le marqueur dirty, c’est-à-dire modifiant l’état du document.
    Voir : https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/Acro12_MasterBook/JS_API_AcroJS/Doc_properties.htm?rhhlterm=dirty&rhsyns=%20#XREF_39186_dirty

    Et de placer :
    this.dirty = bSale;
    à la fin de chaque fonction utilisant le script ci-dessus pour rétablir le marqueur tel qu’il était avant l’exécution de la fonction.

    Ainsi l’utilisateur est invité à enregistrer seulement s’il a modifié quelque chose d’autre (commentaires/annotations, paramètres d’ouverture, etc.) et il ne risquera pas de perdre son temps et ses efforts en se faisant piéger.
    :Smiley15:

    #67833
    bebarth
    Maître des clés

    bonjour,
    Il faut effectivement utiliser ce script en “Actions de Scripts lorsque le document sera fermé” uniquement lorsque le formulaire est terminé et qu’il est utilisé en mode “utilisateur” (bien que l’on puisse encore l’enregistrer via le menu ou la commande clavier).
    Ici, pour chaque signet on indique son nom en variable puis on appelle une fonction définie en script de document. Le nom du signet correspond au nom du calque que l’on affiche/masque.
    Je n’ai pas trouvé comment récupérer directement le nom du signet sur lequel on clique… Merlin, une idée ??? Sinon je poserai la question sur le forum Adobe.
    Voici ce que cela donne :

    Code:
    // Script signet
    var ceCalque=”Paroisses Ancien Régime”;
    AffichageCalques();

    // Sript de document
    var lesCalques=this.getOCGs();
    var lesSignets=this.bookmarkRoot.children[0].children;
    function AffichageCalques() {
        for (var i=0; i        if (lesCalques.name!=ceCalque && lesCalques.name!=”Boutons” && lesCalques.name!=”Repères assemblage” && lesCalques.name!=”Carte” && lesCalques.name!=”Nom des rues” && lesCalques.name!=”Cases”) {
                lesCalques.state=false ;
            } else if (lesCalques.name==ceCalque) {
                this.delay=true;
                lesCalques.state=!lesCalques.state;
                this.delay=false;
            }
        }
        for (var i=0; i        if (lesSignets.name!=ceCalque) {
                lesSignets.color=color.blue;
            } else {
                if (lesSignets.color==”RGB,0,0,1″) {
                    lesSignets.color=color.red;
                } else {
                    lesSignets.color=color.blue;
                }
            }
        }
    }

    …et voici le lien :
    https://we.tl/t-le5uXH2PjT
    @+
    :bonjour:

    #67834
    jjT
    Membre

    :soleil:

    Mille mercis Merlin et Bebarth !
    C’est mille fois plus élégant et efficace que mes gribouillis en javascript…

    :soleil:

    #67835
    bebarth
    Maître des clés

    Ça permet surtout de rajouter des claques/signets sans modifier tous les scripts.
    J’ai posé la question sur le forum Adobe et il n’est apparemment pas possible de récupérer le nom du signet sur lequel on clique.
    @+
    :bonjour:

    #67836
    Merlin
    Maître des clés

    Je n’ai pas trouvé comment récupérer directement le nom du signet sur lequel on clique

    Oui, il me semble bien que ce n’est pas possible.

    #67837
    jjT
    Membre

    Effectivement, j’ai cherché aussi de mon côté… impossible.
    La seule solution semble de créer un nouveau signet et de le supprimer, ou de fermer et de rouvrir le signet parent.
    J’ai donc réintroduit mon bout de code :

    var myRoot = this.bookmarkRoot;var myChild = myRoot.children[0];myChild.open = false;myChild.open = true;

    Et tout fonctionne à merveille.

    Merci encore !
    :Smiley01:

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