Donnez vie à vos documents numériques !
 

Indexation des renvois de page dans document PDF. – RÉSOLU

abracadabraPDF Forums PDF – Général Indexation des renvois de page dans document PDF. – RÉSOLU

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #43983
    bebarth
    Maître des clés

    Bonjour,

    Comme pratiquement tous les ans maintenant, je travaille sur mon CD-ROM qui contient un catalogue (1600 pages) en 3 langues.
    Jusqu’à présent, l’indexation des renvois de page dans le texte (see page…) était fait manuellement. Mais cette année, avec l’automatisation des renvois dans la base de données, il y en a vraiment trop pour le faire manuellement. Surtout qu’avec les 3 langues, le travail doit être fait 3 fois, car ne sont pas situé exactement au même endroit.

    Dans « Acrobat JavaScript Scripting Reference », j’ai trouvé un script qui repère tous les mots « Acrobat » et fait un renvoi vers le site adobe. J’ai essayé et ce script fonctionne parfaitement avec ma version Acrobat 8.

    Je pense que pour un pro de javascript, l’adaptation à mon problème ne devrait pas trop poser de problème. Pour ma part, je balbutie avec le javascript une fois par an, et cela risque de me prendre plusieurs heures, voir journées.
    Y aurait-il une personne qui n’est pas encore en vacances ou déjà revenue, et qui pourrait m’aider.
    Merci d’avance, ci-dessous le script Adobe.
    bebarth

    for (var p = 0; p {
    var numWords = this.getPageNumWords(p);
    for (var i=0; i{
    var ckWord = this.getPageNthWord(p, i, true);
    if ( ckWord == « Acrobat »)
    {
    var q = this.getPageNthWordQuads(p, i);
    // convert quads in default user space to rotated
    // user space used by Links.
    m = (new Matrix2D).fromRotated(this,p);
    mInv = m.invert()
    r = mInv.transform(q)
    r=r.toString()
    r = r.split(« , »);
    l = addLink(p, [r[4], r[5], r[2], r[3]]);
    l.borderColor = color.red
    l.borderWidth = 1
    l.setAction(« this.getURL(‘http://www.adobe.com/’); »);
    }
    }
    }

Affichage de 14 réponses de 26 à 39 (sur un total de 39)
  • Auteur
    Réponses
  • #51891
    bebarth
    Maître des clés

    Pareil… Pour pp = 100 par exemple (30+pp-1) donne 3099 !!!
    Pour les sites, je verrai plus tard car je n’ai qu’une connexion 3G.
    :Euuuh:

    #51892
    alex
    Membre

    La somme est traitée comme une concaténation de caractères (« 30″+ »pp-1 ») !
    Essayez de forcer le calcul comme suit:

    action= »this.pageNum= »+(Math.round(30)+pp-1);
    Ou bien:
    action= »this.pageNum= »+(1*30+pp-1);

    #51893
    bebarth
    Maître des clés

    Les 2 solutions ne fonctionnent pas !!!
    J’ai trouvé la solution (ou une solution) que j’ai testé et qui fonctionne :

    var pp = parseInt(MotSuivant);
    pp+=30

    le problème est donc maintenant résolu, à moins que je ne m’aperçois d’un autre problème.
    Merci Alex et Merlin
    :D

    #51894
    alex
    Membre

    Je ne comprend pas, peux-tu donner l’ensemble du code ?

    #51895
    Merlin
    Maître des clés

    Merci Alex et Merlin

    Remercie surtout Alex…, moi il y a longtemps que j’ai décroché !
    :joker:

    #51896
    bebarth
    Maître des clés

    J’essaie de trouver une connexion wifi dans la journée et donne le script entier ! Sinon il faut que je retape tout sur mon iPhone…
    :geek:

    #51897
    alex
    Membre

    Juste pour comprendre, ça peut attendre une ou deux semaines bien sûr.

    #51898
    bebarth
    Maître des clés

    voici le script tel que je l’ai adapté pour mon document :
    console.clear();
    console.println(« Processus de creation des liens… »);
    for (var p = 0; p {
    console.clear();
    console.println(« Page « +(p+1));
    var numWords = this.getPageNumWords(p);
      for (var i=0; i  {
      var ckWord = this.getPageNthWord(p, i, true);
      console.println(i+ »-Mot trouve : « +ckWord);
          if ( ckWord == « page »|ckWord == « pages »)
          {
          //Analyse du mot suivant
          MotSuivant=this.getPageNthWord(p,(i+1),true);
          console.println(« Mot suivant trouve, lien a creer : « +MotSuivant);
          //Premier caractère est-il un chiffre?
            if(MotSuivant.charCodeAt(0)>=48&MotSuivant.charCodeAt(0)        {
            // pp numéro de la page indexee
            //conversion en variable numerique
            var pp = parseInt(MotSuivant);
            // ajout de 30 pages avant la page 1
            pp+=30
            console.println(« Créer des liens, mot suivant trouve est un chiffre, lien a creer : « +pp);
            var q = this.getPageNthWordQuads(p, i+1);
            // convert quads in default user space to rotated
            // user space used by Links.
            m = (new Matrix2D).fromRotated(this,p);
            mInv = m.invert()
            r = mInv.transform(q)
            r=r.toString()
            r = r.split(« , »);
            l = addLink(p, [r[4], r[5], r[2], r[3]]);
            // bords blancs
            l.borderColor = color.white
            l.borderWidth = 1;
            action= »this.pageNum= »+(pp-1);
            l.setAction(action);
            }
          }
      }
    }

    je vais lancer pour le document de 1600 pages cette nuit.
    est-ce que ce sera plus rapide si j’enlève les commandes « console ».
    je voudrais également mettre une commande d’enregistrement en fin de script pour savoir combien de temps cela a pris.
    :extra:

    #51899
    alex
    Membre

    Oui, enlever les commandes console.println(), ou les passer en commentaires.
    Ajouter ceci au début:

    d0=new Date();
    debut=util.printd(« dd-mm HH:MM »,d0)
    console.println(« Debut process: »+debut)
    Ajouter ceci à la fin:
    df=new Date();
    fin=util.printd(« dd-mm HH:MM »,df)
    console.println(« Fin process: »+fin)
    delta=(df.valueOf()-d0.valueOf())/1000/60
    console.println(« Duree process: »+delta+ » minutes »)

    #51900
    bebarth
    Maître des clés

    Ça marche impec…
    :joker:

    #51901
    bebarth
    Maître des clés

    Pour info, 350 mn pour 1640 pages !!!
    Plus que 2 versions…
    :extra:

    #51902
    bebarth
    Maître des clés

    Juste pour signaler que lorsque le texte est en italique (et uniquement), seule le premier chiffre est cliquable mais le numéro de page indexé est correct.
    cela me convient parfaitement car je n’ai pas beaucoup de texte en italique, mais juste pour info, est-il possible de rechercher un mot (page en l’occurence) dans une police bien précise ?
    merci
    :oh:

    #51903
    alex
    Membre

    Pour contourner ce problème il faudrait calculer la longueur du rectangle en fonction du numéro de page, au lieu de faire confiance à la taille du WordQuad qui est manifestement erronée (un petit bug dans cette fonction lorsqu’on est en italique). On fera ça la prochaine fois …

    #51904
    bebarth
    Maître des clés

    merci alex !
    ce doit être assez compliqué car en plus du nombre de caractères du numéro de page, il faut certainement aussi prendre en compte la police et le corps utilisé !!!
    …et en ce qui concerne la recherche d’un mot dans une police précise, c’est possible ?
    :???:

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