Εργασία με Έγγραφα

Εργασία με Έγγραφα

Aspose.Words FOSS for .NET αντιπροσωπεύει κάθε αρχείο Word ως ένα μοντέλο αντικειμένων στη μνήμη με ρίζα την κλάση Document, ενώ το DocumentBuilder παρέχει ένα υψηλού επιπέδου, βασισμένο σε κέρσορα API για τη σύνταξη περιεχομένου. Αυτός ο οδηγός καλύπτει τη δημιουργία και τη φόρτωση εγγράφων, τη σύνταξη με DocumentBuilder, τη δομή ενότητας/σώματος, την περιήγηση στο δέντρο κόμβων, τον συνδυασμό εγγράφων και την προστασία τους.


Δημιουργία και Φόρτωση Εγγράφων

Δημιουργήστε ένα κενό έγγραφο με new Document(), ή ανοίξτε ένα υπάρχον αρχείο περνώντας μια διαδρομή ή Stream στον κατασκευαστή Document(fileName) ή Document(stream). Οι υπερφορτώσεις που δέχονται ένα όρισμα LoadOptions σας επιτρέπουν να ελέγχετε τη συμπεριφορά φόρτωσης, όπως η παροχή κωδικού πρόσβασης για ένα κρυπτογραφημένο αρχείο.

Πριν τη φόρτωση ενός αρχείου από άγνωστη ή μη αξιόπιστη πηγή, το FileFormatUtil.DetectFileFormat(fileName) (ή η υπερφόρτωση Stream) επιστρέφει ένα FileFormatInfo που περιγράφει το ανιχνευμένο LoadFormat, και αν το αρχείο IsEncrypted, HasDigitalSignature, ή HasMacros.


Σύνταξη με DocumentBuilder

DocumentBuilder τυλίγει ένα Document και εκθέτει έναν κέρσορα που κινείτε μέσα στο έγγραφο ενώ εισάγετε περιεχόμενο. Τα Write(text) και Writeln(text) εισάγουν κείμενο στον κέρσορα· το InsertParagraph() ξεκινά μια νέα παράγραφο. Οι ιδιότητες μορφοποίησης στον builder — Font, ParagraphFormat, ListFormat, PageSetup — εφαρμόζονται σε ό,τι γράφεται επόμενα.

Μετακινήστε τον δρομέα με MoveToDocumentStart(), MoveToDocumentEnd(), MoveToSection(sectionIndex), MoveToBookmark(bookmarkName) ή MoveToParagraph(paragraphIndex, characterIndex). Οι ιδιότητες CurrentNode, CurrentParagraph και CurrentSection του δημιουργού αναφέρουν τη τρέχουσα θέση του στο δέντρο.


Δομή Εγγράφου: Ενότητες και Σώμα

Ένα Document περιέχει ένα SectionCollection (Document.Sections, συν FirstSection / LastSection); κάθε Section έχει ένα Body, μια προαιρετική συλλογή κεφαλίδων/υποσέλιδων, και το δικό του PageSetup. Τα Section.AppendContent(sourceSection) και PrependContent(sourceSection) αντιγράφουν περιεχόμενο μεταξύ ενοτήτων, και το ClearContent() επαναφέρει μια ενότητα χωρίς να την αφαιρέσει από το έγγραφο.

Μέσα σε ένα Body, το περιεχόμενο εκτίθεται μέσω του Body.Paragraphs (ένα ParagraphCollection) και του Body.Tables. Ένα Range — διαθέσιμο από τα Document, Section, Paragraph και άλλους κόμβους — αντιπροσωπεύει μια συνεχόμενη περιοχή του δέντρου· το Range.Text διαβάζει το ακατέργαστο κείμενό του και το Range.Replace(pattern, replacement) εκτελεί μια λειτουργία εύρεσης-αντικατάστασης μόνο σε αυτήν την περιοχή.


Περιήγηση στο Δέντρο Κόμβων με DocumentVisitor

Κάθε μέρος ενός εγγράφου — ενότητες, παράγραφοι, runs, πίνακες, πεδία, σχήματα, σχόλια, υποσημειώσεις — είναι ένα Node σε ένα σύνθετο δέντρο με ρίζα το Document. Για να επεξεργαστείτε κάθε κόμβο ενός συγκεκριμένου τύπου χωρίς να κάνετε χειροκίνητη επανάκληση, κληρονομήστε την αφηρημένη DocumentVisitor και παρακάμψτε τις κλήσεις επιστροφής Visit*Start/Visit*End που χρειάζεστε, όπως το VisitParagraphStart(paragraph) ή το VisitRun(run), στη συνέχεια καλέστε το document.Accept(visitor). Κάθε κλήση επιστροφής μπορεί να επιστρέψει ένα VisitorAction (Continue, SkipThisNode ή Stop) για να ελέγξει τον τρόπο με τον οποίο προχωρά η διάσχιση.


