THotPDF Loaded Form Field Methods

Σύνταξη

function GetLoadedAcroForm: THPDFDictionaryObject;
function HasFormFields: Boolean;
function FormFieldExists(const FieldName: AnsiString): Boolean;
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 GetLoadedFormFieldWidgetPageIndex(FieldIndex,
  WidgetIndex: Integer): Integer;
function GetLoadedFormFieldIndexForAnnotation(PageIndex,
  AnnotationIndex: Integer; out WidgetIndex: Integer): Integer;
procedure InvalidateLoadedFormRelationshipCache;
function GetLoadedFormRelationshipCacheStatistics(
  out Statistics: THPDFFormRelationshipCacheStatistics): Boolean;
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;
function RecalculateLoadedFormFields: Integer;
function FlattenLoadedFormFields(const FieldNames: array of AnsiString;
  EnforceSignaturePermissions: Boolean = True): Integer;
function FlattenFormFields: Integer;
procedure SaveLoadedDocument(const TargetFile: TFileName);

Περιγραφή

Αυτές οι μέθοδοι ελέγχουν και ενημερώνουν AcroForm fields που υπάρχουν ήδη σε PDF φορτωμένο με LoadFromFile ή BeginIncrementalUpdate. Υποστηρίζουν text fields (/FT /Tx), button fields (/FT /Btn), choice fields (/FT /Ch), signature fields (/FT /Sig) και άγνωστους τύπους πεδίων

Το GetLoadedAcroForm επιστρέφει το επιλυμένο λεξικό /AcroForm του φορτωμένου εγγράφου για κώδικα που χρειάζεται άμεση επιθεώρηση του λεξικού πριν χρησιμοποιήσει τις μεθόδους πεδίων υψηλού επιπέδου

Το HasFormFields αναφέρει αν το φορτωμένο PDF ή το έγγραφο που συντάσσεται έχει πεδία AcroForm. Το FormFieldExists ελέγχει το δέντρο φορτωμένων πεδίων ή τη λίστα πεδίων σύνταξης με βάση το όνομα χωρίς να δημιουργεί εξαίρεση όταν το πεδίο απουσιάζει

Το GetFormFieldDescription διαβάζει το εναλλακτικό όνομα πεδίου /TU του φορτωμένου πεδίου, το οποίο τα προγράμματα προβολής PDF χρησιμοποιούν συχνά ως επεξήγηση εργαλείου. Επιστρέφει κενή συμβολοσειρά όταν το πεδίο δεν έχει περιγραφή

Τα GetFormFieldOptionCount και GetFormFieldOptionValue διαβάζουν τον πίνακα /Opt στα φορτωμένα πεδία επιλογής. Οι απλές εγγραφές συμβολοσειράς επιστρέφονται απευθείας· οι πίνακες επιλογών δύο στοιχείων επιστρέφουν την πρώτη τιμή εξαγωγής

Το IsFormFieldReadOnly διαβάζει το bit 1 της σημαίας /Ff του φορτωμένου πεδίου. Το RenameFormField ενημερώνει το τοπικό όνομα /T του φορτωμένου πεδίου και απορρίπτει διπλά πλήρως αναγνωρισμένα ονόματα στο ίδιο δέντρο φορτωμένης φόρμας

Η κρυφή μνήμη σχέσεων φορτωμένης φόρμας αντιστοιχίζει πεδία, πλήρως αναγνωρισμένα ονόματα, widgets, σχολιασμούς και σελίδες και προς τις δύο κατευθύνσεις μετά από μία αργή γραμμική κατασκευή. Οι μέθοδοι μεταβολής υψηλού επιπέδου τη διατηρούν ή την ακυρώνουν αυτόματα. Καλέστε το InvalidateLoadedFormRelationshipCache μετά από αλλαγές σχέσεων μέσω API ακατέργαστων αντικειμένων

Το RecalculateLoadedFormFields επισκέπτεται τον πίνακα /AcroForm /CO του φορτωμένου εγγράφου με σειρά εγγράφου και αξιολογεί τις περιορισμένες λειτουργίες AFSimple_Calculate SUM, AVG, PRD, MIN και MAX Οι ενημερωμένες τιμές λαμβάνουν αναδημιουργημένες εμφανίσεις

Το RemoveFormField διαγράφει ένα φορτωμένο πεδίο φόρμας από το δέντρο πεδίων AcroForm και αφαιρεί τους αντίστοιχους σχολιασμούς widget από τις σελίδες του. Το FlattenLoadedFormFields ζωγραφίζει μόνο τα ονομασμένα πεδία σε στατικό περιεχόμενο στις σελίδες που τα κατέχουν, αφαιρεί τους σχολιασμούς widget και διατηρεί ανέπαφα πεδία και σελίδες που δεν επιλέχθηκαν. Κενός πίνακας ονομάτων επιλέγει όλα τα πεδία. Ο προεπιλεγμένος έλεγχος δικαιωμάτων αρνείται κάθε δομική αλλαγή που απαγορεύεται από υπογραφές DocMDP ή FieldMDP

Το FlattenFormFields διατηρεί τη σύμβαση ευκολίας για όλα τα πεδία και αναθέτει τα φορτωμένα έγγραφα στην ίδια διαδρομή ανά σελίδα που λαμβάνει υπόψη τις υπογραφές. Επιστρέφει τον αριθμό των πεδίων που μετατράπηκαν σε στατικό περιεχόμενο, ή μηδέν όταν δεν υπήρχαν αντίστοιχα πεδία φόρμας

Χρησιμοποιήστε το SaveLoadedDocument για να γράψετε πλήρως αποθηκευμένο αντίγραφο του loaded object graph μετά από άμεσες field edits. Για append-only workflows όπως signed PDFs, φορτώστε με BeginIncrementalUpdate, επεξεργαστείτε τα fields και έπειτα καλέστε το SaveIncrementalUpdate

Παράδειγμα

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

Δείτε επίσης