AFormAut オブジェクト 一覧

TOP > *


IMG_3633

概要

AFormAut オブジェクトとはPDF上のフォーム作成を支援するOLEオートメーションです。他のAcrobat OLE(IAC)と共に利用することが前提です。

Acrobat JavaScriptをPDFに対して追加や実行出来る機能も大きな特徴です。これによりAcrobat OLEに無い多数の機能をAcrobat JavaScriptを使って実行できます。但し、実行時に特有のエラーが出る場合も有るので注意が必要です。

ポイント

  1. PDF上に以下のフォームフィールド(フィールド)を作成します。
    • ボタン
    • テキストボックス
    • チェックボックス
    • リストボックス
    • コンボボックス
    • ラジオボタン
    • 電子著名   
  2. 他のOLE オブジェクト(IAC)と自動で連携します。 しかしSDKには連携の記載が見当たりません。コッチの「オブジェクトの連携図 [ OLE objects and methods ] 」には勝手に追加しました。  

AFormAut オブジェクトのメソッドとプロパティ

事前に専用の 参照設定(AFormAutの追加版) が必要です。

Dim objAFormApp As AFORMAUTLib.AFormApp Dim objAFormFields As AFORMAUTLib.Fields Dim objAFormField As AFORMAUTLib.Field Set objAFormApp = CreateObject("AFormAut.App")

又は

Dim objAFormApp As New AFORMAUTLib.AFormApp Dim objAFormFields As AFORMAUTLib.Fields Dim objAFormField As AFORMAUTLib.Field

 

*AD : Adobe社のSDK解説サイト(AFormAut:英語)へのリンクです。

1) AFormApp  *AD

  1. AVDoc オブジェクトを使ってPDFを事前にオープンしておく必要が有ります。他のOLEと違ってVBAのSet命令で連携する必要は無く、現在OLEでオープン中のPDFに対して動作します。
  2. トップの AFormApp オブジェクトの宣言はNewでもCreateObjectでもOKです。※既に上部で紹介済み
  3. 他の2つのAForm関連のオブジェクトのFieldsとField オブジェクトは他のOLEと同様にVBAのSet命令で連携する必要が有ります。

2) Fields  *AD

オープン済みPDF上のフィールド(ボタン、テキストボックス等)に対してのメソッドとプロパティです。

  • Fields オブジェクトのメソッド
    1. Add : フィールドの追加
    2. Remove : フィールドの削除  
    3. AddDocJavascript : PDF レベルのJavaScript 追加 
    4. ExecuteThisJavascript : JavaScript の実行
    5. ExportAsFDF : FDF 形式での書き出し
    6. ExportAsHtml : HTML 形式での書き出し
    7. ImportAnFDF : FDFファイルの取り込み
  • Fields オブジェクトのプロパティ
    1. Count : Fields コレクション内のField オブジェクトの数を取得
    2. Item *AD: フィールド名を指定してField オブジェクトを作成する  

3) Field  *AD

