PDA

Vollständige Version anzeigen : Bookmarks in Adobe Acrobat erstellen


alxy
16.07.2014, 14:21
Hallo,

ich versuche grade Bookmarks in einem PDF mittels Excel/VBA zu erstellen. In der einfachsten Form geht das auch (mit der JS-API):

Sub MakeBookmarks()
Dim i%
Dim Z As Long
Dim gApp As Acrobat.CAcroApp
Dim gPDDoc As Acrobat.CAcroPDDoc
Dim gAVDoc As Acrobat.CAcroAVDoc
Dim jso As Object, newBookmark As Object, BMR As Object, BM As Object

Set gApp = CreateObject("AcroExch.App")
gApp.Show
Set gAVDoc = gApp.GetActiveDoc
Set gPDDoc = gAVDoc.GetPDDoc
' Javascript object
Set jso = gPDDoc.GetJSObject
' TypeName (jso.bookmarkRoot.createChild("Next Page", "this.pageNum=" + 5))
jso.bookmarkRoot.createChild ("Next Page")
' AppActivate "Adobe Acrobat Standard", True
'Do
' Err.Clear
' Z = Z + 1
' If Z = 1 Then Exit Sub
' Application.Wait Now + TimeValue("0:00:01")
'DoEvents
' AppActivate "Adobe Acrobat Standard", True
'Loop Until Err = 0 'Schleife solange nicht Fehlerlos
With Range("LstBookmarks")
For i = 1 To .Rows.Count
' Goto page
SendKeys "+^n" & .Cells(i, 1) & "{Enter}", True
' Create bookmark
SendKeys "^b" & Trim(.Cells(i, 3)) & "{Enter}", True
Next i
End With
AppActivate "Microsoft Excel"
End Sub

Das Problem ist, sobald ich den 2ten oder 3ten Paramter der createChild() Methode angebe, fangen die Fehler an. Solange ich dem Aufruf keine Variable zuweise, bekomme ich nen Syntax-Error. Wenn ich das dann mache, und zwar egal ob ohne Typangabe, Object, variant, Bollean, String, ... , kommt immer "Typen unverträglich" (13). Mir ist das unbegreiflich. Zum testen, die Zeile sieht dann so aus:

BM = jso.bookmarkRoot.createChild("Next Page", "this.pageNum=" + 5, 0)

der Debugger sagt übrigens, "BM = Nothing". Habe den Variablennamen auch schon mal geändert falls der irgendwie kollidiert. Brachte auch nichts.

Freue mich über jede Hilfe.

alxy

alxy
17.07.2014, 08:25
Achja, falls jemand eine andere Lösung zum selben Ergebnis hat (Man sieht ja die auskommentierte SendKeys-Variante), dann immer her damit. Das Problem an dieser Variante ist, dass alle Bookmarks als "Untitled" erstellt werden, obwohl das eigentlich klappt. Habe die Key anweisungen mal in Excel durchgeführt und dort funktioniert es (habe auch testweise einen konstanten Wert als Titel verwendet.)

MWOnline
17.07.2014, 09:02
Hallöchen,

ich habe schon einmal ein Projekt mit Adobe Bookmarks erstellt. Ich habe es alelrdings gerade hier nicht griffbereit. Ich habe mich damals mit der Adobe API auseinandergesetzt. Dort hast Du die Möglichkeit direkt Bookmarks zu setzen und auszulesen. Schau Dir einfach mal die Dokumentation dazu an, vielleicht findest Du so auch die Lösung wie ich damals. Denn eine SendKey Lösung... naja ;)

Beste Grüße und Viel Erfolg
Marc

alxy
17.07.2014, 09:17
Ich war ja dabei, allerdings hab ich mich gestern mehrere Stunden mit dem in Post 1 erwähnten Fehler beschäftigt und konnte Ihn nicht lösen. Mir wäre die native API auch tausendmal lieber als dieser Murks, ich bin grade sogar dabei diverse Delays einzubauen, da das Makro glaube ich zu schnell für den Acrobat abläuft und daher alle Bookmarks untitled sind. Wenn du dein Projekt doch noch findest, wäre es auf jedenfall gut, das hier zu posten. Die Google Ergebnisse zu diesem Thema sind eher mau... :eek:

MWOnline
17.07.2014, 09:24
Hallöchen,

ich weiss ja wo das Projekt ist, nur komme ich im Moment von hier aus nicht dran ;) Aber mit Google findest Du auch Beispiele für Bookmarks mit Adobe API. Wie gesagt ansonsten einfach die API studieren... kostet zwar Zeit aber danach läuft es ;)

Beste Grüße
Marc

MWOnline
17.07.2014, 09:43
Hallöchen,

ich erinnere mich gerade an folgende Dinge die ich verwendet hatte, aber ohne Gewähr :D

Set oBookmark = CreateObject("AcroExch.PDBookmark", "")
MenuItemExecute("NewBookmark")
oBookmark.GetByTitle(DeinDokumentenObjekt, "Untitled")
oBookmark.SetTitle("Der neue Titel des Bookmarks")

vielleicht helfen Dir diese Stichworte schon...

Beste Grüße und Viel Erfolg
Marc

alxy
17.07.2014, 10:43
Hi Mark,

das war der Schubser in die richtige Richtung - Vielen Dank dafür!!
Es bleibt nur eine kleinere Sache zu fragen: Das letzte Bookmark bleibt im bearbeitungsmodus wenn man das Skript ausführt. Man muss dann zwar nur noch einmal enter drücken (Ich bearbeite damit aktive/geöffnete PDF-Dateien, falls das unklar ist....), aber wäre besser, wenn das auch weg wäre :P