TOP > *
概要
AFormAut オブジェクトとはPDF上のフォーム作成を支援するOLEオートメーションです。他のAcrobat OLE(IAC)と共に利用することが前提です。
Acrobat JavaScriptをPDFに対して追加や実行出来る機能も大きな特徴です。これによりAcrobat OLEに無い多数の機能をAcrobat JavaScriptを使って実行できます。但し、実行時に特有のエラーが出る場合も有るので注意が必要です。
ポイント
- PDF上に以下のフォームフィールド(フィールド)を作成します。
- ボタン
- テキストボックス
- チェックボックス
- リストボックス
- コンボボックス
- ラジオボタン
- 電子著名
- 他の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
- AVDoc オブジェクトを使ってPDFを事前にオープンしておく必要が有ります。他のOLEと違ってVBAのSet命令で連携する必要は無く、現在OLEでオープン中のPDFに対して動作します。
- トップの AFormApp オブジェクトの宣言はNewでもCreateObjectでもOKです。※既に上部で紹介済み
- 他の2つのAForm関連のオブジェクトのFieldsとField オブジェクトは他のOLEと同様にVBAのSet命令で連携する必要が有ります。
2) Fields *AD
オープン済みPDF上のフィールド(ボタン、テキストボックス等)に対してのメソッドとプロパティです。
- Fields オブジェクトのメソッド
- Add : フィールドの追加
- Remove : フィールドの削除
- AddDocJavascript : PDF レベルのJavaScript 追加
- ExecuteThisJavascript : JavaScript の実行
- ExportAsFDF : FDF 形式での書き出し
- ExportAsHtml : HTML 形式での書き出し
- ImportAnFDF : FDFファイルの取り込み
- Fields オブジェクトのプロパティ
- Count : Fields コレクション内のField オブジェクトの数を取得
- Item *AD: フィールド名を指定してField オブジェクトを作成する
3) Field *AD
オープン済みPDF上のフィールド(ボタン、テキストボックス等)に対しての設定と値の取得です。
- Field オブジェクトのメソッド
- PopulateListOrComboBox *AD: ListBox , ComboBox の項目、出力値の設定
- SetBackgroundColor *AD: 背景色の設定
- SetBorderColor *AD: 境界線の色を設定
- SetButtonCaption *AD: ボタン表示の設定
- SetButtonIcon *AD: ボタンアイコンの設定
- SetExportValues *AD: 出力値の設定
- SetForegroundColor *AD: 前景色(文字色)の設定
- SetJavaScriptAction *AD: JavaScript 動作の設定
- SetResetFormAction *AD: ResetForm 動作の設定
- SetSubmitFormAction *AD: Sumbit 動作の設定
- Field オブジェクトのプロパティ
- Alignment : テキストフィールドのテキストの配置の取得と設定
- BorderStyle : テキストフィールドの境界線のスタイルの取得と設定
- BorderWidth : フィールドの境界線の太さの取得とと設定
- ButtonLayout *AD: ボタンのレイアウトの外観の取得と設定
- CalcOrderIndex *AD: フィールドの計算順序の取得と設定
- CharLimit *AD: テキストフィールドに入力できる文字数の取得と設定
- DefaultValue *AD: デフォルトの値の取得と設定
- Editable *AD: コンボボックス等から選択の可否の取得と設定
- Highlight *AD: クリック時の表示方法の取得と設定
- IsHidden *AD: フィールドの表示/非表示の取得と設定
- IsMultiline *AD: テキストフィールドのマルチライン表示の取得と設定。注意)テストで機能の確認ができませんでした。その解決策がココにあります。
- IsPassword *AD: パスワード表示(文字の*表示)の取得と設定
- IsReadOnly *AD: フィールドの読み取り専用の取得と設定
- IsRequired *AD: フィールドの必須入力かの取得と設定
- IsTerminal *AD: フィールドがターミナルかの値の取得
- Name *AD: フィールドの名前(=完全修飾名)の取得
- NoViewFlag *AD: 印刷可否 ?? の取得と設定
- PrintFlag *AD: 印刷時に印刷されるかの取得と設定
- Style *AD: チェックボックスやラジオボタンのスタイルの取得と設定
- TextFont : テキストのフォントの取得と設定
- TextSize *AD: テキストのフォントサイズの取得と設定
- Type *AD: フィールドのタイプの取得
- 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) を参照してください。 以後、このメッセージを表示しない
備考
- 「AFORMAUTlib タイムスタンプライブラリの内容」参照。
- Acrobat JavaScript の詳細な解説書/リファレンス 日本語 URL (765頁)
JavaScript for Acrobat API Reference
Adobe Acrobat SDK バージョン 8.0
※上記の解説文書のバージョンは古いが十分に使えます。 - AcroFrom プラグイン(AcroForm.api 又は Aform32.api)に実装されたActiveX オートメーション。
- NoViewFlag , PrintFlag の違いがイマイチ判らない・・・。
その他のVBAサンプル
- PDFにページ番号を追加する方法
- PDFをWEBブラウザでしか表示出来ない様にする方法(this.path 使用)
- PDFをWEBブラウザでしか表示出来ない様にする方法(this.URL 使用) ※運用上の注意点有り
注意
- AFormAut オブジェクト操作時にあるタイミングで実行エラーが発生します。以下を参考に対策用のロジックの追加が必要です。
- AFormAut オブジェクトを使ってPDF へ処理を行うにはパソコン環境にインストールされている Acrobat アプリケーションのバージョンに制限があります。
- Acrobat 4 ~ Acrobat 6 : 操作が一部で不可
- Acrobat 7 : 操作可
- Acrobat 8 ~ Acrobat 9 : 操作不可
- Acrobat X (10) ~ Acrobat XI (11) : 操作可
- PDF のバージョン により処理が出来ない場合があります。
※これはテスト結果です。SDK 及びメーカー技術サイト で確認した内容ではありません。

