property FormFieldCount: Integer; // read only
FormFieldCount は、現在アクティブなページ上の AcroForm フィールドウィジェット注釈の数を返します。各 entry は 1 つのウィジェット注釈(/FT フィールドタイプを持つサブタイプ /Widget)に対応します。テキスト入力、チェックボックス、ラジオボタン、リストボックス、コンボボックス、プッシュボタン、署名フィールドのいずれかです(PDF 1.7 仕様 12.7 節)
Active が False のとき、ドキュメントが AcroForm でないとき(FormType = ftNone)、ページに対話ウィジェットがないときは 0 です。ページ単位の値です。ドキュメントツリーの別の場所で定義された同じ論理フィールドに属するウィジェットを、複数のページが持てます。PDF では 1 つのフィールドに複数のウィジェット配置を許しているためです(例: 表紙と最終ページに現れる署名)
FormFieldInfo[Index] に 0 から FormFieldCount - 1 のインデックスを渡すと、TPdfFormFieldInfo レコードが得られます。フィールドタイプ、名前、別名、フラグ、オプションラベル、現在値、エクスポート値、チェック状態、フォントサイズが入ります。ページ座標の hit-test でフィールドを得るには、代わりに FormFieldAt[X, Y] か FormFieldInfoAt[X, Y] を使います
FormType = ftXfaFull)は対話構造を AcroForm ツリーの外に持ちます。FormFieldCount は XFA が生成したウィジェットを報告することもありますが、XFA の描画自体は PDFium Delphi Component の対象外ですAnnotationCount は、ウィジェットが注釈の部分集合なため重なります。フィールドだけが欲しいときはこちらを使いますSetFormField でのウィジェット追加・削除はインデックスを無効化します。変更のたびに FormFieldCount を読み直してください
var I: Integer;
var Info: TPdfFormFieldInfo;
for I := 0 to Pdf1.FormFieldCount - 1 do
begin
Info := Pdf1.FormFieldInfo[I];
Memo1.Lines.Add(Format('%s = %s', [Info.Name, Info.ExportValue]));
end;