オープン済みPDF上のフィールド(ボタン、テキストボックス等)に対しての設定と値の取得です。

  • Field オブジェクトのメソッド
    1. PopulateListOrComboBox *AD: ListBox , ComboBox の項目、出力値の設定
    2. SetBackgroundColor *AD: 背景色の設定
    3. SetBorderColor *AD: 境界線の色を設定
    4. SetButtonCaption *AD: ボタン表示の設定
    5. SetButtonIcon *AD: ボタンアイコンの設定
    6. SetExportValues *AD: 出力値の設定
    7. SetForegroundColor *AD: 前景色(文字色)の設定
    8. SetJavaScriptAction *AD: JavaScript 動作の設定
    9. SetResetFormAction *AD: ResetForm 動作の設定
    10. SetSubmitFormAction *AD: Sumbit 動作の設定   
  • Field オブジェクトのプロパティ
    1. Alignment : テキストフィールドのテキストの配置の取得と設定
    2. BorderStyle : テキストフィールドの境界線のスタイルの取得と設定
    3. BorderWidth : フィールドの境界線の太さの取得とと設定
    4. ButtonLayout *AD: ボタンのレイアウトの外観の取得と設定
    5. CalcOrderIndex *AD: フィールドの計算順序の取得と設定
    6. CharLimit *AD: テキストフィールドに入力できる文字数の取得と設定
    7. DefaultValue *AD: デフォルトの値の取得と設定
    8. Editable *AD: コンボボックス等から選択の可否の取得と設定
    9. Highlight *AD: クリック時の表示方法の取得と設定
    10. IsHidden *AD: フィールドの表示/非表示の取得と設定
    11. IsMultiline *AD: テキストフィールドのマルチライン表示の取得と設定。注意)テストで機能の確認ができませんでした。その解決策がココにあります。
    12. IsPassword *AD: パスワード表示(文字の*表示)の取得と設定
    13. IsReadOnly *AD: フィールドの読み取り専用の取得と設定
    14. IsRequired *AD: フィールドの必須入力かの取得と設定
    15. IsTerminal *AD: フィールドがターミナルかの値の取得
    16. Name *AD: フィールドの名前(=完全修飾名)の取得
    17. NoViewFlag *AD: 印刷可否 ?? の取得と設定
    18. PrintFlag *AD: 印刷時に印刷されるかの取得と設定
    19. Style *AD: チェックボックスやラジオボタンのスタイルの取得と設定
    20. TextFont : テキストのフォントの取得と設定 
    21. TextSize *AD: テキストのフォントサイズの取得と設定
    22. Type *AD: フィールドのタイプの取得
    23. Value *AD: フィールドの値の取得と設定

*AD : Adobe社のSDK解説サイト(英語)へのリンク。(2019/07/17:かなりのリンクが消滅しています)


 

動作確認の結果

必ず自分の環境下で再確認してください。