Κλωνοποίηση, Εισαγωγή και Προσάρτηση Περιεχομένου

Document.Clone() δημιουργεί ένα βαθύ αντίγραφο ολόκληρου ενός εγγράφου. Για να μετακινήσετε περιεχόμενο μεταξύ δύο διαφορετικών στιγμιοτύπων Document, καλέστε το ImportNode(srcNode, isImportChildren) στο έγγραφο προορισμού για να φέρετε έναν κόμβο από ξένο δέντρο, ή καλέστε το Document.AppendDocument(srcDoc, importFormatMode) για να προσαρτήσετε τις ενότητες ενός εγγράφου σε άλλο χρησιμοποιώντας ένα επιλεγμένο ImportFormatMode — KeepSourceFormatting, UseDestinationStyles ή KeepDifferentStyles. Το DocumentBuilder.InsertDocument(srcDoc, importFormatMode) εισάγει το περιεχόμενο του πηγαίου εγγράφου στον δρομέα του δημιουργού αντί στο τέλος του προορισμού.


Προστασία Εγγράφων

Document.Protect(type, password) περιορίζει την επεξεργασία σύμφωνα με μια τιμή ProtectionType — ReadOnly, AllowOnlyComments, AllowOnlyRevisions, AllowOnlyFormFields ή NoProtection για να αφαιρεθεί η προστασία. Unprotect() (με ή χωρίς κωδικό) την αντιστρέφει. Αυτό είναι περιορισμός επεξεργασίας που επιβάλλει το Word, ξεχωριστά από την κρυπτογράφηση κωδικού πρόσβασης OOXML που εφαρμόζει το OoxmlSaveOptions.Password κατά την αποθήκευση ενός αρχείου.


Συμβουλές και Καλές Πρακτικές

  • Προτιμήστε το DocumentBuilder για τη δημιουργία νέου περιεχομένου· μεταβείτε σε άμεση διαχείριση κόμβων (AppendChild, InsertAfter, Clone) όταν χρειάζεστε ακριβή έλεγχο πάνω σε ένα υπάρχον δέντρο.
  • Καλέστε το FileFormatUtil.DetectFileFormat πριν φορτώσετε ένα αρχείο από μη αξιόπιστη ή παρεχόμενη από χρήστη πηγή, ώστε να ελέγξετε το LoadFormat και να απορρίψετε νωρίς μη υποστηριζόμενη ή κρυπτογραφημένη είσοδο.
  • Κατά τη συνένωση εγγράφων με AppendDocument ή InsertDocument, επιλέξτε το ImportFormatMode σκόπιμα — το KeepSourceFormatting διατηρεί την εμφάνιση της πηγής, το UseDestinationStyles ταιριάζει με το σύνολο στυλ του εγγράφου-στόχου.
  • Χρησιμοποιήστε μια υποκατηγορία DocumentVisitor αντί για χειροκίνητη αναδρομική περάτωση του δένδρου όταν χρειάζεται να επεξεργαστείτε συνεπώς κάθε εμφάνιση ενός τύπου κόμβου.
  • Το Document.Protect είναι περιορισμός επεξεργασίας, όχι κρυπτογράφηση — συνδυάστε το με το OoxmlSaveOptions.Password εάν το αποθηκευμένο αρχείο πρέπει να απαιτεί κωδικό πρόσβασης για το άνοιγμά του.

Κοινά προβλήματα

ΠρόβλημαΑιτίαΔιόρθωση
Document(fileName) προκαλεί εξαίρεση για ένα αρχείο που ανοίγει κανονικά στο WordΗ μορφή του αρχείου δεν είναι μια που αυτή η έκδοση υποστηρίζει για φόρτωσηΚαλέστε πρώτα το FileFormatUtil.DetectFileFormat και ελέγξτε το επιστρεφόμενο LoadFormat πριν τη φόρτωση
Το προσαρτημένο περιεχόμενο υιοθετεί λανθασμένες γραμματοσειρές ή στυλΑναντιστοιχία ImportFormatMode μεταξύ των συνόλων στυλ πηγής και προορισμούΠερνάτε KeepSourceFormatting ή UseDestinationStyles ρητά αντί να βασίζεστε σε προεπιλογή
Η διέλευση του DocumentVisitor σταματά νωρίς ή παραλείπει περιεχόμενοΜια παράκαμψη Visit*Start / Visit*End επιστρέφει το SkipThisNode ή το Stop αθέληταΕπιστρέψτε το VisitorAction.Continue από κάθε παράκαμψη, εκτός εάν σκοπεύετε συγκεκριμένα να παραλείψετε ή να σταματήσετε
Το Unprotect() δεν έχει καμία επίδρασηΤο έγγραφο δεν προστατεύτηκε με κωδικό πρόσβασης ή δόθηκε λανθασμένος κωδικόςΚαλέστε το Unprotect() χωρίς ορίσματα εάν το Protect κλήθηκε χωρίς κωδικό πρόσβασης, διαφορετικά περάστε τον αντίστοιχο κωδικό

