Donnez vie à vos documents numériques !
 

Lien vers un signet

abracadabraPDF Forums PDF – Général Lien vers un signet

  • Ce sujet contient 11 réponses, 3 participants et a été mis à jour pour la dernière fois par Merlin, le il y a 7 mois.
  • Créateur
    Sujet
  • #46610
    Braindead
    Membre

    Bonjour à tous,

    Question qui semble simple et bête mais pour laquelle je ne trouve pas de réponse :
    je voudrais faire un lien non pas vers une page mais vers un signet de mon document. Comme ça si je rajoute des pages le signet sera toujours bon.

    Et je ne trouve pas comment faire ni via l’interface Acrobat Pro ni via du Javascript…

    C’est faisable ? Quelqu’un saurait me donner un exemple ?

    Merci !!

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

    Bonjour

    Dans le format PDF un signet n’est pas un “marqueur”, c’est un hyperlien qui envoie quelque part dans le document.
    Du coup il n’est pas possible de faire un lien vers un lien.

    Pour faire ce que tu veux il faut utiliser les “Destinations”, c’est un peu le même principe que les “Ancres” en HTML : on ne pointe pas vers un numéro de page mais vers un marqueur invisible attaché à la page. Ce qui permet de déplacer/ajouter/supprimer des pages sans perdre les liens.

    Voir : https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/Acro12_MasterBook/pdfmark_Actions/Destinations.htm#XREF_30628_4_1_View

    #69283
    Braindead
    Membre

    Bonjour Merlin et merci de ta réponse.
    En effet les destinations sont bien plus utiles que les signets pour mon cas.

    Je les aient mises en place par contre je n’arrive pas à pointer dessus par programmation.
    OK via l’interface de Acrobat :
    “Atteindre une page du document” > “Utiliser la destination existante”

    Mais comment faire en JS ?
    J’utilise ça pour pointer vers une page :

    Code:
    this.pageNum = 1

    Mais je ne trouve pas quelle fonction je dois utiliser pour pointer vers une destination. Tu saurais me dire ?

    Merci encore de ton aide !

    #69284
    Braindead
    Membre

    je me réponds et si cela peut aider quelqu’un voici la fonction :

    Code:
    this.gotoNamedDest(“DestName”);

    Merci !

    #69285
    Merlin
    Maître des clés

    :bonjour:

    #73151
    adrith
    Participant

    Bonjour à tous,

    Vraiment puissante la fonction “rechercher” du forum. On retrouve des choses super intéressantes qui datent de plusieurs années 🙂

    Néanmoins je complexifie un peu tout ça. Je voulais justement faire des ancres, ou plutôt des destinations, et grâce à ce post ça fonctionne très bien. Sauf que… j’ai des pages modèles et dès que des destinations sont placées sur des pages modèles et que celles-ci sont appelées, alors mes liens vers ces destinations ne fonctionnent plus..

    J’en conclu que les destinations sont perdues dès que l’on masque ou affiche une page modèle, c’est bien dommage, mais y a t-il donc un moyen de contourner ou de trouver une autre solution à ce problème ?

    Merci pour vos avis.

    #73153
    Merlin
    Maître des clés

    “J’en conclu que les destinations sont perdues dès que l’on masque ou affiche une page modèle”

    Oui, c’est bien ça.

     

    “mais y a t-il donc un moyen de contourner ou de trouver une autre solution à ce problème ?”

    Il faut utiliser les numéros de page, ou sinon pour un pointage plus précis on peut envoyer le focus vers un champ, éventuellement masqué.

    this.getField("NOMDUCHAMPCIBLE").setFocus();

     

    #73154
    adrith
    Participant

    « J’en conclu que les destinations sont perdues dès que l’on masque ou affiche une page modèle » Oui, c’est bien ça. « mais y a t-il donc un moyen de contourner ou de trouver une autre solution à ce problème ? » Il faut utiliser les numéros de page, ou sinon pour un pointage plus précis on peut envoyer le focus vers un champ, éventuellement masqué. this.getField("NOMDUCHAMPCIBLE").setFocus();

    Oui bien vu cette solution, merci Merlin !

    #73155
    adrith
    Participant

    Alors très bizarre, ça fonctionne encore bien quand les pages ne sont pas “modèles”, mais avec les pages modèles, non.

    Les champs qui me servent pour le focus deviennent CH1#1 et CH2#1 au lieu de CH1 et CH2. Peut-être c’est à cause de ça. J’ai testé un appel depuis un bouton et depuis un lien mais même constat.

    Voici un fichier exemple si vous avez une idée. Les champs text sont placés tout en haut à gauche des pages modèles.

    Merci pour l’aide.

    Attachments:
    You must be logged in to view attached files.
    #73157
    Merlin
    Maître des clés

    Quand il y a plusieurs champs ayant le même nom il faut s’adresser au “widget” et non pas au champ, qui dans ce cas représente plusieurs widgets.

    Dans la liste des champs du panneau des outils de formulaire les widgets apparaissent avec leur nom de champ, suivi d’un dièse et suivi d’un numéro d’ordre. Ce numéro d’ordre est attribué lors de la création du widget et n’est pas modifiable.

    Dans la capture ci-joint on ne voit pas le widget numéro zéro car il est masqué puisque la page modèle sur laquelle il se trouve est masquée. Si on affiche la page modèle les deux widgets sont visibles dans la liste.

     

    La particularité des widgets c’est qu’on ne peut pas s’adresser à eux directement, il faut impérativement passer par une variable. Sachant aussi que dans les scripts il faut remplacer le dièse par un point.

    Ce qui pour tes boutons nous donne les scripts suivants :

    var f = this.getField("CH1.1");
    f.setFocus();

    et

    var f = this.getField("CH2.1");
    f.setFocus();

    Attachments:
    You must be logged in to view attached files.
    #73161
    adrith
    Participant

    Super Merlin, j’aurais appris quelque chose.

    Ça fonctionne nickel à présent en passant par une variable et en remplaçant le dièse par un point ! Bravo et merci.

    #73162
    Merlin
    Maître des clés

    👍

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