7

MS-Access2003.mdbプロジェクトからPDFフォームに記入したい。PDFはAdobeLifeCycleDesigner ES 8.2で作成されており、すべてのフィールドに重要な名前が付いています。ただし、PDfを埋める機能を実行するユーザーは、LifeCycleをインストールせず、代わりにAdobe Reader 9.5のみをインストールします(Adobe Reader Xにすぐに移行する可能性があります。私のコードは、少し将来にわたって利用できるようにしたいと思います)。

どうすればこれを実装できますか?Webで見たほとんどのスレッドは、公式のAdobe SDKドキュメントにリダイレクトされます。これは、VBAのみを実行している場合は完全に混乱します。

ありがとうございました。

4

1 に答える 1

8

いくつかのコード行をマージした後、ようやく何かが機能するようになりました。ここにあります。これは、VBAプロジェクトで参照として設定されているAdobeAcrobat9.0タイプライブラリで動作します。

Dim FileNm, gApp, avDoc, pdDoc, jso

FileNm = "c:\form.pdf" 'File location
Set gApp = CreateObject("AcroExch.app")

Set avDoc = CreateObject("AcroExch.AVDoc")
If avDoc.Open(FileNm, "") Then
    Set pdDoc = avDoc.GetPDDoc()
    Set jso = pdDoc.GetJSObject

    jso.getField("topmostSubform[0].Page1[0].fieldName[0]").value = "myValue"
    pdDoc.Save PDSaveIncremental, FileNm 'Save changes to the PDF document
    pdDoc.Close
End If

'Close the PDF; the True parameter prevents the Save As dialog from showing
avDoc.Close (True) 

'Some cleaning
Set gApp = Nothing
Set avDoc = Nothing
Set pdDoc = Nothing
Set jso = Nothing

topmostSubform[0].Page1[0]これは、Adobe LiveCycle DesignerがメインのPDFドキュメントに付けるデフォルトの名前であり、はフィールドの名前であることに注意してfieldName[0]ください。同じ名前のフィールドが複数ある場合、Adobe LiveCycle Designerは自動的にインデックス番号を追加するため、フィールドを簡単にループできます。

于 2012-11-13T15:10:29.477 に答える