Πώς να εργαστείτε με ετικέτες δομημένου εγγράφου στο .NET
Αυτός ο οδηγός δείχνει πώς να εισάγετε, να διαμορφώσετε, να εντοπίσετε, να αφαιρέσετε και να συνδέσετε δεδομένα σε δομημένες ετικέτες εγγράφου (ελέγχους περιεχομένου) σε Aspose.Words FOSS για .NET, χρησιμοποιώντας το StructuredDocumentTag κλάση στο Aspose.Words.Markup namespace. Καλύπτει ποιους τύπους ελέγχου περιεχομένου DocumentBuilder μπορούν να εισάγουν, ορίζοντας περιεχόμενο ειδικό για κάθε τύπο όπως η κατάσταση του πλαισίου ελέγχου ή οι επιλογές αναπτυσσόμενου μενού, εντοπίζοντας ελέγχους κατά ετικέτα ή τίτλο, αφαιρώντας έναν έλεγχο με ή χωρίς το περιεχόμενό του, και αντιστοιχίζοντας έναν έλεγχο σε προσαρμοσμένα δεδομένα XML.
Οδηγός βήμα προς βήμα
Βήμα 1: Εγκατάσταση του πακέτου
Το Aspose.Words FOSS for .NET δεν έχει ακόμη δημοσιεύσει ένα πακέτο NuGet – κατασκευάστε τη βιβλιοθήκη από τον πηγαίο κώδικα αντί αυτού. Κλωνοποιήστε το https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, στη συνέχεια κατασκευάστε το Aspose.Words.sln σε διαμόρφωση Release με το SDK .NET και κάντε αναφορά στη δημιουργημένη συναρμολόγηση Aspose.Words από το έργο σας. Η βιβλιοθήκη στοχεύει στο .NET Standard 2.0, έτσι λειτουργεί σε .NET Framework 4.6.2+ και .NET 6/8/10.
Βήμα 2: Εισαγωγή των απαιτούμενων κλάσεων
Προσθέστε μια οδηγία using Aspose.Words; για τα Document και DocumentBuilder, και μια οδηγία using Aspose.Words.Markup; για τα StructuredDocumentTag, SdtType, SdtListItem, SdtListItemCollection, XmlMapping, καθώς και για τις άλλες κλάσεις ελέγχου περιεχομένου που καλύπτονται σε αυτόν τον οδηγό.
Βήμα 3: Ελέγξτε ποιους τύπους Content-Control μπορείτε να εισάγετε
Πριν από την εισαγωγή, ελέγξτε εάν ο στόχος SdtType είναι ένας από τους επτά τύπους που γίνονται αποδεκτοί από το DocumentBuilder.InsertStructuredDocumentTag(SdtType): PlainText, RichText, Checkbox, DropDownList, ComboBox, Picture και Date. RepeatingSection και RepeatingSectionItem δεν μπορούν να εισαχθούν σε κέρσορα κειμένου με αυτή τη μέθοδο – τυλίγουν ολόκληρες παραγράφους ή γραμμές πίνακα αντί αυτού. Οι υπόλοιπες τιμές SdtType που μπορούν να εμφανιστούν σε αρχείο Word αλλά δεν εμφανίζονται στη διεπαφή του Word ως τύποι που μπορούν να εισαχθούν – None, Bibliography, Citation, Equation, BuildingBlockGallery, DocPartObj, Group και EntityPicker – δεν γίνονται αποδεκτές από αυτή τη μέθοδο εισαγωγής καθόλου.
Βήμα 4: Εισάγετε ένα Content Control στον κέρσορα
Καλέστε το DocumentBuilder.InsertStructuredDocumentTag(SdtType) με έναν από τους επτά υποστηριζόμενους τύπους για να εισάγετε ένα νέο control στην τρέχουσα θέση του κέρσορα του builder· η κλήση επιστρέφει το νέο StructuredDocumentTag. Ορίστε τα Tag και Title στο επιστραφέν control για να του δώσετε τις αναγνωριστικές συμβολοσειρές που βλέπουν οι συγγραφείς στο Word, και ορίστε το PlaceholderName (που υποστηρίζεται από ένα Placeholder BuildingBlock) για το κείμενο υπόδειξης που το Word εμφανίζει όταν το control είναι κενό – το IsShowingPlaceholderText αναφέρει αν αυτή η υπόδειξη εμφανίζεται αυτή τη στιγμή.
Βήμα 5: Διαμορφώστε περιεχόμενο ανά τύπο
Για ένα control τύπου checkbox, διαβάστε ή ορίστε το StructuredDocumentTag.Checked, και καλέστε το SetCheckedSymbol() / SetUncheckedSymbol() για να προσαρμόσετε τα σύμβολα που εμφανίζονται για κάθε κατάσταση. Για ένα control τύπου ημερομηνίας, ορίστε το FullDate, με τα DateDisplayFormat και DateDisplayLocale να ελέγχουν τον τρόπο απόδοσής του, το DateStorageFormat (SdtDateStorageFormat) να ελέγχει πώς αποθηκεύεται όταν δεσμεύεται σε δεδομένα XML, και το CalendarType (SdtCalendarType) να επιλέγει το σύστημα ημερολογίου. Για μια λίστα πτυσσόμενη ή ένα combo box, γεμίστε το ListItems – ένα SdtListItemCollection του SdtListItem (DisplayText, Value) – πριν ορίσετε το SelectedValue για να επιλέξετε την ενεργή επιλογή. Για ένα control απλού κειμένου, το Multiline είναι μια ιδιότητα bool στο StructuredDocumentTag που μπορεί να οριστεί για τη διαμόρφωση του control.
Βήμα 6: Εμφάνιση και κλείδωμα του Control
Ορίστε το Appearance (SdtAppearance) για να ελέγξετε πώς το control οριοθετείται οπτικά στο Word, και το Color για να ορίσετε το χρώμα επισήμανσής του. Τα ContentsFont και EndCharacterFont ελέγχουν τη γραμματοσειρά που εφαρμόζεται στα περιεχόμενα του control και στον χαρακτήρα λήξης. Τα LockContentControl και LockContents είναι ανεξάρτητες εναλλαγές – ορίστε το LockContentControl για να αποκλείσετε τη διαγραφή του ίδιου του control, και το LockContents για να αποκλείσετε την επεξεργασία του περιεχομένου του, χωρίς να επηρεάσετε το άλλο.
Βήμα 7: Εντοπίστε και αφαιρέστε τους ελέγχους περιεχομένου
Διαβάστε το Range.StructuredDocumentTags – ένα StructuredDocumentTagCollection περιορισμένο σε εκείνο το εύρος – και καλέστε το GetById(), GetByTag() ή GetByTitle() για να εντοπίσετε έναν συγκεκριμένο έλεγχο, ή το Remove() / RemoveAt() στη συλλογή για να αφαιρέσετε έναν με αναφορά ή δείκτη. Σε έναν μεμονωμένο έλεγχο, καλέστε το Remove() για να διαγράψετε τον έλεγχο μαζί με τα περιεχόμενά του, το RemoveSelfOnly() για να διαγράψετε μόνο το περιτύλιγμα ενώ διατηρείτε τα περιεχόμενα στο έγγραφο, ή το Clear() για να αδειάσετε τα περιεχόμενα του ενώ διατηρείτε τον έλεγχο στη θέση του.
Βήμα 8: Συνδέστε έναν έλεγχο με προσαρμοσμένα δεδομένα XML
Διαβάστε το StructuredDocumentTag.XmlMapping – μια XmlMapping παρουσία – και καλέστε το SetMapping(customXmlPart, xPath, prefixMapping) για να συνδέσετε τον έλεγχο με ένα υπάρχον προσαρμοσμένο τμήμα XML που βρίσκεται ήδη στο προσαρμοσμένο κατάστημα δεδομένων XML του εγγράφου, χρησιμοποιώντας μια έκφραση XPath για να επιλέξετε το δεσμευμένο στοιχείο. Το XmlMapping.IsMapped αναφέρει εάν υπάρχει ενεργή σύνδεση, τα CustomXmlPart και StoreItemId προσδιορίζουν το δεσμευμένο τμήμα δεδομένων, και το Delete() αφαιρεί τη χαρτογράφηση.
Βήμα 9: Διαχείριση ελέγχων περιεχομένου που εκτείνονται σε πολλαπλές ενότητες
Ένας έλεγχος περιεχομένου που εκτείνεται σε περισσότερες από μία ενότητες εγγράφου – όπως αναφέρει το IsMultiSection – δεν αντιπροσωπεύεται από έναν ενιαίο κόμβο StructuredDocumentTag, αλλά από ένα ζεύγος StructuredDocumentTagRangeStart / StructuredDocumentTagRangeEnd, συνδεδεμένο μέσω StructuredDocumentTagRangeStart.RangeEnd. Προγραμματίστε ενάντια στη κοινή διεπαφή IStructuredDocumentTag (Tag, Title, Placeholder, PlaceholderName, Appearance, IsShowingPlaceholderText, RemoveSelfOnly()) όταν ο κώδικας χρειάζεται να χειριστεί ομοιόμορφα και τις μορφές ενιαίου κόμβου και περιοχής, αντί να διακλαδώνεται ανάλογα με τον συγκεκριμένο τύπο.
Κοινά προβλήματα και διορθώσεις
InsertStructuredDocumentTag ρίχνει NotImplementedException Το ζητηθέν SdtType – για παράδειγμα Citation, Equation, ή BuildingBlockGallery – δεν είναι ένας από τους επτά τύπους που μπορούν να εισαχθούν. Χρησιμοποιήστε PlainText, RichText, Checkbox, DropDownList, ComboBox, Picture, ή Date αντί αυτού.
InsertStructuredDocumentTag εκτοξεύει InvalidOperationException RepeatingSection or RepeatingSectionItem ζητήθηκε σε κέρσορα κειμένου. Αυτοί οι δύο τύποι τυλίγουν ολόκληρες παραγράφους ή γραμμές πίνακα, αντί να εισάγονται σε θέση κέρσορα.
Η αφαίρεση ενός ελέγχου περιεχομένου διαγράφει επίσης το κείμενο μέσα του Remove() διαγράφει το στοιχείο ελέγχου και τα περιεχόμενά του μαζί. Καλέστε RemoveSelfOnly() αντί αυτού για να διατηρήσετε τα περιεχόμενα στο έγγραφο και να αφαιρέσετε μόνο το περιτύλιγμα.
Το πλαίσιο ελέγχου δεν εμφανίζει το αναμενόμενο σύμβολο Τα προσαρμοσμένα σύμβολα επιλεγμένου και μη επιλεγμένου δεν ορίστηκαν ποτέ. Καλέστε SetCheckedSymbol() and SetUncheckedSymbol() στο στοιχείο ελέγχου.
Μια λίστα αναπτυσσόμενη ή ένα combo box δεν εμφανίζει επιλογές ListItems δεν συμπληρώθηκε ποτέ. Προσθέστε SdtListItem καταχωρήσεις στο στοιχείο ελέγχου’s ListItems συλλογή πριν αναμένεται να εμφανιστούν οι επιλογές, στη συνέχεια ορίστε SelectedValue για να επιλέξετε το ενεργό.
Συχνές Ερωτήσεις
Ποιοι τύποι ελέγχου περιεχομένου μπορώ να εισάγω απευθείας με το DocumentBuilder;
PlainText, RichText, Checkbox, DropDownList, ComboBox, Picture και Date. Άλλες τιμές SdtType δεν υποστηρίζονται από το InsertStructuredDocumentTag().
Πώς μπορώ να βρω όλους τους ελέγχους περιεχομένου με μια συγκεκριμένη ετικέτα;
Διαβάστε το Range.StructuredDocumentTags και καλέστε το GetByTag(), ή το GetByTitle() / GetById() αν ταιριάζετε με αυτά τα αναγνωριστικά αντί αυτού.
Πώς μπορώ να αφαιρέσω έναν έλεγχο περιεχομένου αλλά να διατηρήσω το περιεχόμενό του στο έγγραφο;
Καλέστε το StructuredDocumentTag.RemoveSelfOnly() αντί για το Remove().
Πώς μπορώ να δεσμεύσω έναν έλεγχο περιεχομένου σε προσαρμοσμένα δεδομένα XML;
Καλέστε το XmlMapping.SetMapping() στο XmlMapping του ελέγχου, κατευθύνοντάς το σε ένα υπάρχον προσαρμοσμένο τμήμα XML και σε μια έκφραση XPath μέσα σε αυτό.
Πώς διαφέρει ένας έλεγχος περιεχομένου που εκτείνεται σε πολλές ενότητες από έναν συνηθισμένο;
Αντιπροσωπεύεται ως ζεύγος StructuredDocumentTagRangeStart / StructuredDocumentTagRangeEnd αντί για έναν μοναδικό κόμβο StructuredDocumentTag; και οι δύο μορφές υλοποιούν το IStructuredDocumentTag, έτσι το IsMultiSection σας λέει με ποια μορφή εργάζεστε.