Добавление пользовательского штампа PDF в документ из VBA

Я столкнулся с проблемой - мне нужно добавить пользовательский штамп (тип аннотации) для ряда файлов.pdf. Я могу сделать это с помощью Actions для Acrobat X Pro, но мои клиенты не имеют этой лицензии, и им все еще нужно это делать. Список файлов хранится в электронной таблице Excel, поэтому в идеале я ищу решение 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

Проблема с setprops а также getprops процедуры - кажется, что в момент создания аннотации (jso.AddAnnot) не обладает AP свойство, которое является названием марки, которую я хочу добавить. Если я установлю свойство Type= "Stamp" а затем попробуйте указать APВ результате добавляется одна из штампов по умолчанию, и AP переименован в мои пользовательские марки AP, Также обратите внимание, что если я запускаю acrobat и использую приведенный ниже код, добавляется правильный штамп:

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

Если есть способ выполнить этот Javascript из VBA внутри объекта PDDoc, это решит проблему, но пока что мне это не удалось.

2 ответа

Решение

Вы можете использовать "ExecuteThisJavaScript" из API-интерфейса AForm. Краткий пример:

Set AForm = CreateObject ("AFormAut.App")

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

Преимущество в том, что вам не нужно переводить js-примеры в jso-код. Если вы ищете ExecuteThisJavaScript, вы получите еще больше и больше примеров.

Удачи, Рейнхард

В...

props.Type = "Stamp"

Тип должен быть в нижнем регистре. Но если чистый JavaScript работает из консоли, вы можете просто выполнить строку, используя jso.

Другие вопросы по тегам