Acrobat結果備考
4
Acrobat 4.0 + Excel 2000 + Windows 98SE
5
Acrobat 5.0.5 + Excel 2003 + Windows XP
6
Acrobat 6.0.6 Pro + Excel 2003 + Windows XP
7
OK
Acrobat 7.1.4 Pro + Excel 2003 + Windows XP *1
8
NO
Acrobat 8.3.1 Pro + Excel 2003 + Windows XP
9
NO
Acrobat 9.5.5 Extended + Excel 2003 + Windows XP
10
OK
Acrobat X (10.1.8) Extended + Excel 2003 + Windows XP
11
OK
Acrobat XI (11.0.5) Extended + Excel 2003 + Windows XP
Acrobat XI Pro + Excel 2021 + Windows 11 Pro 64bit
  • △: 上位の PDFのバージョン は処理できない。
    詳細は当サイトページ下部の「テスト結果の詳細」を参照。
  • OK : 正常処理します。
  • NO : 正常に処理できない。 又は実行時にエラーとなる。
  • *1 : レジストリに「"idocNewerVersionWarning"=dword:00000001 」を事前に追加する必要があります。
    そして、以下の警告ダイアログボックスを表示しないようにする必要があります。
    Adobe Acrobat 「このファイルは、このバージョンの Acrobat ではサポートされていない新しい形式を使用している可能性があります。正しく開いたり表示できない場合があります。最新バージョンの Acrobat 製品にアップグレードすることをお勧めします。Acrobat 製品のサイト (http://www.adobe.co.jp/acrobat) を参照してください。 以後、このメッセージを表示しない
    Acrobat 7 より上位バージョンPDFの警告メッセージ

備考

  1. AFORMAUTlib タイムスタンプライブラリの内容」参照。
  2. Acrobat JavaScript の詳細な解説書/リファレンス 日本語 URL (765頁)
    JavaScript for Acrobat API Reference
    Adobe Acrobat SDK バージョン 8.0
     
    ※上記の解説文書のバージョンは古いが十分に使えます。
  3. AcroFrom プラグイン(AcroForm.api 又は Aform32.api)に実装されたActiveX オートメーション。
  4. NoViewFlag , PrintFlag の違いがイマイチ判らない・・・。

その他のVBAサンプル

  1. PDFにページ番号を追加する方法
  2. PDFをWEBブラウザでしか表示出来ない様にする方法(this.path 使用)
  3. PDFをWEBブラウザでしか表示出来ない様にする方法(this.URL 使用) ※運用上の注意点有り

注意

  1. AFormAut オブジェクト操作時にあるタイミングで実行エラーが発生します。以下を参考に対策用のロジックの追加が必要です。
  2. AFormAut オブジェクトを使ってPDF へ処理を行うにはパソコン環境にインストールされている Acrobat アプリケーションのバージョンに制限があります。
    • Acrobat 4 ~ Acrobat 6 : 操作が一部で不可
    • Acrobat 7 : 操作可
    • Acrobat 8 ~ Acrobat 9 : 操作不可
    • Acrobat X (10) ~ Acrobat XI (11) : 操作可
  3. PDF のバージョン により処理が出来ない場合があります。
    ※これはテスト結果です。SDK 及びメーカー技術サイト で確認した内容ではありません。
    PDFのプロパティ画面PDFのバージョン  :  1.6 (Acrobat 7.x 互換)

  4. Acrobat アプリケーションをメモリ上に確実にロードする
    objAcroApp.CloseAllDocs
    を実行しておかないと、以下のVBAステートメント(命令)を実行する時に、実行エラー(ランタイムエラー)が発生します。
    Set objAFormApp = CreateObject("AFormAut.App")
    429 ActiveXコンポーネントはオブジェクトを作成できません。
    429 ActiveXコンポーネントはオブジェクトを作成できません。
     

  5. 「Set objAFormFields = objAFormApp.Fields」を実行するには
    「objAcroAVDoc.Open」で該当するPDFファイルをオープンしておく必要があります。「objAcroPDDoc.Open」ではダメです。

TOPへ



これ以降はサイト管理者が当サイト又は当ページを維持&管理するためのメモです。見る必要も無く公開用にも書いてません。

テスト結果の詳細

  1. OK : 正常処理
  2. NO : 処理できない。又は実行エラーになります。
  3. E1 :
    Set objAFormApp = CreateObject("AFormAut.App")
    実行時にランタイムエラー で続行不可
    「429 ActiveX コンポーネントはオブジェクトを作成できません。」
    429 ActiveXコンポーネントはオブジェクトを作成できません。

  4. E2 :
    Set objAFormFields = objAFormApp.Fields
    実行時にランタイムエラー で続行不可
    「-2147220991 現在Acrobatで文書が開いていません。」
    -2147220991 現在Acrobatで文書が開いていません。

  5. E3 :
    Acrobat アプリケーション 本体が起動され
    「このファイルは、このバージョンのAcrobatではサポートされてない・・・」
    ダイアログボックスが表示される。
    OKボタンをクリックした後のAcrobat本体をすぐに終了すれば、正常終了。Acrobat本体をしばらくそのままにしておくと、OLEエラーになり、次に実行エラー(-2147220991 Runtime rror)となる。
  6. E4 :
    「別のプログラムでOLEの操作が完了するまで待機を続けます。」
    ダイアログボックスが表示される。
    別のプログラムでOLEの操作が完了するまで待機を続けます。

  7. E5 : 警告メッセージがPDFファイルのオープン時に表示される。
    なお、このメッセージはAcrobatバージョンにより、多少異なる。
    Adobe Acrobat このファイルには、この Viewer でサポート可能なものより新しい情報が含まれている可能性があります。正しく開いたり表示できない可能性があります。Adobe では、Acrobat 製品の最新バージョンにアップグレードするようおすすめします。http://www.adobe.co.jp/acrobat 以後、このメッセージを表示しない
    サポート対象外PDFへの警告メッセージ

  8. E6 :
    「この文書を開くときにエラーが発生しました。ファイルが壊れています。修復できませんでした。」
    で処理続行不可。

Acrobat 4

  1. テスト環境:Acrobat 4.0 + Excel 2000 + Win98
  2. PDFのバージョンが 1.7  以上は処理できない。
PDF のバージョン結果備考
1.2OK
1.3OK
1.4OK
1.5OK
1.6OK
1.7NO処理できない。 E6
1.7,Adobe Extension Level 3NO処理できない。 E6
1.7,Adobe Extension Level 8NO処理できない。 E6

Acrobat 5

  1. テスト環境:Acrobat 5.0.5 + Excel 2003 + Windows XP
  2. PDFのバージョンが 1.6 以上は処理できない。
  3. PDFの上位バージョンに対する警告メッセージを再表示させないレジストリ設定は無い。
PDFのバージョン結果備考
1.2OK
1.3OK
1.4OK
1.5OK
1.6NO処理できない。 E5
処理できる場合も有り。
1.7NO 処理できない。 E6
1.7,Adobe Extension Level 3NO 処理できない。 E6
1.7,Adobe Extension Level 8NO処理できない。 E6

Acrobat 6

  1. テスト環境:Acrobat 6.0.6 + Excel 2003 + Windows XP
  2. PDFのバージョンが 1.6 以上は処理できない。
  3. PDFの上位バージョンに対する警告メッセージを再表示させないレジストリ設定は無い。
PDF のバージョン結果備考
1.2OK
1.3OK
1.4OK
1.5OK
1.6NO処理できない。 E5
処理できる場合も有り。
1.7NO処理できない。 E5
処理できる場合も有り。
1.7,Adobe Extension Level 3NO処理できない。 E5
1.7,Adobe Extension Level 8NO処理できない。 E5

Acrobat 7

  1. テスト環境:Acrobat 7.1.4 + Excel 2003 + Windows XP
  2. PDFのバージョンが 1.7 以上はレジストリ操作が必要。
  3. PDFの上位バージョンに対する警告メッセージを再表示させないレジストリ設定は出来る。
    [HKEY_CURRENT_USER¥Software¥Adobe¥Adobe Acrobat¥7.0¥AVAlert]
    [HKEY_CURRENT_USER¥Software¥Adobe¥Adobe Acrobat¥7.0¥AVAlert¥cCheckbox]
    "idocNewerVersionWarning"=dword:00000001
PDF のバージョン結果備考
1.2OK
1.3OK
1.4OK
1.5OK
1.6OK
1.7OKE4 , E5
レジストリ操作で処理可能
1.7,Adobe Extension Level 3OKE5
レジストリ操作で処理可能
1.7,Adobe Extension Level 8OKE5
レジストリ操作で処理可能

Acrobat 8

  1. テスト環境:Acrobat 8.3.1 Pro + Excel 2003 + Windows XP
  2. PDFのバージョン で処理できない。
  3. PDFの上位バージョンに対する警告メッセージを再表示させないレジストリ設定をしても処理できない。
PDF のバージョン 結果備考
1.2NOE2
1.3NOE2
1.4NOE2
1.5NOE2
1.6NOE2
1.7NOE2
1.7,Adobe Extension Level 3NOE3
1.7,Adobe Extension Level 8NOE3

Acrobat 9

  1. テスト環境:Acrobat 9.5.2 Extended + Excel 2003 + Windows XP
  2. PDFのバージョン で処理できない。
  3. PDFの上位バージョンに対する警告メッセージを再表示させないレジストリ設定をしても処理できない。
PDF のバージョン結果備考
1.2NOE1
1.3NOE1
1.4NOE2
1.5NOE1
1.6NOE2
1.7NOE2
1.7,Adobe Extension Level 3NOE2
1.7,Adobe Extension Level 8NOE3

Acrobat X (10)

  1. テスト環境:Acrobat X (10.1.4) Extended + Excel 2003 + Windows XP
  2. PDFの上位バージョンに対する警告メッセージを再表示させないレジストリ設定は出来る。[HKEY_CURRENT_USER¥Software¥Adobe¥Adobe Acrobat¥10.0¥AVAlert]
    [HKEY_CURRENT_USER¥Software¥Adobe¥Adobe Acrobat¥10.0¥AVAlert¥cCheckbox]
    "idocNewerVersionWarning"=dword:00000001
PDF のバージョン結果備考
1.2OK
1.3OK
1.4OK
1.5OK
1.6OK
1.7OK
1.7,Adobe Extension Level 3OK
1.7,Adobe Extension Level 8OK

Acrobat XI (11)

  1. テスト環境:Acrobat XI (11.0) Extended + Excel 2003 + Windows XP
  2. PDFの上位バージョンに対する警告メッセージを再表示させないレジストリ設定は出来る。[HKEY_CURRENT_USER¥Software¥Adobe¥Adobe Acrobat¥11.0¥AVAlert]
    [HKEY_CURRENT_USER¥Software¥Adobe¥Adobe Acrobat¥11.0¥AVAlert¥cCheckbox]
    "idocNewerVersionWarning"=dword:00000001
PDF のバージョン結果備考
1.2OK
1.3OK
1.4OK
1.5OK
1.6OK
1.7OK
1.7,Adobe Extension Level 3OK
1.7,Adobe Extension Level 8OK

公開されているPDFのSDK

消えたと思った公式PDF解説がURLが変更されて有りました。AFormAut以外の全てのOLEも解説しています。英語版です。Webの方と内容は同じでしょう。WEB版の移行が進む内にじきに削除されるでしょう。古いバージョン内容ですがOLEに関しては何も機能アップしてないので問題ないです。

Interapplication Communication API Reference」
Adobe® Acrobat® SDK November 2006 Version 8.0

消えたメソッド

AFormAup オブジェクトのメソッドにRunDistributeFormWizardと言うのが過去?に有った。今のWeb版SDKからは消えている。「フォーム配布ウィザードをプログラムから呼び出すためのメソッド」とネット上の情報には有るが、実際は手動で動作させるためのものらしく、今はアクションウイザードに替わったみたいで消えているみたいです。(知らんけど。

FieldsとFieldの違いが不明

機能を見れば違いは一目瞭然だが、違いの説明がうまく出来ない。AFormAppの下のメンバーにメソッドもプロパティも全て入れた方がスッキリすると思う。その方が説明も楽。

TOPへ

「AFormAut オブジェクト 一覧」への4件のフィードバック

  1. ゴクリン さんへ。

    >こちらの情報を参考にvbaで文字を90°回転させたテキストボックスを追加したいと思ったのですが、文字を回転させるにはどうしたらよいのでしょうか?

    残念ですが、Acrobat OLEには回転角度を指定する機能がありません。そこでその機能が有る Acrobat JavaScript をVBAから実行します。

    以下のサンプルを御覧ください。

    001 Option Explicit
    002
    003 Sub AFormApp_Field_Add_Rotation()
    004
    005 Dim sFilePath As String
    006 Dim bRet As Boolean
    007 Dim sFilePath_new As String
    008
    009 Dim objAFormApp As AFORMAUTLib.AFormApp
    010 Dim objAFormFields As AFORMAUTLib.Fields
    011 Dim objAFormField As AFORMAUTLib.Field
    012
    013 '初期値
    014 sFilePath = ThisWorkbook.Path & "\sample.pdf"
    015
    016 If Dir$(sFilePath, vbNormal) = "" Then
    017 MsgBox sFilePath & vbCrLf & _
    018 "ファイルが存在しない。", _
    019 vbOKOnly + vbCritical, "実行時のエラー"
    020 Exit Sub
    021 End If
    022
    023 'Acrobat 7,8,9,10,11 の時
    024 Dim objAcroApp As New Acrobat.AcroApp
    025 Dim objAcroAVDoc As New Acrobat.AcroAVDoc
    026 Dim objAcroPDDoc As New Acrobat.AcroPDDoc
    027 Dim objAcroPDPage As Acrobat.AcroPDPage
    028
    029 '※CreateObject("AFormAut.App")のエラー
    030 '※[429 ActiveXコンポーネントはオブジェクトを作成できません。]
    031 '※回避用 / メモリにAcrobatを強制ロードさせる
    032 objAcroApp.CloseAllDocs
    033 objAcroApp.Hide
    034
    035 '処理対象のPDFファイルを開く
    036 If objAcroAVDoc.Open(sFilePath, "") = False Then
    037 MsgBox "AVDocオブジェクトはOpen出来ません", _
    038 vbOKOnly + vbCritical, "処理エラー"
    039 GoTo Skip_AFormApp_Field_Add_Rotation:
    040 End If
    041
    042 Set objAFormApp = CreateObject("AFormAut.App")
    043 Set objAFormFields = objAFormApp.Fields
    044 Set objAcroPDDoc = objAcroAVDoc.GetPDDoc
    045
    046
    047 'PDFの指定ページにテキストフィールドを追加
    048 '※ページ全体を覆うテキストボックス
    049 Set objAFormField = _
    050 objAFormFields.Add("Text-1", "text", _
    051 0, 20, 200, 300, 10)
    052
    053 'テキストフィールドの設定
    054 With objAFormField
    055 .SetBackgroundColor "RGB", 1, 1, 1, 0
    056 .Alignment = "center"
    057 .TextFont = "HeiseiMin-W3-UniJIS-UCS2-H"
    058 .Value = "★表示する文字★" '表示する文字
    059 .IsReadOnly = True '読み込み専用
    060 .IsHidden = False '表示
    061 .TextSize = 26
    062 End With
    063
    064 '▼▼ テキストフィールドの回転 Start ▼▼
    065 Const sAcrobatJavaScript = _
    066 "var f = this.getField('@1');" & _
    067 "f.rotation = @2 ;"
    068 Dim sAJS As String
    069 Dim sReturn As String
    070
    071 'Acrobat JavaScriptの編集
    072 sAJS = sAcrobatJavaScript
    073 sAJS = Replace(sAJS, "@1", "Text-1")
    074 sAJS = Replace(sAJS, "@2", "90")
    075 'Acrobat JavaScript の実行
    076 sReturn = objAFormFields.ExecuteThisJavascript(sAJS)
    077 '▲▲ テキストフィールドの回転 End ▲▲
    078
    079 'PDFファイルを別名で保存
    080 sFilePath_new = Replace(sFilePath, ".pdf", "_new.pdf")
    081 If objAcroPDDoc.Save(1, sFilePath_new) = False Then
    082 MsgBox "PDFファイルへ保存出来ませんでした", _
    083 vbOKOnly + vbCritical, "エラー"
    084 End If
    085
    086 'PDFファイルを閉じる
    087 If objAcroAVDoc.Close(False) = False Then
    088 MsgBox "AVDocオブジェクトはClose出来ませんでした", _
    089 vbOKOnly + vbCritical, "処理エラー"
    090 End If
    091
    092 Skip_AFormApp_Field_Add_Rotation:
    093
    094 On Error Resume Next
    095 '変更しないで閉じます。
    096 bRet = objAcroAVDoc.Close(False)
    097
    098 'Acrobatアプリケーションの終了
    099 objAcroApp.Hide
    100 objAcroApp.Exit
    101
    102 'オブジェクトの開放
    103 Set objAFormField = Nothing
    104 Set objAFormFields = Nothing
    105 Set objAFormApp = Nothing
    106 Set objAcroPDPage = Nothing
    107 Set objAcroPDDoc = Nothing
    108 Set objAcroAVDoc = Nothing
    109 Set objAcroApp = Nothing
    110
    111 MsgBox "終了しました。", _
    112 vbOKOnly + vbInformation, "お知らせ"
    113 End Sub

    ・@1:フィールドの名前「Text-1」
    ・@2:回転角度「90」
    回転角度の指定の詳細はコチラ rotation を御覧ください。

    ご希望の内容でしょうか?

  2. 対応ありがとうございます!
    まさしくやりたかったことそのものです。無事、回転させることができました。
    非常に助かりました。

    ちなみにテキストボックスに複数行のテキストを入力することは可能でしょうか?

    With objAFormField
    .Value = "文字列1" & vbCrLf & "文字列2"
    .IsMultiline = True


    文字列1
    文字列2
    というふうに表示できるかと思ったのですができず...
    立て続けに申し訳ありませんがご教示いただけないでしょうか。

  3. 管理人様

    ↑のコメント誤ってフルネームが入力されてしましました...

    お手数おかけして大変申し訳無いのですが削除をお願いできますでしょうか。

  4. ゴクリンさんへ。

    「ニックネーム」にしました。

    >.IsMultiline = True

    上記はダメですね。テストしましたが、バグっている可能性があるので外して下さい。
    その代わり、Acrobat JavaScriptの部分を

    Const sAcrobatJavaScript = _
    "var f = this.getField('@1');" & _
    "f.rotation = @2 ;" & _
    "f.multiline = true;"

    最後に「f.multiline = true;」を追加します。
    試して下さい。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA



SAMURAI Plugin

コメントをする時は出来れば以下もお願いします。

  • OS名 バージョン
  • Acrobat バージョン
  • ツール(Excel等) バージョン
コメントにサンプルコードを入れる時はコードを全て全角文字列にしてください。コチラで半角に戻します。それでもエラーが回避できない時はコメント下さい。個別に対処します。



お仕事で当サイトを見ている方へ
考え込んだら、ご質問下さい。
一緒に解決策を考えましょう。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください