2016-10-17 907 views
0

問題が発生しました - カスタムスタンプ(注釈の種類)をいくつかの.pdfファイルに追加する必要があります。私はAcrobat X Proのアクションを通じてそれを行うことができますが、私のクライアントはそのライセンスを持っておらず、依然としてそれを行う必要があります。ファイルのリストはExcelスプレッドシートに格納されているので、理想的には私はVBAソリューションを探しています。私は、次のコードを思い付いていますVBAからドキュメントにカスタムPDFスタンプを追加する

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を実行する方法、がある場合は、しかし、これまで私は失敗しました。

+1

こんにちは、私はそれをやる方法も分かりません。しかし、どのようにVBAを使用して、あなたのスタンプ/表記をテキストボックスに挿入してください。ファイルをPDFとして印刷/エクスポートし、後でテキストボックスを非表示にする/クリアしますか? – Doug

答えて

1

AForm Apiの "ExecuteThisJavaScript"を使用できます。短い例:

セットAForm =のCreateObject( "AFormAut.App")

AForm.Fields.ExecuteThisJavaScript "VAR X = this.numPages; app.alert(X);"

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

幸運にも手伝ってください

+0

これは素晴らしい解決策です! AVDocオブジェクトが正常に動作することが必要なようですが、これはPDDoc操作よりもかなり遅いですが、動作します! PDDocオブジェクトからJavascriptを実行する方法があるかどうか知っていますか? P.S.なぜ元気づけ? –

+0

".. PDDocオブジェクトからJavascriptを実行する方法があるかどうか知っていますか?"あなたはおそらく.GetPDDOCを使ってそれをテストするか、JSコードを直接開いてください。より速く作業するために、隠しモードで操作することができます。ラインハルトは私の名字です。私がGoogleで検索した場合: "ExecuteThisJavaScript + Reinhard"私が公開したフォーラム(Adobe、VBS、auotIT、..) – ReFran

0

において...

props.Type = "Stamp" 

タイプは小文字でなければなりません。しかし、純粋なJavaScriptがコンソールから動作している場合は、jsoを使用して文字列を実行するだけで構いません。

+0

純粋なJavaをVBAコードに挿入してJavaを実行する方法を理解できないようです。私がこれまでに得たベストは、実際に.pdfを開き、javascriptデバッガに必要なコードを表示することですが、手動でctrl-enterを押す必要があります。これは解決策ではありません。 –

関連する問題