procedure SetFormFieldFlags(Index: Integer; const Flags: TPdfFormFieldFlags);
| Index | Integer. Индекс аннотации поля формы на текущей странице с нуля. Должен быть в диапазоне от 0 до AnnotationCount - 1 |
| Flags | TPdfFormFieldFlags. Набор значений TPdfFormFieldFlag, применяемых к полю. Они соответствуют флагам полей AcroForm из спецификации PDF, например read-only, required или no-export |
SetFormFieldFlags записывает флаги полей AcroForm в widget-аннотацию формы по заданному индексу аннотации с нуля на текущей странице. Флаги управляют интерактивным поведением поля: например, read-only не даёт пользователю менять значение, а required сигнализирует, что поле надо заполнить до отправки формы
Параметр Index ссылается на индекс аннотации, как его репортит AnnotationCount, а не на индекс поля формы из FormFieldCount. Через FormFieldInfo или HasFormFieldAt выясните, какие индексы аннотаций соответствуют виджетам форм. Чтобы адресовать поле по координатам страницы, а не по индексу, есть SetFormFieldFlagsAt
Изменения флагов действуют сразу в документе в памяти, но не переживают до диска, пока не вызван SaveAs. При программной блокировке заполненной формы рекомендуемая последовательность: присвойте значения FormField[], вызовите GenerateFormAppearances, поставьте флаг read-only, затем вызовите SaveAs
var
I: Integer;
begin
Pdf1.PageIndex := 0;
// Mark every form field on the page as read-only
for I := 0 to Pdf1.AnnotationCount - 1 do
if Pdf1.FormFieldInfo[I].FieldType <> fftUnknown then
Pdf1.SetFormFieldFlags(I, [ffReadOnly]);
Pdf1.SaveAs('output_readonly.pdf');
end;