Javascript events zu PDF hinzufügen

Fragen & Antworten zur Steuerung von 3D Inhalten in PDFs über JavaScript
Antworten
nahni
Beiträge: 30
Registriert: 30.06.2012, 00:13

Javascript events zu PDF hinzufügen

Beitrag von nahni » 26.01.2013, 15:52

Hi,

ich hab ein 3D PDF und hab ein Javascript mit einem EventHandler für Doppelklick mit der Maus, ungefähr so:

Code: Alles auswählen

var myMouseHandler = function( event ) {
    if ( event.isDoubleClick ) {
        var myMesh = null;
        if ( event.hits.length > 0 ) myMesh = event.hits[0].target;
        if ( myMesh != null ) {
            host.app.alert("You clicked on " + myMesh.name);
            }
    }
}
var mouseEventHandler = new MouseEventHandler();
mouseEventHandler.onMouseDown = false;
mouseEventHandler.onMouseMove = false;
mouseEventHandler.onMouseDoubleClick = true;
mouseEventHandler.onEvent = myMouseHandler;
runtime.addEventHandler( mouseEventHandler );
Allerdings muss ich den Javascript-Code in eine .js-Datei packen und dem 3D Inhalt über Rechtsklick->Eigenschaften->3D -> Script Pfad zu der Datei, hinzufügen.

Kann ich das nicht irgendwie ohne diese extra js-Datei lösen, so wie dieses Dokumenten Javascript (im Acrobat unter Javascript: Alle Javascript-Anweisungen bearbeiten)?

nahni
Beiträge: 30
Registriert: 30.06.2012, 00:13

Javascript events zu PDF hinzufügen

Beitrag von nahni » 27.01.2013, 14:49

ok, ähm, also ich weiß mir nicht anderst zu helfen als diesen Code in die docOpen-Funktion reinzulegen:

Variante A:

Code: Alles auswählen

//<Document-Level>
//<ACRO_source>docOpened</ACRO_source>
//<ACRO_script>
/*********** gehört zu: Document-Level:docOpened ***********/

     var myMouseHandler = new MouseEventHandler();
     
     myMouseHandler.onEvent = function(event) {

         console.println("test");

     }

     runtime.addEventHandler(myMouseHandler); 
//</ACRO_script>
//</Document-Level>
 
hier bekomm ich dann den Fehler

MouseEventHandler is not defined



Wenn ich dagegen allerdings das hier habe:

Variante B:

Code: Alles auswählen

//<Document-Level>
//<ACRO_source>docOpened</ACRO_source>
//<ACRO_script>
/*********** gehört zu: Document-Level:docOpened ***********/

     var context3D = getAnnots3D(0)[0].context3D;

     myMouseHandler = new context3D.MouseEventHandler();

     myMouseHandler.onEvent = function(event) {

         console.println("test");

     }

     context3D.runtime.addEventHandler(myMouseHandler); 

//</ACRO_script>
//</Document-Level>
Funktioniert das Ganze bedingt, also das Problem hierbei ist anscheinend, dass wenn das PDF geöffnet wird und der Code ausgeführt wird dieses getAnnots3D(0)[0] noch nicht aktiviert ist und es deshalb einen Fehler bekomme. (Wenn ich das PDF offen habe und das 3D aktiviert und dann den Javascript Code hinzufügen, dann funktionierts, also auch mehrmals, jedesmal wenn ich Klicke bekomme ich die Konsolenausgabe (dachte eigentlich diese Funktion wird nur beim Öffnen von dem PDF einmal ausgeführt?), aber wenn ich das PDF zu und wieder aufmachen gehts nicht mehr, dann kommt der Fehler:
context3D is undefined
)

Warum bekomme ich ohne dieses context3D (VarianteA) vor dem MouseEventHandler einen Fehler? Kann ich das nicht ohne context3D lösen, wenn das beim Öffnen noch nicht geladen ist?

Ich könnte ja auch ein

Code: Alles auswählen

 var a3d = getAnnots3D(0)[0];
 if ( a3d.activated )
 {...
}
 
drum machen, aber dadurch dass das in der docOpen-Funktion dirn steht, wird der Code dann auch gar nicht mehr ausgeführt?
Muss ich das denn in so eine Funktion reinmachen? Kann ich das nicht irgendwo 'dazwischen' ablegen, dass das quasi immer aufgerufen wird wenn jeamnd klickt?

Benutzeravatar
Merklin
Beiträge: 1857
Registriert: 04.04.2009, 17:03

Javascript events zu PDF hinzufügen

Beitrag von Merklin » 27.01.2013, 20:01

Hallo nahni,

also gleich vorne weg, ich habe 0 Ahnung von 3D Geschichten in Acrobat.
Also kann ich dir nur ein paar Hinweise liefern.

Dein Script in "Scripte mit Dokumentenaktionen verknüpfen" zu legen, ist nicht wirklich optimal.
Da z.B. bei docOpen das Script nur einmal, beim öffnen ausgeführt wird.

Besser du legst es als Funktion, in die Dokumentenebene ab. Und rufst dann diese Funktion, durch z.B. Schaltfläche o.s.ä. auf.

Sorry, mehr kann ich leider, für dich nicht tun.

VG Merklin

nahni
Beiträge: 30
Registriert: 30.06.2012, 00:13

Javascript events zu PDF hinzufügen

Beitrag von nahni » 28.01.2013, 07:35

Hey,

danke erstmal für die Antwort.
Besser du legst es als Funktion, in die Dokumentenebene ab.
Wie mache ich das? Wusste gar nicht dass es sowas gibt, dachte ich bin die ganze Zeit auf Dokumentenebene. Im Internet ist es furchtbar schwierig irgendwie ein Einsteiger-Tutorial zu finden. Man findet überall nur Code-Snippets, aber nirgends wo/wie man die einbindet.

Und rufst dann diese Funktion, durch z.B. Schaltfläche o.s.ä. auf.
Ok, das ist halt ein wenig doof, weil wozu hab ich einen EventHandler, der auf Mausklick reagieren soll, wenn man vorher immer einen Button drücken muss?
Ich mein wenn es schon sowas gibt, dann muss der ja auch irgendwie eingebunden werden können?

Benutzeravatar
Merklin
Beiträge: 1857
Registriert: 04.04.2009, 17:03

Javascript events zu PDF hinzufügen

Beitrag von Merklin » 28.01.2013, 20:00

Hallo nahni,

in diesem Bild siehst du, wo du das Script ablegen kannst. Vielleicht geht es, dann ja auch ohne Schaltfläche.

VG Merklin
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

theOrangenkopf
Beiträge: 9
Registriert: 07.05.2014, 14:45

Javascript events zu PDF hinzufügen

Beitrag von theOrangenkopf » 07.05.2014, 15:22

nahni hat geschrieben:..., dass wenn das PDF geöffnet wird und der Code ausgeführt wird dieses getAnnots3D(0)[0] noch nicht aktiviert ist und es deshalb einen Fehler bekomme.
Ja, das ist das Problem.

Alternativ hättest du das Objekt auch einfach aktivieren können:

Code: Alles auswählen

getAnnots3D(0)[0].activated = true;
context3D =  getAnnots3D(0)[0].context3D;
Dann müsstest du deinen Eventhandler auch in die Dokumentenebene legen.

Antworten