property FormFieldInfo[Index: Integer]: TPdfFormFieldInfo; // read only
FormFieldInfo возвращает снимок — запись TPdfFormFieldInfo для widget-аннотации поля формы по индексу Index с нуля на текущей активной странице. Запись даёт строго типизированный взгляд на один виджет поля AcroForm без необходимости вскрывать базовый дескриптор FPDF_ANNOTATION. Типы полей и флаги определены в разделе 12.7 спецификации PDF 1.7
Запись несёт имя поля Name (полный путь через родительские группы полей, например "order.shipto.address"), AlternateName для доступных подсказок, перечисление FieldType (fiPushButton, fiCheckBox, fiRadioButton, fiTextField, fiListBox, fiComboBox, fiSignature или fiUnknown), битовую маску Flags (ffReadOnly, ffRequired, ffNoExport, …), ExportValue, попадающий в экспорт FormData, флаг Checked для булевых полей, FontSize для отрисовки и массивы наборов опций OptionLabels / OptionSelected для комбобоксов и списков Виджеты-радиокнопки из группы дополнительно заполняют GroupCount и GroupIndex
Валидные индексы — 0 .. FormFieldCount - 1. Запись — value-тип; правка её полей не пишет обратно в документ. Чтобы изменить значение поля, присваивайте через FormField[Index]; чтобы поменять битовую маску флагов, вызывайте SetFormFieldFlagsAt. Чтение ленивое — PDFium декодирует Unicode-имена полей, метки опций и export values по требованию — поэтому кэшируйте результат, когда многократно обходите много полей
| Index | Индекс виджета на текущей странице с нуля (0 .. FormFieldCount - 1) |
NamefiSignature) отдают Name и прямоугольник, но не байты подписи; содержимое PKCS#7 берите на уровне документа через Signature[I]GroupCount / GroupIndexFormFieldCount равен 0 и этот индексатор вообще не вызывается
var I, J: Integer;
var Info: TPdfFormFieldInfo;
for I := 0 to Pdf1.FormFieldCount - 1 do
begin
Info := Pdf1.FormFieldInfo[I];
Memo1.Lines.Add(Format('%s [%d] export=%s checked=%s',
[Info.Name, Ord(Info.FieldType), Info.ExportValue, BoolToStr(Info.Checked, True)]));
for J := 0 to High(Info.OptionLabels) do
Memo1.Lines.Add(' ' + Info.OptionLabels[J]);
end;