THotPDF Méthodes de champs de formulaire chargés

Syntaxe

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

Ces méthodes inspectent et mettent à jour les champs AcroForm qui existent déjà dans un PDF chargé avec LoadFromFile ou BeginIncrementalUpdate. Elles prennent en charge les champs texte (/FT /Tx), les champs bouton (/FT /Btn), les champs liste (/FT /Ch), les champs de signature (/FT /Sig) et les types de champs inconnus

GetLoadedAcroForm renvoie le dictionnaire /AcroForm chargé résolu pour les appelants qui ont besoin d’une inspection directe du dictionnaire avant d’utiliser les méthodes de champs de haut niveau

HasFormFields indique si le PDF chargé ou le document en cours possède des champs AcroForm. FormFieldExists vérifie un arbre de champs chargé ou la liste de champs d’écriture par nom de champ sans lever d’exception lorsque le champ est absent

GetFormFieldDescription lit le nom de champ alternatif /TU du champ chargé, couramment utilisé par les lecteurs PDF comme infobulle du champ. Il renvoie une chaîne vide lorsque le champ n’a pas de description

GetFormFieldOptionCount et GetFormFieldOptionValue lisent le tableau /Opt des champs liste chargés. Les entrées chaîne simples sont renvoyées directement ; les tableaux d’options à deux éléments renvoient la première valeur d’export

IsFormFieldReadOnly lit le bit 1 du flag /Ff du champ chargé. RenameFormField met à jour le nom /T local du champ chargé et rejette les noms complets dupliqués dans le même arbre de formulaire chargé

Le cache de relations de formulaire chargé projette les champs, noms qualifiés, automatiquement. Appelez InvalidateLoadedFormRelationshipCache après des modifications de relations effectuées via les API d’objets bruts

RecalculateLoadedFormFields parcourt le tableau chargé /AcroForm /CO dans l’ordre du document et évalue les opérations bornées AFSimple_Calculate SUM, AVG, PRD, MIN et MAX. Les valeurs mises à jour reçoivent des apparences régénérées

RemoveFormField supprime un champ de formulaire chargé du ses pages. FlattenLoadedFormFields ne peint que les champs nommés annotations, et préserve les champs et pages intacts. Un tableau de noms vide sélectionne tous les champs. La porte de permission par défaut refuse tout changement structurel interdit par des signatures DocMDP ou FieldMDP

FlattenFormFields conserve le contrat de commodité tous-champs et délègue les documents chargés au même chemin conscient des signatures et local à la page. Il renvoie le nombre de champs aplatis, ou zéro lorsqu’aucun champ de formulaire correspondant n’était présent

Utilisez SaveLoadedDocument pour écrire une copie entièrement enregistrée du graphe d’objets chargé après des éditions directes de champs Pour les flux en ajout seul tels que les PDF signés, chargez avec BeginIncrementalUpdate, éditez les champs, puis appelez SaveIncrementalUpdate

Exemple

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;
  Writeln('Plan exists: ', PDF.FormFieldExists('Plan'));
FlattenedCount := PDF.FlattenFormFields;
PDF.SaveLoadedDocument('FlattenedForm.pdf');
PDF.BeginIncrementalUpdate('SignedForm.pdf');
FlattenedCount := PDF.FlattenLoadedFormFields(['CalculatedTotal']);
PDF.SaveLoadedDocument('FlattenedForm.pdf');

Voir aussi