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éateurSujet
-
22 novembre 2007 à 12:18 #43596
bebarth
Maître des clésBonjour,
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.
-
CréateurSujet
-
AuteurRéponses
-
22 novembre 2007 à 12:52 #49433
Merlin
Maître des clésEst-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…
22 novembre 2007 à 13:00 #49434bebarth
Maître des clésce 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!
22 novembre 2007 à 20:06 #49435Merlin
Maître des clésJe 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
22 novembre 2007 à 21:02 #49436bebarth
Maître des clésMerci 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
😮22 novembre 2007 à 21:28 #49437Merlin
Maître des clésje pense que j’ai compris et te dirai demain si ça fonctionne.
Nous sommes tous curieux…
23 novembre 2007 à 09:54 #49438bebarth
Maître des clésPour 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
???23 novembre 2007 à 13:00 #49439Merlin
Maître des clésIl 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 !
23 novembre 2007 à 14:01 #49440bebarth
Maître des clésBonjour 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
???24 novembre 2007 à 15:23 #49441Merlin
Maître des clésC’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…
24 novembre 2007 à 16:14 #49442bebarth
Maître des clésBonjour 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
???24 novembre 2007 à 16:21 #49443Merlin
Maître des clés24 novembre 2007 à 16:38 #49444bebarth
Maître des clésMerci, je vais y jter un oeil ce weekend!
bon weekend.
:-*26 novembre 2007 à 14:18 #49445bebarth
Maître des clésBonjour 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 & @+
😮26 novembre 2007 à 15:36 #49446Merlin
Maître des clésJe 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…
26 novembre 2007 à 15:39 #49447bebarth
Maître des clésMerci !!!
27 novembre 2007 à 08:30 #49448Merlin
Maître des clésCode: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.
27 novembre 2007 à 17:14 #49449bebarth
Maître des clésBravo et merci Merlin!
Je n’aurais jamais trouvé ça tout seul. Ça marche parfaitement.
28 novembre 2007 à 11:58 #49450Merlin
Maître des clés30 novembre 2007 à 16:28 #49451cdiautomation
MembreBonjour,
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.
30 novembre 2007 à 16:49 #49452bebarth
Maître des clésBonjour,
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.
:1 décembre 2007 à 11:29 #49453Merlin
Maître des clésUn 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
3 décembre 2007 à 08:38 #49454cdiautomation
MembreJuste 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.
3 décembre 2007 à 12:56 #49455bebarth
Maître des clésSuper « 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
:3 décembre 2007 à 13:16 #49456cdiautomation
MembreJe 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 :3 décembre 2007 à 13:38 #49457bebarth
Maître des cléssur 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.
😮 -
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.