0

問題が発生しました。多数の .pdf ファイルにカスタム スタンプ (注釈の種類) を追加する必要があります。Actions for 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

問題はプロシージャsetpropsgetpropsプロシージャにあります。注釈が作成された時点( )では、追加したいスタンプの名前であるプロパティをjso.AddAnnot所有していないようです。AP最初にプロパティを設定してType= "Stamp"から を指定しようとするとAP、デフォルトのスタンプの 1 つが追加され、そのAP名前がカスタム スタンプの に変更されAPます。また、acrobat を起動して以下のコードを使用すると、適切なスタンプが追加されることに注意してください。

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

PDDoc オブジェクト内の VBA からこの Javascript を実行する方法があれば、問題は解決しますが、これまでのところ失敗しています。

4

2 に答える 2

2

AForm API から「ExecuteThisJavaScript」を使用できます。短い例:

Set AForm = CreateObject("AFormAut.App")

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

js の例を jso コードに変換する必要がないという利点があります。ExecuteThisJavaScript を検索すると、さらに長い例が表示されます。

がんばれ、ラインハルト

于 2016-10-18T20:06:25.257 に答える
0

の...

props.Type = "Stamp"

タイプは小文字にする必要があります。ただし、純粋な JavaScript がコンソールから機能している場合は、jso を使用して文字列を実行することを検討してください。

于 2016-10-18T15:45:13.250 に答える