FAQ

Ποια είναι η διαφορά μεταξύ Document.Clone() και ImportNode;

Clone() αντιγράφει ολόκληρο το έγγραφο σε μια νέα παρουσία Document. ImportNode(srcNode, isImportChildren) φέρνει έναν μοναδικό κόμβο (και προαιρετικά τα παιδιά του) από το δέντρο ενός εγγράφου σε ένα άλλο, κάτι που χρησιμοποιείται όταν συνδυάζετε συγκεκριμένο περιεχόμενο αντί ολόκληρων εγγράφων.

Ποια μορφές αρχείων μπορεί να φορτώσει το Document(fileName);

Document(fileName) φορτώνει DOCX, DOCM, DOTX, DOTM, Flat OPC (συμπεριλαμβανομένων των εκδόσεων με μακροεντολές και προτύπων), Markdown και απλό κείμενο. Παλιά μορφές επεξεργασίας κειμένου και διαδικτυακά φορμά εξαιρούνται από τους φορτωτές αυτής της έκδοσης.

Πώς μπορώ να βρω πού βρίσκεται αυτήν τη στιγμή ένα DocumentBuilder;

Διαβάστε CurrentNode, CurrentParagraph ή CurrentSection στην παρουσία του builder.

Το Document.Protect κρυπτογραφεί το αποθηκευμένο αρχείο;

Όχι — πρόκειται για περιορισμό επεξεργασίας που επιβάλλει το Word όταν ανοίγεται το αρχείο. Για να απαιτείται κωδικός πρόσβασης μόνο για το άνοιγμα του αρχείου, ορίστε OoxmlSaveOptions.Password κατά την αποθήκευση.

Πώς μπορώ να διαβάσω μόνο τις παραγράφους στο σώμα ενός εγγράφου;

Χρησιμοποιήστε τη συλλογή Body.Paragraphs, ή το Body.GetChildNodes(nodeType, isDeep) για άλλους τύπους κόμβων.


API Reference Περίληψη

Κλάση/ΜέθοδοςΠεριγραφή
DocumentΡίζα του μοντέλου αντικειμένου εγγράφου· οι κατασκευαστές φορτώνουν από αρχείο ή ροή, ή δημιουργούν ένα κενό έγγραφο.
Document.SaveΓράφει το έγγραφο σε αρχείο, ροή ή HTTP απόκριση σε επιλεγμένη μορφή.
Document.Clone()Δημιουργεί ένα βαθύ αντίγραφο ολόκληρου του εγγράφου.
Document.Protect(type, password) / Unprotect()Εφαρμόζει ή αφαιρεί περιορισμό επεξεργασίας.
Document.AppendDocument(srcDoc, importFormatMode)Προσθέτει τις ενότητες ενός άλλου εγγράφου σε αυτό.
DocumentBuilderΒασισμένο σε κέρσορα API για τη συγγραφή κειμένου και την εισαγωγή περιεχομένου σε ένα έγγραφο.
DocumentBuilder.InsertDocument(srcDoc, importFormatMode)Εισάγει το περιεχόμενο ενός πηγαίου εγγράφου στον κέρσορα.
Section / SectionCollectionΜία ενότητα ενός εγγράφου και η συλλογή όλων των ενοτήτων.
BodyContainer για το κύριο κείμενο (παράγραφοι και πίνακες) μιας ενότητας.
RangeΜία συνεχόμενη περιοχή του δέντρου του εγγράφου· υποστηρίζει τα Text και Replace.
DocumentVisitorΑφηρημένη βασική κλάση για την περιήγηση σε κάθε κόμβο του δέντρου εγγράφου.
ProtectionTypeΑπαρίθμηση περιορισμών επεξεργασίας σε επίπεδο εγγράφου.
FileFormatUtil.DetectFileFormatΑνιχνεύει τη μορφή ενός αρχείου ή ροής πριν το φορτώσει.

Δείτε επίσης

 Ελληνικά