Πώς να εργαστείτε με πεδία μετάβασης στο .NET
Πώς να εργαστείτε με μεταβατικά πεδία στο .NET
Aspose.Words FOSS for .NET αντιπροσωπεύει μια ομάδα παλαιότερων τύπων πεδίων Word — πεδία barcode και μερικά πεδία προ-Open-XML συμβατότητας — μέσω αφιερωμένων κλάσεων στο Aspose.Words.Fields namespace, που αποκαλούνται ανεπίσημα transitional fields εδώ. Αυτός ο οδηγός δείχνει πώς να βρείτε, να διαβάσετε και να τα ρυθμίσετε. Κάθε κλάση μεταβατικού πεδίου κληρονομεί από τη base Field type, μαζί με το generic Field object που εκτίθεται από Document.Range.Fields.
Οδηγός Βήμα-Βήμα
Βήμα 1: Εντοπίστε τα μεταβατικά πεδία σε ένα έγγραφο
Απαριθμήστε το Document.Range.Fields και συγκρίνετε το Type κάθε πεδίου (μια τιμή FieldType) με τις σχετικές σταθερές — FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef ή FieldInfo — μετά μετατρέψτε το γενικό Field στην αντίστοιχη κλάση για πρόσβαση στις συγκεκριμένες ιδιότητές του. Πάντα ελέγξτε το Type πριν τη μετατροπή: η μετατροπή σε λανθασμένη κλάση πεδίου προκαλεί ένα InvalidCastException.
Βήμα 2: Διαμορφώστε ένα πεδίο DISPLAYBARCODE ή MERGEBARCODE
FieldDisplayBarcode (το πεδίο DISPLAYBARCODE) και FieldMergeBarcode (το πεδίο MERGEBARCODE, το οποίο επίσης υλοποιεί το IMergeFieldSurrogate για συγχώνευση αλληλογραφίας) μοιράζονται το ίδιο σύνολο ιδιοτήτων ρύθμισης barcode: BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar και FixCheckDigit. Ορίστε αυτές στην παρουσία του πεδίου, μετά καλέστε το Update() ώστε το Result να αντικατοπτρίζει τη νέα ρύθμιση πριν αποθηκευτεί το έγγραφο.
Βήμα 3: Διαβάστε τα δεδομένα του παλαιού πεδίου BARCODE (Ταχυδρομικό)
FieldBarcode υλοποιεί το παλαιότερο πεδίο BARCODE, το οποίο είναι συγκεκριμένα ένα πεδίο αμερικανικού ταχυδρομικού barcode (POSTNET) αντί για ένα γενικού σκοπού barcode — δεν μοιράζεται τις ιδιότητες BarcodeType/BarcodeValue από το Βήμα 2. Αντίθετα, εκθέτει το PostalAddress (τη διεύθυνση που κωδικοποιεί το barcode), FacingIdentificationMark, IsUSPostalAddress και IsBookmark. Ελέγξτε το Field.Type έναντι του FieldType.FieldBarcode ειδικά πριν διαβάσετε αυτές τις ιδιότητες, καθώς η μετατροπή ενός πεδίου DISPLAYBARCODE ή MERGEBARCODE σε FieldBarcode δεν θα εκθέσει τις ιδιότητες που αναμένετε.
Βήμα 4: Απόδοση εικόνων Barcode με προσαρμοσμένο γεννήτορα
Αυτή η έκδοση FOSS μεταφέρει δεδομένα πεδίου barcode αλλά δεν περιλαμβάνει μηχανή απόδοσης barcode. Το BarcodeParameters είναι το κοντέινερ διέλευσης που ενοποιεί ρυθμίσεις από οποιαδήποτε οικογένεια πεδίων barcode — τις ιδιότητες DISPLAYBARCODE/MERGEBARCODE από το Βήμα 2 και τις ταχυδρομικές ιδιότητες από το Βήμα 3 — σε ένα ενιαίο αντικείμενο που παραδίδεται σε έναν renderer. Υλοποιήστε το IBarcodeGenerator, εκθέτοντας το GetBarcodeImage(parameters) και το κληρονομημένο GetOldBarcodeImage(parameters), για να παρέχετε την πραγματική απόδοση εικόνας· χωρίς παρεχόμενη υλοποίηση, τα πεδία barcode μεταφέρουν μόνο δεδομένα ρύθμισης.
Βήμα 5: Εργασία με πεδία συμβατότητας παλαιού τύπου
Τέσσερις άλλες κλάσεις καλύπτουν παλαιότερους κωδικούς πεδίων που εξακολουθούν να εμφανίζονται σε αρχεία .docx παλαιού τύπου. Το FieldBidiOutline υλοποιεί το πεδίο BIDIOUTLINE για αρίθμηση περιγράμματος από δεξιά προς αριστερά και δεν εκθέτει ιδιότητες πέρα από την κοινή επιφάνεια Field. Το FieldEQ υλοποιεί το πεδίο εξίσωσης EQ και επιπλέον εκθέτει το AsOfficeMath() για μετατροπή του περιεχομένου του σε αντικείμενο OfficeMath — αυτό επιτυγχάνει μόνο όταν το πεδίο κωδικοποιεί πράγματι μια εξίσωση. Το FieldFootnoteRef υλοποιεί το πεδίο FOOTNOTEREF, το οποίο διασυνδέει μια σημείωση υποσημειώματος ή τέλους σημειώματος, και επίσης δεν εκθέτει ιδιότητες πέρα από την κοινή επιφάνεια Field. Το FieldInfo υλοποιεί το πεδίο INFO, διαβάζοντας ή γράφοντας μια ιδιότητα σύνοψης-πληροφορίας εγγράφου μέσω των ιδιοτήτων του InfoType και NewValue.
Βήμα 6: Ενημέρωση ή παγώστε την τιμή ενός μεταβατικού πεδίου
Κάθε κλάση μεταβατικού πεδίου κληρονομεί το GetFieldCode() (το υποκείμενο κείμενο κώδικα του πεδίου), το Update() (επανυπολογίζει το αποτέλεσμα), το Unlink() (αντικαθιστά το πεδίο με το τελευταίο υπολογισμένο αποτέλεσμα ως στατικό κείμενο) και το Remove() (διαγράφει το πεδίο). Καλείστε το Update() μετά την αλλαγή της διαμόρφωσης οποιουδήποτε πεδίου ώστε το Result να αντανακλά την αλλαγή, και χρησιμοποιήστε το Unlink() όταν η τρέχουσα τιμή ενός πεδίου πρέπει να παγώσει αντί να παραμένει επαναϋπολογίσιμη.
Κοινά Προβλήματα και Διορθώσεις
InvalidCastException κατά το casting ενός Field σε μια κλάση μεταβατικού πεδίου. Το λάθος FieldType υποτέθηκε. Ελέγξτε Field.Type σε σχέση με το αντίστοιχο FieldType σταθερά πριν τη μετατροπή.
A DISPLAYBARCODE/MERGEBARCODE οι ιδιότητες του πεδίου λείπουν μετά τη μετατροπή. Το πεδίο μετατράπηκε σε FieldBarcode αντί για FieldDisplayBarcode/FieldMergeBarcode (ή το αντίστροφο) — αυτές οι κλάσεις εκθέτουν διαφορετικά σύνολα ιδιοτήτων παρόλο που και οι τρεις αντιπροσωπεύουν δεδομένα barcode. Επιβεβαιώστε Field.Type πριν από την μετατροπή.
Τα πεδία barcode μεταφέρουν δεδομένα, αλλά δεν εμφανίζεται καμία εικόνα. Όχι IBarcodeGenerator παρέχεται υλοποίηση. Παρέχετε έναν προσαρμοσμένο γεννήτρια που υλοποιεί GetBarcodeImage(parameters) — αυτή η έκδοση δεν περιλαμβάνει ενσωματωμένη μηχανή απόδοσης barcode.
FieldEQ.AsOfficeMath() επιστρέφει απροσδόκητα αποτελέσματα. Το πεδίο δεν περιέχει έγκυρη εντολή εξίσωσης. Εξετάστε το πεδίο GetFieldCode() την έξοδο πριν προσπαθήσετε τη μετατροπή.
FieldInfoΗ τιμή δεν ενημερώνεται μετά τη ρύθμιση NewValue. Το πεδίο δεν ανανεώθηκε μετά την αλλαγή. Κλήση Update() στο πεδίο μετά την τροποποίηση NewValue.
Συχνές Ερωτήσεις
Τι σημαίνει το «transitional» για αυτούς τους τύπους πεδίων;
Δεν είναι επίσημη ορολογία του Word — ομαδοποιεί κλάσεις πεδίων στο χώρο ονομάτων Aspose.Words.Fields αυτής της έκδοσης που υλοποιούν παλαιότερους κωδικούς πεδίων (πεδία barcode και πεδία συμβατότητας προ-Open-XML) μέσω των δικών τους έντονων τύπων κλάσεων αντί να αντιμετωπίζονται μόνο μέσω του γενικού αντικειμένου Field.
Χρησιμοποιεί το FieldBarcode τις ίδιες ιδιότητες με το FieldDisplayBarcode;
Όχι. Το FieldBarcode υλοποιεί το παλαιό πεδίο BARCODE (postal/POSTNET) και εκθέτει τα PostalAddress, FacingIdentificationMark, IsUSPostalAddress και IsBookmark. Τα FieldDisplayBarcode και FieldMergeBarcode μοιράζονται διαφορετικό σύνολο ιδιοτήτων — BarcodeType, BarcodeValue, SymbolHeight και σχετικές ρυθμίσεις απόδοσης.
Αυτή η έκδοση δημιουργεί εικόνες barcode;
Όχι. Τα FieldBarcode, FieldDisplayBarcode και FieldMergeBarcode περιέχουν δεδομένα διαμόρφωσης barcode και εκθέτουν τη διεπαφή IBarcodeGenerator, αλλά δεν περιλαμβάνεται μηχανή απόδοσης barcode σε αυτήν την έκδοση — απαιτείται μια προσαρμοσμένη υλοποίηση IBarcodeGenerator για την παραγωγή μιας εικόνας.
Μπορώ να μετατρέψω ένα πεδίο EQ σε μια εξίσωση OfficeMath;
Ναι, μέσω του FieldEQ.AsOfficeMath(), εφόσον ο κώδικας του πεδίου κωδικοποιεί πραγματικά μια εξίσωση.
Πώς μπορώ να βρω όλα τα μεταβατικά πεδία σε ένα έγγραφο;
Απαριθμήστε το Document.Range.Fields και συγκρίνετε κάθε Field.Type με τις σχετικές σταθερές FieldType (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).