2016-10-17 11 views
0

Ich habe ein Problem festgestellt - ich muss eine Anzahl von PDF-Dateien mit einem benutzerdefinierten Stempel (Annotationstypen) versehen. Ich kann dies über Aktionen für Acrobat X Pro tun, aber meine Kunden haben diese Lizenz nicht und müssen sie trotzdem tun. Die Liste der Dateien wird in einer Excel-Tabelle gespeichert, daher suche ich idealerweise nach einer VBA-Lösung. Ich habe kam mit dem folgenden Code auf:Hinzufügen eines benutzerdefinierten PDF-Stempels zum Dokument von VBA

Option Explicit 
Sub code1() 
Dim app As Acrobat.AcroApp 
Dim pdDoc As Acrobat.CAcroPDDoc 
Dim page As Acrobat.CAcroPDPage 
Dim recter(3) As Integer 'Array defining the rectangle of the stamp - in real code wil be calculated, simplified for ease of reading 

Dim jso As Object 
Dim annot As Object 
Dim props As Object 
Set pdDoc = Nothing 
Set app = CreateObject("AcroExch.App") 
Set pdDoc = CreateObject("AcroExch.PDDoc") 

recter(0) = 100 
recter(1) = 100 
recter(2) = 350 
recter(3) = 350 

pdDoc.Open ("C:\Users\maxim_s\Desktop\Code_1\test1.pdf") 

Set jso = pdDoc.GetJSObject 

If Not jso Is Nothing Then 

Set page = pdDoc.AcquirePage(0) 

Set annot = jso.AddAnnot 

Set props = annot.getprops 
    props.page = 0 
    props.Type = "Stamp" 
    props.AP = "#eIXuM60ZXCv0sI-vxFqvlD" 'this line throws an error. The string is correct name of the stamp I want to add 
    props.rect = recter 
annot.setProps props 

If pdDoc.Save(PDSaveFull, "C:\Users\maxim_s\Desktop\Code_1\test123.pdf") = False Then 
    MsgBox "fail" 
    pdDoc.Close 
Else 
    MsgBox "success" 
    pdDoc.Close 
End If 
End If 
End Sub 

Das Problem ist mit den setprops und getprops Verfahren - es scheint, in dem Moment, wenn Annotation erstellt (jso.AddAnnot) es nicht die AP Eigenschaft nicht besitzen, das das ist Name des Stempels, den ich hinzufügen möchte. Wenn ich zuerst die Eigenschaft Type= "Stamp" einstelle und dann versuche, die AP anzugeben, wird einer der Standardstempel hinzugefügt und es wird AP in meine benutzerdefinierten Stempel 'AP umbenannt. Beachten Sie auch, dass, wenn ich Akrobat und verwenden Sie den Code unten zu starten, wird die richtige Stempel hinzugefügt:

this.addAnnot({page:0,type:"Stamp",rect:[100,100,350,350],AP:"#eIXuM60ZXCv0sI-vxFqvlD"}) 

Wenn es einen Weg gibt, dieses Javascript von VBA innerhalb des PDDoc Objekt auszuführen, das das Problem löst, aber bis jetzt habe ich versagt.

+1

Hallo, ich weiß nicht, wie das auch geht. Aber wie wäre es mit VBA, um eine Textbox mit Ihrem Stempel/Notation als Inhalt einzufügen. Drucken/exportieren Sie die Dateien als PDF und verstecken/löschen Sie die Textbox danach? – Doug

Antwort

1

Sie können "ExecuteThisJavaScript" von der AForm API verwenden. Kurzes Beispiel:

Set AForm = Create ("AFormAut.App")

AForm.Fields.ExecuteThisJavaScript "var x = this.numPages; app.alert (x);"

Es hat den Vorteil, dass Sie die js-Beispiele nicht in jso-Code übersetzen müssen. Wenn Sie nach ExecuteThisJavaScript suchen, erhalten Sie einige längere Beispiele.

Viel Glück, Reinhard

+0

Das ist eine großartige Lösung! Es scheint AVDoc-Objekt zu benötigen, um ordnungsgemäß zu funktionieren, was wesentlich langsamer als PDDoc-Vorgang ist, aber es funktioniert! Weißt du, ob es eine Möglichkeit gibt, Javascript von einem PDDoc-Objekt auszuführen? P.S. Warum Reinhard? –

+0

"..Wissen Sie, ob es eine Möglichkeit gibt, Javascript von einem PDDoc-Objekt auszuführen? ..". Ich weiß es nicht, du kannst es vielleicht mit .GetPDDOC testen oder den Doc direkt mit dem JS-Code öffnen. Um schneller zu arbeiten, können Sie im versteckten Modus arbeiten. Reinhard ist mein Vorname. Wenn ich in google nach "ExecuteThisJavaScript + Reinhard" suche, bekomme ich alle meine Beispiele unabhängig von dem Forum, in dem ich veröffentlicht habe (Adobe, VBS, auotIT, ..) – ReFran

0

In ...

props.Type = "Stamp" 

Der Typ sollte niedriger Fall sein. Wenn das reine JavaScript jedoch von der Konsole aus funktioniert, können Sie die Zeichenfolge nur mit dem Befehl jso ausführen.

+0

Ich kann nicht scheinen zu verstehen, wie man das reine Java in den VBA-Code einfügt und java zum Laufen bringt. Das Beste, was ich bis jetzt bekommen habe, ist, das .pdf zu öffnen und den Javascript-Debugger mit dem benötigten Code anzuzeigen, aber ich muss ctrl-enter manuell drücken, was keine Lösung ist. –

Verwandte Themen