0 Replies Latest reply on Feb 7, 2017 3:04 AM by Liphou

    [JS] Indesign hyperlinkPageDestinations et hyperlinkExternalPageDestinations

    Liphou Level 1

      Bonjour,

       

      Je viens de terminé un script pour crée des liens entre les fichiers d'un livre.

      Sur base un fichier ouvert avec un faut index, je crée des lien vers d’autres fichiers du livre.

      Cela semble fonctionné correctement mais ...

      — Je n'ai pas pu partagé des liens  "hyperlinkExternalPageDestinations" avec différente source, je suis passé par "hyperlinkPageDestinations".

      — quand je suis dans l'interface d'indesign j’obtiens ...

      avant :

      Capture d’écran 2017-02-07 à 11.56.14.png

      si édite les liens, ils changent!

      Capture d’écran 2017-02-07 à 11.56.43.png

       

      C'est toujours correcte mais j'ai des doutes sur la bonne réalisation du script.

      Pouvez-vous m'aider en regardent mon script et me conseiller sur la meilleurs manière de faire?

       

      Merci à vous.

       

      #target "indesign-12.064" 
      /****************************************************************
          1 contrôle qu'il y a bien une selection, texte le style de carataire
          2 si livre ouvrire les fichiers
          
          3 faire la recjheche sur les numeros -> return une liste 
          
          4 test si le numero est bien reprit dans les pages
          
          5 crée les hypert lien 
          
          6 sauver les document (si)
          
          Ex fonctionnel
          
          — line externe  : TestHiperLinkEcrtanalPage.jsx
          — Supretio de tous le lien : RemoveAllHyperlink.jsx
          — Rename les hyperlien : renameHyperlinks.jsx
          — CreationDeLienOK.jsx
          
         ***************************************************************/
      
      // fais dans le CC2017 dois être compatible avec le CC2017 
      main()
      
      function main() {
      
       // problème quand du deux chiffre  avec style de caractaire ???
       // problème dans certin cas les chiffres ne change pas????
          if (app.documents.length > 0){ // IF 01 
                   inisalisationHyperLink (app.activeDocument);
              } else { 
                   alert("Ouvrir un document et selectioné votre text."); 
          } // fin du IF 01
      }//
      // Fin du main 
      
       function inisalisationHyperLink(leDocActif) {
           
              // Si livre  — si pas de livre reteurn 0 à faire !   
              var le_Livre =  get_book2 (); // si pas de livre faire juste des lien lienterne 
                    // Pour info // $.writeln(le_Livre.name);
              //  Ouverture des fichiers avec leur début et fin   
              var lesFichiesEtPagination = recupDuLivre(leDocActif, le_Livre) ;   
                    // Pour info // $.writeln("longeur : " + lesFichiesEtPagination.length + " un test : "+ lesFichiesEtPagination[0][0].name + " page : " + lesFichiesEtPagination[0][1].name  + " à " + lesFichiesEtPagination[0][2].name);     
              // suite creation des hyper lien pasage de parametres 1 — document actif  2 — tableau avec les documets du livre avec leur pagination
               creationHyperLink (leDocActif, lesFichiesEtPagination);
      }//
      //
      
       function creationHyperLink(leDocSource, lesDocDestinations) {
                 app.findGrepPreferences = NothingEnum.nothing;
                 app.changeGrepPreferences = NothingEnum.nothing;
              with (app.findGrepPreferences){
                      findWhat = "\\d+";
                        //appliedCharacterStyle = 'TDM Folio'; // Pour test 'Rouge'
                        appliedCharacterStyle = 'xxxx';// (leStyle!= null) ? leStyle : null;  // Pour test 'Bleu' / ATTENTION peux avoir des problème avec le Style qui manque 
                  } // fin 
              var lesPaginations = leDocSource.findGrep();
          
      
               // Pour info //$.writeln('myLinks (' + lesPaginations[0].contents.constructor  + ') : '+ lesPaginations.length);   
              for (i = 0; i < lesPaginations.length; i++){ // For 01
                // Pour info    //$.writeln(lesPaginations[i].contents);
                   for (var z = 0; z < lesDocDestinations.length; z++) {// Boucle FOR //2
                        if (Number(lesPaginations[i].contents) >= Number(lesDocDestinations[z][1].name) &&  // IF 02
                            Number(lesPaginations[i].contents) <= Number(lesDocDestinations[z][2].name)) {
                                  var laPagination = lesPaginations[i]; // toujour objet word
                                  var laSource = leDocSource.hyperlinkTextSources.add(laPagination);
                                        laSource.appliedCharacterStyle =  leDocSource.characterStyles.item('TDM Folio'); // ATTENTION peux avoir des problème avec le Style qui manque 
                                    // creation dans la function  
                                        maDestination = maCreationHyperlinkDestination(laPagination.contents, leDocSource, lesDocDestinations[z][0]);
                                // creation de l'hyperlien 
                                 var leLien = leDocSource.hyperlinks.add(laSource, maDestination);
                                          // Attribution du non à l'hyperlien si existe (erreur) -> nouveau Non 
                                       leLien.visible = false;   
                                          try {
                                                         leLien.name = 'Page ' + laPagination.contents;
                                              }
                                          catch (error) {
                                              leLien.name = 'Page ' + laPagination.contents + '_'+ i;
                                              //$.writeln( "catch 3 (name Exite dejà): " +  error );
                                          }
                                } // IF 01 // FIN      
                } // Boucle FOR //2 //FIN
          } // fin de laboucle FOR 01
      //
      } //
      // fin de la function creationHyperLink 
      //
      // Creation de la destination (ancre NON visible)
      function maCreationHyperlinkDestination(laDestPage, leDocSource2, leDocDestination){
          if (leDocDestination.name != leDocSource2.name) {
              // lien experne du documents de base 
               // Pour info // //$.writeln('Lien externe\n' + 'laDestPage : ' + laDestPage + '\nleDocSource2 : ' + leDocSource2.name + '\nleDocDestination : ' + leDocDestination.name);
              try {
                         var monHyperlinkDestination = leDocDestination.hyperlinkPageDestinations.item('Page ' + laDestPage);
                          //$.writeln('Try text.name : ' + test.name);
                          monHyperlinkDestination.name; // pour  test l'erreur
                      }
                  catch (error) {
                         var monHyperlinkDestination = leDocDestination.hyperlinkPageDestinations.add('Page ' + laDestPage);
                               monHyperlinkDestination.destinationPage = leDocDestination.pages.itemByName(laDestPage); // voir sans 
                               monHyperlinkDestination.name = 'Page ' + laDestPage;
                               monHyperlinkDestination.viewSetting = HyperlinkDestinationPageSetting.fitHeight;
                               //$.writeln( "catch 2 (existe pas): " +  error );
                  }
          } else {
              
                 try {
                         var monHyperlinkDestination = leDocSource2.hyperlinkPageDestinations.item('Page ' + laDestPage);
                          //$.writeln('Try text.name : ' + test.name);
                          monHyperlinkDestination.name; // pour  test l'erreur
                      }
                  catch (error) {
                         var monHyperlinkDestination = leDocSource2.hyperlinkPageDestinations.add('Page ' + laDestPage);
                               monHyperlinkDestination.destinationPage = leDocSource2.pages.itemByName(laDestPage); // voir sans 
                               monHyperlinkDestination.name = 'Page ' + laDestPage;
                               monHyperlinkDestination.viewSetting = HyperlinkDestinationPageSetting.fitHeight;
                               //$.writeln( "catch 2 (existe pas): " +  error );
                  }
          }// fin fin IF
      
          return monHyperlinkDestination;
      }  //
      //
       // Les function sur les livre et ouverture des fichiers avec retours des Names.
      function get_book2 () {
          switch (app.books.length)
              {
              case 0: return null;
              // Backup case 1: return app.books[0].name;
              case 1: return app.books[0];
              // pase le retoure du name mais l'objet livre
              default: return pick_book ();
          }
      }
      // fin de la function
         
      function pick_book (){
          var w = new Window ("dialog", "Select du livre");
          w.alignChildren = "right";
          var g = w.add ("group");
              var list = g.add ("listbox", undefined, app.books.everyItem().name);
              list.minimumSize.width = 250;
              list.selection = 0;
          var b = w.add ("group");
              b.add ("button", undefined, "OK", {name: "ok"})
              b.add ("button", undefined, "Annul", {name: "cancel"})
          if (w.show () == 1)
              return  app.books.itemByName(list.selection.text);
          else
          $.writeln ("Sortie");
              exit ();
          }
      //
      function recupDuLivre(leDocSource3, le_LivreSource) { 
          // Ouverture des documents avec un revoie des pagination de début et de fin et remettre le document Actif  sur le document de départ
          var lesInfo = [];
      
      // return tablrau avec [[leFichierover, laPageDeDébur,LaPageDeFin],[etc.]]; 
        if (le_LivreSource != null) { // Faire function ATTention sauver avent de referme les fichies !!!!!!!!!!! 
            
             var lesDocuments = le_LivreSource.bookContents.everyItem().getElements();
                    for (var y = 0; y < lesDocuments.length; y++) { 
                                      app.scriptPreferences.userInteractionLevel = UserInteractionLevels.neverInteract;  
                                      if (leDocSource3.name != lesDocuments[y].name /*.fullName*/) {
                                          var leDocumentOuvert = app.open(lesDocuments[y].fullName);
                                                lesInfo.push([leDocumentOuvert,leDocumentOuvert.pages.firstItem(),leDocumentOuvert.pages.lastItem()])
                                           // Pour info // //$.writeln ("Première page  :  " + leDocumentOuvert.pages.firstItem().name + " dèrnier page  :  " + leDocumentOuvert.pages.lastItem().name); 
                                          } else {
                                                  lesInfo.push([leDocSource3,leDocSource3.pages.firstItem(),leDocSource3.pages.lastItem()])
                                       } // fin du IF
                                 app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;  
                             } // boucle for
             // repossitioné le docment de bas au premiè plan
              app.activeDocument = leDocSource3; 
             return lesInfo;
          } else { // feire juste le doc source !!  
             return [[leDocSource3,leDocSource3.pages.firstItem(),leDocSource3.pages.lastItem()]];  // ATTENTION pas tester
        } // fin du IF 
      //
      }
      // fin de la function