Javascript 从VBA向文档添加自定义pdf戳记
我遇到了一个问题-我需要在许多.pdf文件中添加自定义戳记(注释类型)。我可以通过Acrobat X Pro的操作来完成,但我的客户没有该许可证,他们仍然需要这样做。文件列表存储在Excel电子表格中,因此理想情况下我正在寻找VBA解决方案。我想出了以下代码: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
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等等)