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 25 réponses de 1 à 25 (sur un total de 39)
  • Auteur
    Réponses
  • #51866
    bebarth
    Maître des clés

    Bonjour,
    Après mes premiers essais, je m’aperçois que la variable ckWord ne doit pas contenir d’espace (un simple mot). Si on ne doit travailler que sur le numéro de page, à chaque fois que le script trouvera le chiffre il fera un renvoi, même si ce numéro ne correspond pas à un numéro de page.
    Je pense qu’il faudrait donc travailler plutôt sur une chaîne de caractères.
    Je poursuis mes recherches.
    bebarth

    #51867
    bebarth
    Maître des clés

    J’ai trouvé le script de Merlin qui est plus complet et convivial que celui d’Adobe, mais qui est sur la même base.
    http://www.abracadabrapdf.net/forum/index.php?topic=1185.msg5151#msg5151

    #51868
    Merlin
    Maître des clés

    Salut,

    je ne comprend pas bien… ces scripts me semblent convenir pour faire ce que tu as à faire.
    Rechercher « mot », et appliquer un hyperlien.

    Où rencontres tu un problème ?
    :)

    #51869
    bebarth
    Maître des clés

    Bonjour Merlin,
    au début, je voulais indexer « voir page xxx » avec renvoi à la page xxx, mais « voir page xxx » ça fait 3 mots et non un seul, donc le script ne fonctionne pas.
    Si j’utilise le script en n’indiquant que le numéro de page (50 par exemple), à chaque fois que le script va rencontre « 50 », il va l’indexer à la page 50, même si ce nombre correspond à autre chose (longueur, poids…)
    bebarth

    #51870
    Merlin
    Maître des clés

    C’est effectivement un problème que j’avais rencontré avec ce script, mais dans mon cas ce n’était pas vraiment un problème, donc je n’avais pas cherché plus loin.

    Essaye en saisissant l’espace* en Unicode : u0020
    Sinon j’espère qu’il existe un métacaractère pour signifier l’espace en JavaScript…
    :idee:

    * ou bien l’expression en entier : http://abracadabrapdf.net/articles.php?lng=fr&pg=440

    #51871
    bebarth
    Maître des clés

    Ça ne marche pas !!!
    N’est-il pas possible de rechercher une chaîne de caractères ?
    Par exemple, si on pouvait faire une recherche d’une chaîne de caractères qui serait la concaténation d’une première chaîne « page  » et d’une variable « xxx » représentant le numéro de la page ?
    :doute:

    #51872
    bebarth
    Maître des clés

    Merlin,
    J’ai aussi regardé ton script de comptage de mots, ou tu fais la distinction entre les mots avec et sans chiffres : ne pourrait-on faire une recherche sur les mots « page », et si le mot suivant est un chiffre, on peut l’indexer…
    ça, des idées, j’en ai : c’est les concrétiser que j’ai du mal…
    :idee:

    #51873
    Merlin
    Maître des clés

    On va attendre le passage de notre spécialiste du JavaScript… parce-que je ne suis pas non plus l’auteur du script de comptage de mots…
    Moi ce que je maîtrise le mieux en JavaScript c’est le copier-coller et la mise en variable des messages d’alerte.
    :joker:

    #51874
    bebarth
    Maître des clés

    Pour info, ci-joint l’adresse de l’e-book qui a été fait (aux US) à partir des fichiers pdf :
    http://www.nxtbook.com/nxtbooks/newportcorp/resource2011/#/36
    On peut remarquer que l’indexation des pages fonctionne. Le sous-traitant affirme que son logiciel le fait automatiquement, mais que ces liens ne peuvent être remontés dans le pdf.
    C’est donc peut-etre possible d’y arriver avec un script !
    :???:

    #51875
    bebarth
    Maître des clés

    Bon, ben finalement je me suis lancé, et bien sure ça marche pas !
    C’est peut-être un début de quelque chose.
    Si l’un de vous a une idée…
    Merci d’avance.
    :doute:

    for (var p = 0; p {
    var numWords = this.getPageNumWords(p);
    for (var i=0; i{
    var ckWord = this.getPageNthWord(p, i, true);
    if ( ckWord == « page »)
    {
    //Analyse du mot suivant
    MotSuivant=this.getPageNthWord(p,i+1,0);
    //Premier caractère est-il un chiffre?
    if(MotSuivant.charCodeAt(0)>=48&MotSuivant.charCodeAt(0){
    // pp numéro de la page indexee
    var pp = MotSuivant.Value
    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]]);
    l.borderColor = color.red
    l.borderWidth = 1
    l.setAction(« this.pageNum(pp); »);
    }
    }
    }
    }

    #51876
    alex
    Membre

    Si j’ai bien compris, voici qui devrait mieux se comporter…
    Les erreurs sont signalées dans le script.

    console.clear();
    console.println(« Processus de creation des liens… »);
    for (var p = 0; p {
    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 == « Page »)
    {
    //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
    //erreur ici
    var pp = MotSuivant;
    //fin erreur
    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]]);
    l.borderColor = color.red
    l.borderWidth = 1;
    //erreur ici
    action= »this.pageNum= »+(pp-1);
    l.setAction(action);
    //fin erreur
    }
    }
    }
    }

    #51877
    Merlin
    Maître des clés

    :bravo:

    #51878
    bebarth
    Maître des clés

    je profite d’une connexion wifi difficile à trouver pendant mes vacances pour remercier alex de cette excellente réponse !!!!
    :extra:
    merci aussi à Merlin pour son aide.
    :contentdance:

    #51879
    alex
    Membre

    A tester quand même avec un document volumineux ! J’ai ajouté dans la recherche les mots « Page » et « page »:
      if ( ckWord == « page »|ckWord == « Page »)
    Bonne vacances !

    #51880
    Merlin
    Maître des clés

    A tester quand même avec un document volumineux !

    Ca sature la console et ça prend un temps fou !
    ;)

    #51881
    alex
    Membre

    Pour ne pas saturer la console, placer un console.clear() comme suit:

    for (var p = 0; p {
    console.clear();
    console.println(« Page « +(p+1));
    var numWords = this.getPageNumWords(p);

    Ainsi, la console sera effacée à chaque ouverture de page…On peut aussi supprimer toutes les impressions dans la console.

    En ce qui concerne le temps de calcul, c’est une autre affaire…Peut-être que la méthode que j’ai utilisé dans la mesure d’encrage pour définir le rectangle est meilleure mais ce n’est pas sûr.

    #51882
    bebarth
    Maître des clés

    J’ai fait un essai sur 175 pages, et ça m’a pris 1/2 heure. Je fait une vérif vite fait, et je lance pour 1600 pages. Cela devrait prendre 4,5 heures, mais je trouve ça raisonnable. J’ai cela à faire pour les 3 langues. Pour ce qui est du français, je fais la recherche sur « page » et « pages » car je sais qu’il n’y aura pas de « Page ». Je ferai l’indexation des « pages » suivantes manuellement car je sais qu’il n’y en a pas beaucoup.
    Pour ce qui est de la console, je n’y comprend pas grand chose ! J’ai essayé de lancer l’application console du Mac, mais je ne vois rien…
    Merci encore !

    #51883
    Merlin
    Maître des clés

    Pour ce qui est de la console, je n’y comprend pas grand chose ! J’ai essayé de lancer l’application console du Mac, mais je ne vois rien…

    Il s’agit de la console d’Acrobat : Pomme + J (ou CRTL + J sur PC).
    ;)

    #51884
    bebarth
    Maître des clés

    Il me manque vraiment des notions de base en Javascript ! D’ailleurs j’aimerais trouver un livre pour les nuls…
    Mon nouveau problème est que j’ai 30 pages avant la page 1. J’ai don essayé d’incrémenter la variable pp avec pp+30, mais cela ne fonctionne pas ! Par exemple pour pp=100, pp+30 donne 10030. Ce qui me parait étrange, c’est que pp+30-1 donne 10029 !!!
    Quel est donc le bon opérateur pour avoir pp+30 en numérique ???
    Merci :mur:

    #51885
    alex
    Membre

    Il suffit de partir de la page 31, ce qui donne:
    for (var p = 30; p Le JavaScript pour les nuls, ça existe:
    http://www.amazon.fr/JavaScript-pour-nuls-Emily-VanderVeer/dp/2844277160
    Mais il s’agit du JavaScript pour HTML, pas de celui qui gère les objets d’Acrobat, pourtant les bases sont là. Pour trouver votre bonheur faites un tour chez Eyrolles.

    #51886
    Merlin
    Maître des clés

    Le JavaScript pour les nuls, ça existe:[/color]
    http://www.amazon.fr/JavaScript-pour-nuls-Emily-VanderVeer/dp/2844277160

    Est-ce que ça existe en DVD ?

    #51887
    alex
    Membre

    Tu me poses une colle, j’aime bien l’écrit et je ne suis pas très DVD ou Webminar, si je passe chez Eyrolles, je regarde ce qui est le mieux …
    Autre source, excellente et pas seulement en Javascript (j’ai trouvé tout ce qu’il faut en AJAX, SQL, pHp et Flex):

    http://javascript.developpez.com/cours/

    #51888
    bebarth
    Maître des clés

    Merci Alex, mais je ne comprends pas le raisonnement de commencer la recherche des numéros de page à partir de la page 30 avec :
    for (var p = 30; p A mon avis il faudrait augmenter la variable pp de 30 dans :
             action= »this.pageNum= »+(pp-1);
    :doute:

    #51889
    alex
    Membre

    Si la page 1 est en 30ème position et si on ignore les 29 première pages du document, il faut doute faut-il écrire:
    action= »this.pageNum= »+(30+pp-1);

    #51890
    Merlin
    Maître des clés

    http://javascript.developpez.com/cours/

    Merci, ce site à l’air intéressant et plein de ressources.
    :bravo:

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