THotPDF Loaded Form Field Methods

Syntax

function GetFormFieldCount: Integer;
function GetFormFieldName(FieldIndex: Integer): AnsiString;
function GetFormFieldValue(FieldIndex: Integer): AnsiString; overload;
function GetFormFieldValue(const FieldName: AnsiString): AnsiString; overload;
function GetFormFieldType(FieldIndex: Integer): THPDFLoadedFormFieldType; overload;
function GetFormFieldType(const FieldName: AnsiString): THPDFLoadedFormFieldType; overload;
function GetFormFieldDescription(FieldIndex: Integer): AnsiString; overload;
function GetFormFieldDescription(const FieldName: AnsiString): AnsiString; overload;
function GetFormFieldOptionCount(FieldIndex: Integer): Integer; overload;
function GetFormFieldOptionCount(const FieldName: AnsiString): Integer; overload;
function GetFormFieldOptionValue(FieldIndex, OptionIndex: Integer): AnsiString; overload;
function GetFormFieldOptionValue(const FieldName: AnsiString; OptionIndex: Integer): AnsiString; overload;
function IsFormFieldReadOnly(FieldIndex: Integer): Boolean; overload;
function IsFormFieldReadOnly(const FieldName: AnsiString): Boolean; overload;
procedure SetFormFieldValue(FieldIndex: Integer; const Value: AnsiString); overload;
procedure SetFormFieldValue(const FieldName, Value: AnsiString); overload;
procedure SetFormFieldReadOnly(FieldIndex: Integer; ReadOnly: Boolean); overload;
procedure SetFormFieldReadOnly(const FieldName: AnsiString; ReadOnly: Boolean); overload;
procedure RenameFormField(FieldIndex: Integer; const NewName: AnsiString); overload;
procedure RenameFormField(const FieldName, NewName: AnsiString); overload;
procedure RemoveFormField(FieldIndex: Integer); overload;
procedure RemoveFormField(const FieldName: AnsiString); overload;
procedure FlattenFormFields;
procedure SaveLoadedDocument(const TargetFile: TFileName);

Description

These methods inspect and update AcroForm fields that already exist in a PDF loaded with LoadFromFile or BeginIncrementalUpdate. They support text fields (/FT /Tx), button fields (/FT /Btn), choice fields (/FT /Ch), signature fields (/FT /Sig), and unknown field types.

GetFormFieldDescription reads the loaded field's /TU alternate field name, commonly used by PDF viewers as the field tooltip. It returns an empty string when the field has no description.

GetFormFieldOptionCount and GetFormFieldOptionValue read the /Opt array on loaded choice fields. Simple string entries are returned directly; two-element option arrays return the first export value.

IsFormFieldReadOnly reads bit 1 of the loaded field's /Ff flag. RenameFormField updates the loaded field's local /T name and rejects duplicate fully qualified names in the same loaded form tree.

RemoveFormField deletes a loaded form field from the AcroForm field tree and removes the matching widget annotations from their pages. FlattenFormFields paints the current visible values of loaded fields into static page content, then removes the AcroForm catalog entry and widget annotations so the saved PDF no longer exposes interactive fields.

Use SaveLoadedDocument to write a fully saved copy of the loaded object graph after direct field edits. For append-only workflows such as signed PDFs, load with BeginIncrementalUpdate, edit fields, and then call SaveIncrementalUpdate.

Example

PDF.LoadFromFile('InputForm.pdf');
for I := 0 to PDF.GetFormFieldCount - 1 do
  Writeln(PDF.GetFormFieldName(I), ' = ', PDF.GetFormFieldValue(I));

for I := 0 to PDF.GetFormFieldOptionCount('Plan') - 1 do
  Writeln('Plan option ', I, ': ', PDF.GetFormFieldOptionValue('Plan', I));

Writeln('Customer description: ', PDF.GetFormFieldDescription('CustomerName'));
PDF.SetFormFieldValue('CustomerName', 'Bob');
PDF.SetFormFieldReadOnly('CustomerName', True);
PDF.RenameFormField('CustomerName', 'ClientName');
PDF.RemoveFormField('Approved');
PDF.SaveLoadedDocument('UpdatedForm.pdf');
PDF.LoadFromFile('UpdatedForm.pdf');
PDF.FlattenFormFields;
PDF.SaveLoadedDocument('FlattenedForm.pdf');

See Also