property FormFieldCount: Integer; // read only
FormFieldCount возвращает число widget-аннотаций полей AcroForm на текущей активной странице. Каждая запись — одна widget-аннотация (подтип /Widget с типом поля /FT): текстовый ввод, чекбокс, радиокнопка, список, комбобокс, кнопка или поле подписи (раздел 12.7 спецификации PDF 1.7)
Значение равно 0, когда Active равно False, когда документ не AcroForm (FormType = ftNone) или когда на странице нет интерактивных виджетов. Это метрика по странице; страницы могут содержать виджеты, принадлежащие одному логическому полю, определённому в другом месте дерева документа — PDF разрешает одному полю иметь несколько размещений виджетов (например, подпись, видимая на обложке и на последней странице)
Через FormFieldInfo[Index] с индексами от 0 до FormFieldCount - 1 получается запись TPdfFormFieldInfo: тип поля, имя, альтернативное имя, флаги, метки опций, текущее значение, export value, состояние галочки и размер шрифта. Чтобы найти поле по координате страницы (hit testing), берите FormFieldAt[X, Y] или FormFieldInfoAt[X, Y]
FormType = ftXfaFull) несут интерактивную структуру вне дерева AcroForm; FormFieldCount может по-прежнему показывать виджеты, сгенерированные XFA, но сам рендеринг XFA вне зоны ответственности PDFium Delphi ComponentAnnotationCount пересекаются, потому что виджеты — подмножество аннотаций. Когда нужны только поля, используйте это свойство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;