|
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');
Δείτε επίσης
|