Javascript 从VBA向文档添加自定义pdf戳记

Javascript 从VBA向文档添加自定义pdf戳记,javascript,vba,pdf,acrobat,acrobat-sdk,Javascript,Vba,Pdf,Acrobat,Acrobat Sdk,我遇到了一个问题-我需要在许多.pdf文件中添加自定义戳记(注释类型)。我可以通过Acrobat X Pro的操作来完成,但我的客户没有该许可证,他们仍然需要这样做。文件列表存储在Excel电子表格中,因此理想情况下我正在寻找VBA解决方案。我想出了以下代码: Option Explicit Sub code1() Dim app As Acrobat.AcroApp Dim pdDoc As Acrobat.CAcroPDDoc Dim page As Acrobat.CAcroPDPage

我遇到了一个问题-我需要在许多.pdf文件中添加自定义戳记(注释类型)。我可以通过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"})
如果有一种方法可以在PDDoc对象内部的VBA中执行此Javascript,这将解决问题,但到目前为止我失败了。

props.Type = "Stamp"
类型应为小写。但是,如果纯JavaScript从控制台工作,您可以考虑仅使用JSO执行字符串。p> 在

props.Type = "Stamp"
类型应为小写。但是,如果纯JavaScript从控制台工作,您可以考虑仅使用JSO执行字符串。p> 您可以使用AFormAPI中的“ExecuteThisJavaScript”。简短示例:

设置AForm=CreateObject(“aformout.App”)

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

它的优点是不需要将js示例转换为jso代码。如果搜索ExecuteThisJavaScript,您将获得更多、更长的示例

祝您好运,reinhard

您可以使用AFormAPI中的“ExecuteThisJavaScript”。简短示例:

设置AForm=CreateObject(“aformout.App”)

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

它的优点是不需要将js示例转换为jso代码。如果搜索ExecuteThisJavaScript,您将获得更多、更长的示例


祝你好运,莱因哈德你好,我也不知道怎么做。但是,如何使用VBA插入一个文本框,其中包含您的戳记/符号作为内容。将文件打印/导出为PDF格式,然后隐藏/清除文本框?嗨,我也不知道怎么做。但是,如何使用VBA插入一个文本框,其中包含您的戳记/符号作为内容。将文件打印/导出为PDF格式,然后隐藏/清除文本框?我似乎不明白如何将纯java插入vba代码并让java运行。到目前为止,我得到的最好的方法是实际打开.pdf并显示javascript调试器,其中包含所需的代码,但我必须手动按ctrl-enter键,这不是一个解决方案。我似乎无法理解如何将纯java插入vba代码并使java运行。到目前为止,我得到的最好的方法是实际打开.pdf并显示包含所需代码的javascript调试器,但我必须手动按ctrl-enter键,这不是一个解决方案。这是一个很好的解决方案!它似乎要求AVDoc对象正常工作,这比PDDoc操作要慢得多,但它可以工作!您知道有没有一种方法可以从PDDoc对象执行Javascript?另外,为什么是reinhard?“…你知道有没有从PDDoc对象执行Javascript的方法吗?”。我不知道,你可以用.GetPDDOC测试它,或者用JS代码直接打开文档。为了更快地工作,您可以在隐藏模式下操作。莱因哈德是我的名字。如果我在谷歌上搜索:“ExecuteThisJavaScript+Reinhard”,我得到的所有示例都独立于我发布的论坛(Adobe、VBS、auotIT等等),这是一个很好的解决方案!它似乎要求AVDoc对象正常工作,这比PDDoc操作要慢得多,但它可以工作!您知道有没有一种方法可以从PDDoc对象执行Javascript?另外,为什么是reinhard?“…你知道有没有从PDDoc对象执行Javascript的方法吗?”。我不知道,你可以用.GetPDDOC测试它,或者用JS代码直接打开文档。为了更快地工作,您可以在隐藏模式下操作。莱因哈德是我的名字。如果我在谷歌上搜索:“ExecuteThisJavaScript+Reinhard”,我得到的所有示例都独立于我发布的论坛(Adobe、VBS、auotIT等等)