- Acrobat アプリケーションをメモリ上に確実にロードする
objAcroApp.CloseAllDocs
を実行しておかないと、以下のVBAステートメント(命令)を実行する時に、実行エラー(ランタイムエラー)が発生します。
Set objAFormApp = CreateObject("AFormAut.App")
429 ActiveXコンポーネントはオブジェクトを作成できません。
- 「Set objAFormFields = objAFormApp.Fields」を実行するには
「objAcroAVDoc.Open」で該当するPDFファイルをオープンしておく必要があります。「objAcroPDDoc.Open」ではダメです。
< TOPへ >
サイト管理人の技術メモ
これ以降はサイト管理者が当サイト又は当ページを維持&管理するためのメモです。見る必要も無く公開用にも書いてません。
テスト結果の詳細
- OK : 正常処理
- NO : 処理できない。又は実行エラーになります。
- E1 :
Set objAFormApp = CreateObject("AFormAut.App")
実行時にランタイムエラー で続行不可
「429 ActiveX コンポーネントはオブジェクトを作成できません。」
- E2 :
Set objAFormFields = objAFormApp.Fields
実行時にランタイムエラー で続行不可
「-2147220991 現在Acrobatで文書が開いていません。」
- E3 :
Acrobat アプリケーション 本体が起動され
「このファイルは、このバージョンのAcrobatではサポートされてない・・・」
ダイアログボックスが表示される。
OKボタンをクリックした後のAcrobat本体をすぐに終了すれば、正常終了。Acrobat本体をしばらくそのままにしておくと、OLEエラーになり、次に実行エラー(-2147220991 Runtime rror)となる。 - E4 :
「別のプログラムでOLEの操作が完了するまで待機を続けます。」
ダイアログボックスが表示される。
- E5 : 警告メッセージがPDFファイルのオープン時に表示される。
なお、このメッセージはAcrobatバージョンにより、多少異なる。
Adobe Acrobat このファイルには、この Viewer でサポート可能なものより新しい情報が含まれている可能性があります。正しく開いたり表示できない可能性があります。Adobe では、Acrobat 製品の最新バージョンにアップグレードするようおすすめします。http://www.adobe.co.jp/acrobat 以後、このメッセージを表示しない
- E6 :
「この文書を開くときにエラーが発生しました。ファイルが壊れています。修復できませんでした。」
で処理続行不可。
Acrobat 4
- テスト環境:Acrobat 4.0 + Excel 2000 + Win98
- PDFのバージョンが 1.7 以上は処理できない。
| PDF のバージョン | 結果 | 備考 |
|---|---|---|
| 1.2 | OK | |
| 1.3 | OK | |
| 1.4 | OK | |
| 1.5 | OK | |
| 1.6 | OK | |
| 1.7 | NO | 処理できない。 E6 |
| 1.7,Adobe Extension Level 3 | NO | 処理できない。 E6 |
| 1.7,Adobe Extension Level 8 | NO | 処理できない。 E6 |
Acrobat 5
- テスト環境:Acrobat 5.0.5 + Excel 2003 + Windows XP
- PDFのバージョンが 1.6 以上は処理できない。
- PDFの上位バージョンに対する警告メッセージを再表示させないレジストリ設定は無い。
| PDFのバージョン | 結果 | 備考 |
|---|---|---|
| 1.2 | OK | |
| 1.3 | OK | |
| 1.4 | OK | |
| 1.5 | OK | |
| 1.6 | NO | 処理できない。 E5 処理できる場合も有り。 |
| 1.7 | NO | 処理できない。 E6 |
| 1.7,Adobe Extension Level 3 | NO | 処理できない。 E6 |
| 1.7,Adobe Extension Level 8 | NO | 処理できない。 E6 |
Acrobat 6
- テスト環境:Acrobat 6.0.6 + Excel 2003 + Windows XP
- PDFのバージョンが 1.6 以上は処理できない。
- PDFの上位バージョンに対する警告メッセージを再表示させないレジストリ設定は無い。
| PDF のバージョン | 結果 | 備考 |
|---|---|---|
| 1.2 | OK | |
| 1.3 | OK | |
| 1.4 | OK | |
| 1.5 | OK | |
| 1.6 | NO | 処理できない。 E5 処理できる場合も有り。 |
| 1.7 | NO | 処理できない。 E5 処理できる場合も有り。 |
| 1.7,Adobe Extension Level 3 | NO | 処理できない。 E5 |
| 1.7,Adobe Extension Level 8 | NO | 処理できない。 E5 |
Acrobat 7
- テスト環境:Acrobat 7.1.4 + Excel 2003 + Windows XP
- PDFのバージョンが 1.7 以上はレジストリ操作が必要。
- 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.2 | OK | |
| 1.3 | OK | |
| 1.4 | OK | |
| 1.5 | OK | |
| 1.6 | OK | |
| 1.7 | OK | E4 , E5 レジストリ操作で処理可能 |
| 1.7,Adobe Extension Level 3 | OK | E5 レジストリ操作で処理可能 |
| 1.7,Adobe Extension Level 8 | OK | E5 レジストリ操作で処理可能 |
Acrobat 8
- テスト環境:Acrobat 8.3.1 Pro + Excel 2003 + Windows XP
- 全 PDFのバージョン で処理できない。
- PDFの上位バージョンに対する警告メッセージを再表示させないレジストリ設定をしても処理できない。
| PDF のバージョン | 結果 | 備考 |
|---|---|---|
| 1.2 | NO | E2 |
| 1.3 | NO | E2 |
| 1.4 | NO | E2 |
| 1.5 | NO | E2 |
| 1.6 | NO | E2 |
| 1.7 | NO | E2 |
| 1.7,Adobe Extension Level 3 | NO | E3 |
| 1.7,Adobe Extension Level 8 | NO | E3 |
Acrobat 9
- テスト環境:Acrobat 9.5.2 Extended + Excel 2003 + Windows XP
- 全 PDFのバージョン で処理できない。
- PDFの上位バージョンに対する警告メッセージを再表示させないレジストリ設定をしても処理できない。
| PDF のバージョン | 結果 | 備考 |
|---|---|---|
| 1.2 | NO | E1 |
| 1.3 | NO | E1 |
| 1.4 | NO | E2 |
| 1.5 | NO | E1 |
| 1.6 | NO | E2 |
| 1.7 | NO | E2 |
| 1.7,Adobe Extension Level 3 | NO | E2 |
| 1.7,Adobe Extension Level 8 | NO | E3 |
Acrobat X (10)
- テスト環境:Acrobat X (10.1.4) Extended + Excel 2003 + Windows XP
- 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.2 | OK | |
| 1.3 | OK | |
| 1.4 | OK | |
| 1.5 | OK | |
| 1.6 | OK | |
| 1.7 | OK | |
| 1.7,Adobe Extension Level 3 | OK | |
| 1.7,Adobe Extension Level 8 | OK |
Acrobat XI (11)
- テスト環境:Acrobat XI (11.0) Extended + Excel 2003 + Windows XP
- 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.2 | OK | |
| 1.3 | OK | |
| 1.4 | OK | |
| 1.5 | OK | |
| 1.6 | OK | |
| 1.7 | OK | |
| 1.7,Adobe Extension Level 3 | OK | |
| 1.7,Adobe Extension Level 8 | OK |
公開されている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へ >
ゴクリン さんへ。
>こちらの情報を参考にvbaで文字を90°回転させたテキストボックスを追加したいと思ったのですが、文字を回転させるにはどうしたらよいのでしょうか?
残念ですが、Acrobat OLEには回転角度を指定する機能がありません。そこでその機能が有る Acrobat JavaScript をVBAから実行します。
以下のサンプルを御覧ください。
001 Option Explicit002
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 を御覧ください。
ご希望の内容でしょうか?
対応ありがとうございます!
まさしくやりたかったことそのものです。無事、回転させることができました。
非常に助かりました。
ちなみにテキストボックスに複数行のテキストを入力することは可能でしょうか?
With objAFormField
.Value = "文字列1" & vbCrLf & "文字列2"
.IsMultiline = True
で
文字列1
文字列2
というふうに表示できるかと思ったのですができず...
立て続けに申し訳ありませんがご教示いただけないでしょうか。
管理人様
↑のコメント誤ってフルネームが入力されてしましました...
お手数おかけして大変申し訳無いのですが削除をお願いできますでしょうか。
ゴクリンさんへ。
「ニックネーム」にしました。
>.IsMultiline = True
上記はダメですね。テストしましたが、バグっている可能性があるので外して下さい。
その代わり、Acrobat JavaScriptの部分を
Const sAcrobatJavaScript = _
"var f = this.getField('@1');" & _
"f.rotation = @2 ;" & _
"f.multiline = true;"
最後に「f.multiline = true;」を追加します。
試して下さい。