Donnez vie à vos documents numériques !
 

Ouvrir un fichier pdf à la même page que celui ouvert (dans une autre langue)

abracadabraPDF Forums PDF – Général Ouvrir un fichier pdf à la même page que celui ouvert (dans une autre langue)

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

    Bonjour,
    j’utilise acrobat depuis plusieurs années, mais je suis débutant en javascript.

    j’ai une catalogue (pdf) de 1500 pages disponible en 3 langues et je voudrais faire un bouton (par page) qui permette d’ouvrir à partir d’une langue, un autre fichier pdf de ce catalogue dans une autre langue, à la même page que celui d’origine.
    J’ai fait un petit script, mais j’arrive toujours à la première page du second document:

    var pgnum = this.pageNum;
    var otherDoc = app.openDoc(« ENGLISH.pdf », this);
    otherDoc.pageNum=pgnum;

    j’ai fait plein d’autres essais, mais sans succès !

    y-a-t’il une solution ?

    Merci d’avance.

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

    Est-ce que ce sont 1500 pages identiques ? Et avec quel logiciel sont-elles composées ?

    Si la 1re réponse est oui et en fonction de la 2e il serait possible d’envisager une navigation par calques. C’est-à-dire de créer un PDF multicalques (utilisable avec Reader ou Acrobat version 6 ou ultérieure), chaque calque contenant une langue différente il devient très facile de naviguer entre les versions linguistiques (puisque sans changement de page).

    Autres avantages : gestion des mises à jour facilitées, pas d’utilisation de JavaScript (qui est parfois désactivé).

    Je vais regarder le JavaScript utilisé de plus près, dès fois que les réponses aux questions ci-dessus le rendent indispensable…

    ;)

    #49434
    bebarth
    Maître des clés

    ce sont 3 catalogues strictement identiques, mais en 3 langues différentes (Anglais, Français et Allemand).
    Ils ont été créés sous QuarkXPress 6 (mac).

    Le but est de faire un CD-ROM contant ces 3 versions. Les années précédentes, je faisais un bouton au début de chaque chapitre qui renvoie un une page bien définie (il y avait une vingtaine de boutons donc pas trop difficile à faire) mais cette année je voudrais faire un bouton sur toutes les pages (pour 1500 pages c’est plus long…).

    Merci!

    #49435
    Merlin
    Maître des clés

    Je pense que le script est bon sur le fond mais il faudrait que tu fasse appel à une variable globale, et non pas à une variable simple qui n’est pas censée passer d’un document à l’autre.

    Je te conseille de télécharger ce doc, c’est la bible du JavaScript sur Acrobat :

    –> http://partners.adobe.com/public/developer/en/acrobat/sdk/AcroJS.pdf

    ;)

    #49436
    bebarth
    Maître des clés

    Merci Merlin,
    je pense que j’ai compris et te dirai demain si ça fonctionne.
    j’avais déjà ce doc, et c’est grace à lui que j’ai pu écrire mon script.
    @+ dans une autre question.
    merci encore
    😮

    #49437
    Merlin
    Maître des clés

    je pense que j’ai compris et te dirai demain si ça fonctionne.

    Nous sommes tous curieux…

    ;)

    #49438
    bebarth
    Maître des clés

    Pour l’instant je ne m’en sort pas avec les variables globales!
    J’ai même essayé l’exemple donné page 443 du document Acrobat JavaScript Scripting Reference, et ça ne fonctionne pas!!! j’ai pourtant juste fais copier/coller…
    si quelqu’un a une idée ou s’il sait utiliser les variables globales.
    Merci
    ???

    #49439
    Merlin
    Maître des clés

    Il faudrait que tu précises quel est le script de la page 443, parce qu’apparemment on n’utilise pas la même version de ce doc !

    :)

    #49440
    bebarth
    Maître des clés

    Bonjour Merlin,
    la doc que j’ai est du 29, septembre 2005 (Adobe Acrobat 7.0.5)

    voici le script, peeux-tu voir si ça fonctionne de ton côté :

    Example
    In this example, there are two files, setRadius.pdf and calcVolume.pdf, open in Acrobat or Adobe Reader:
    ?setRadius.pdf has a single button with the code
    global.radius = 2;
    ?calcVolume.pdf has a document-level JavaScript named subscribe:
    // In the Advanced > JavaScripts > Document JavaScripts
    global.subscribe(« radius », RadiusChanged);
    function RadiusChanged(x)// callback function
    {
    var V = (4/3) * Math.PI * Math.pow(x,3);
    this.getField(« MyVolume »).value = V;// put value in text field
    }
    ?With both files open, clicking on the button in setRadius.pdf immediately gives an update in the text field “MyVolume” in calcVolume.pdf of 33.51032 (as determined by global.radius = 2.

    Merci
    ???

    #49441
    Merlin
    Maître des clés

    C’est bien celui que j’ai vu mais je croyais que tu avais trouvé un exemple plus précis.

    Si tu peux me communiquer le script que tu en tiré (celui que tu as essayé) ça me fera gagner du temps, mais malheureusement je n’aurais pas vraiment de temps a y consacrer avant jeudi prochain…

    ;)

    #49442
    bebarth
    Maître des clés

    Bonjour Merlin,
    je t’enverrai le script dès lundi, et ferai d’autre essai en attendant jeudi…
    comme je ne suis pas un expert en javascript, pourrais-tu m’indiquer ou je pourrais trouver un documents avec toutes les fonctions avec leurs attributs.
    merci d’avance
    ???

    #49443
    Merlin
    Maître des clés
    #49444
    bebarth
    Maître des clés

    Merci, je vais y jter un oeil ce weekend!
    bon weekend.
    :-*

    #49445
    bebarth
    Maître des clés

    Bonjour Merlin,
    Voici le script que j’ai écris :

    global.pgnm = this.pageNum;
    getField(« monChamp »).value=global.pgnm;
    var otherDoc = app.openDoc(« ENGLISH.pdf », this);
    otherDoc.pageNum = global.pgnm;
    otherDoc.getField(« monChamp »).value=global.pgnm;

    comme tu peux le voir, j’ai rappelé 2 fois la variable globale (une fois sur chaque document). Elle est bien conservée dans le document d’origine, mais elle est perdue dans le document ouvert (ENGLISH.pdf)…

    je continue à chercher mais je n’ai pas beaucoup de nouvelles idée aujourd’hui.

    Merci & @+
    😮

    #49446
    Merlin
    Maître des clés

    Je crois que j’ai idée sur ce qui ne va pas, je te tiens au courant dès que j’ai un peu de temps…
    ;)

    #49447
    bebarth
    Maître des clés

    Merci !!!
    ;)

    #49448
    Merlin
    Maître des clés
    Code:
    global.pgnm = this.pageNum;
    this.getField(« monChamp »).value=global.pgnm;
    var otherDoc = app.openDoc(« ENGLISH.pdf », this);
    otherDoc.pageNum = global.pgnm;
    otherDoc.getField(« monChamp »).value=global.pgnm;

    Bonne nouvelle ! Ce script fonctionne très bien, aussi bien pour l’ouverture sur la bonne page que pour le remplissage du champ témoin. En fait c’est ton script auquel j’ai rajouté « this. » au début de la 2e ligne.

    Cependant mon idée était bonne et ce n’est pas seulement ça qui fait que ça fonctionne ou non, en fait il faut ajouter une ligne de script au doc cible pour déverrouiller la propriété Disclosed qui par défaut empêche tout transfert d’info d’un doc à l’autre.
    Cette propriété à un fonctionnement spécial car, le mieux étant l’ennemi du bien, Adobe a commis une grosse bourde lors de son intégration dans la version 5.0.5 d’Acrobat.
    Je te conseille d’examiner la doc (AcroJS.pdf) pour en savoir plus.

    Donc il te faut placer en script de document (menu Options avancées > Traitement du doc > Scripts JavaScripts) de chaque document cible le script suivant :

    Code:
    this.disclosed = true;

    On peux aussi placer ce script en « script d’ouverture de page » quand on sait à l’avance sur quelle page le doc doit s’ouvrir mais ici ce n’est pas le cas, justement.

    ;)

    #49449
    bebarth
    Maître des clés

    Bravo et merci Merlin!
    Je n’aurais jamais trouvé ça tout seul. Ça marche parfaitement.
    :D

    #49450
    Merlin
    Maître des clés

    8);)

    #49451

    Bonjour,
    Il existe une autre solution que celle qui passe par les valeurs globale c’est l’expression suivante :
    depuis le catalogue Français pour ouvrir l’Anglais
    var d = app.openDoc(« CatalogueAnglais.pdf »,this); closeDoc(true);d.pageNum = this.pageNum;

    On envoie le numéro de page à la fin de l’expression.

    #49452
    bebarth
    Maître des clés

    Bonjour,
    Merci pour cette autre solution, mais celle-ci necessite apparemment de fermer le premier document, alors que celle de Merlin permet de naviguer entre les deux.
    C’est quand même bien de la savoir.
    ::)

    #49453
    Merlin
    Maître des clés

    Un petit script à l’ouverture (et à la fermeture pour rétablir) permet de prendre le contrôle de certaines préférences d’affichage, dont le choix d’ouvrir le lien dans une même fenêtre ou une autre fenêtre.

    Dans le 1er cas l’utilisateur revient sur le doc de départ via le bouton retour (vue précédente).

    Pour le contrôle des Préférences d’affichage voir les fichiers de démo des diaporamas (Aubade & Pins de Salzmann), fonctions qui sont documentées dans les AbracadabraScripts :

    –> http://abracadabrapdf.net/articles.php?lng=fr&pg=133

    –> http://abracadabrapdf.net/articles.php?lng=fr&pg=124

    :)

    #49454

    Juste une petite précision, j’utilise « closeDoc(true); » uniquement pour éviter que l’utilisateur de mes fichiers PDF n’en ai trop d’ouvert sur son poste, ceux-ci étant essentiellement constitués de plans et sont de ce fait assez gros (de 500k à 28 Mb!).  ;)
    Dans mes fonctions de navigation j’utilise aussi la valeur « this.viewState ». Celle-ci est un objet regroupant entre autre : le n° de la page, le % de zoom ainsi que la position de la fenêtre.
    En transférant cette valeur à un autre document ayant la même structure, on peut faire apparaître à l’utilisateur la même portion de page, ce qui dans le problème posé pour des documents identiques dans différentes langues pourrait être intéressant.
    8)

    #49455
    bebarth
    Maître des clés

    Super « this.viewState » !!!
    Chacun de mes catalogue pèse environ 90 Mo. Je me demande encore si je dois ne garder qu’un seul fichier ouvert ou si je les conserve tous ouverts.
    Si je ne garde qu’un seul fichier ouvert, quel est l’avantage d’ouvrir dans la même fenêtre???
    Merci
    ::)

    #49456

    Je vais faire la réponse du berger à la bergère : pourquoi ouvrir dans des fenêtres différentes ?
    Dans beaucoup d’entreprises, la capacité mémoire des machines mises à disposition des employés est du genre config de base, c’est à dire stricte minimum pour que ça tourne sans problème majeur. Le fait de laisser des documents aussi gros en mémoire peut aller jusqu’à la « plantée » du système, chose que je ne veux pas. ;)
    Ce qui suit n’a rien à voir avec la question de base : />🙁 » title= »>:( » class= »bbcode_smiley » /><br />Les responsables informatiques pensent toujours que ce qu’ils font c’est ce qu’il y a de meilleur. Je suis effaré de constater que le simple fait de demander une mise à jour du Reader, qui jusqu’à preuve du contraire, est gratuit, pose problème auprès des informatiens (ou de société de services qui s’occupe de l’informatique d’un client). Certaines fonctions java ne sont pas actives dans la version 7.0.3, mais elles le sont dans les versions suivantes du 7, je rencontre souvent des versions 7.0.0, où c’est tout le java qui n’est pas enclenché. Ne parlons pas du 8, c’est pire, ils y en a qui ne savent même pas que cette version existe.<br />Bonne journée  <img loading=

    #49457
    bebarth
    Maître des clés

    sur le cd, il y aura acrobat 8 executable ! c’est ce que je faisais less autres années, plus des liens pour télécharger les différentes versions selon la plateforme.
    😮

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