Εισαγωγή
Τα έγγραφα Word τοποθετούν εικόνες, πλαίσια κειμένου και άλλα ελεύθερα αιωρούμενα αντικείμενα σε μια στρώση σχεδίασης που βρίσκεται ξεχωριστά από τη συνήθη ροή παραγράφων και πινάκων. Aspose.Words FOSS για .NET αποκαλύπτει αυτή τη στρώση σχεδίασης μέσω των κλάσεων Shape και ShapeBase, παρέχοντας προγραμματιστική πρόσβαση στο ίδιο μοντέλο AutoShape, εικόνας, πλαισίου κειμένου και αντικειμένου OLE που χρησιμοποιεί το Word εσωτερικά. Αυτός ο οδηγός δείχνει πώς η βιβλιοθήκη αντιπροσωπεύει και διαχειρίζεται αυτά τα αντικείμενα σχεδίασης — θέση, μορφοποίηση γεμίσματος και περιγράμματος, ενσωματωμένες εικόνες και κείμενο τοποθετημένο μέσα σε σχήμα — σε έγγραφα DOCX, DOCM, DOTX και DOTM.
Αυτό είναι χρήσιμο για κώδικα που δημιουργεί πρότυπα αναφορών ή επιστολότυπων με τοποθετημένο λογότυπο ή γραφικό, παράγει έγγραφα με αιωρούμενα πλαίσια κειμένου και επεξηγήσεις, ή εξετάζει σχήματα που ήδη υπάρχουν σε ένα ανεβασμένο έγγραφο — εξάγοντας τα bytes μιας ενσωματωμένης εικόνας, διαβάζοντας το όνομα του υπογράφοντα σε γραμμή υπογραφής, ή μετατοπίζοντας μια υπάρχουσα εικόνα.
Aspose.Words FOSS για .NET κυκλοφορεί υπό την άδεια MIT και στοχεύει το .NET Standard 2.0, ώστε να εκτελείται σε .NET Framework 4.6.2+ και .NET 6, 8 και 10 χωρίς εγγενείς εξαρτήσεις. Εγκαταστήστε το μέσω NuGet, ή δημιουργήστε το από τον πηγαίο κώδικα (δείτε το Γρήγορη Εκκίνηση παρακάτω). Είναι η ίδια μηχανή εγγράφων Aspose.Words που χρησιμοποιείται εμπορικά, όχι μια επανεγγραφή ή wrapper, έτσι οι κλάσεις Shape και στρώσης σχεδίασης που περιγράφονται εδώ είναι η παραγωγική API.
Βασικά Χαρακτηριστικά
Το Μοντέλο Αντικειμένων Shape και ShapeBase
Κάθε AutoShape, πλαίσιο κειμένου, ενσωματωμένη εικόνα, αντικείμενο OLE ή έλεγχος ActiveX που είναι αγκυροβολημένος σε ένα έγγραφο Word αντιπροσωπεύεται από την κλάση Shape — σφραγισμένη και χτισμένη πάνω στην αφηρημένη βασική κλάση ShapeBase. Και οι δύο μοιράζονται την ίδια επιφάνεια τοποθέτησης και μορφοποίησης: Shape.Left, Shape.Top, Shape.Width, Shape.Height, Shape.Rotation και Shape.ZOrder για γεωμετρία, συν μαζί με τις σημαίες Shape.IsGroup, Shape.IsImage, Shape.IsWordArt και Shape.IsInline που περιγράφουν τι είδους αντικείμενο περιέχει μια δεδομένη παρουσία. Η απαρίθμηση ShapeType καταγράφει τους συγκεκριμένους τύπους σχημάτων που αναγνωρίζει το Word — Rectangle, Ellipse, Line, Arrow, μια οικογένεια τύπων επεξηγήσεων και συνδέσμων, TextBox, Image και OleObject μεταξύ περισσότερων από ογδόντα τιμών — ώστε ο κώδικας που περπατά τα σχήματα του εγγράφου να μπορεί να διακλαδώνει με βάση το Shape.ShapeType για να αποφασίσει πώς να χειριστεί το καθένα. Πολλαπλά σχήματα μπορούν να συνδυαστούν σε ένα ενιαίο GroupShape, το ίδιο ένα υποκατηγορίας ShapeBase, που διατηρεί ένα σύνολο σχημάτων τοποθετημένα και κλιμακωμένα μαζί· το DocumentBuilder.InsertGroupShape(shapes) δημιουργεί ένα τέτοιο από έναν υπάρχοντα πίνακα σχημάτων.
Πλαίσια Κειμένου και WordArt
Οποιοδήποτε Shape μπορεί να μεταφέρει το δικό του κείμενο μέσω της κλάσης TextBox, που εκτίθεται ως Shape.TextBox. Οι ιδιότητες TextBox ελέγχουν πώς το κείμενο αυτό τοποθετείται μέσα στο σχήμα: TextBox.InternalMarginLeft, TextBox.InternalMarginRight, TextBox.InternalMarginTop και TextBox.InternalMarginBottom για padding, TextBox.FitShapeToText για να επιτρέπει στο σχήμα να μεγαλώνει με το περιεχόμενό του, LayoutFlow για την κατεύθυνση του κειμένου, TextBoxWrapMode για το πώς το κείμενο τυλίγεται μέσα στο κουτί, και TextBox.VerticalAnchor — μια τιμή TextBoxAnchor όπως Top, Middle, BottomCentered ή TopBaseline — για κατακόρυφη στοίχιση. Τα συνδεδεμένα πλαίσια κειμένου, όπου το υπερχείων κείμενο συνεχίζεται σε δεύτερο πλαίσιο, μοντελοποιούνται με TextBox.Next και TextBox.Previous. Μια σχετική αλλά διαφορετική κλάση, TextPath, ορίζει κείμενο στυλ WordArt που ακολουθεί το περίγραμμα ενός σχήματος αντί να βρίσκεται μέσα του, με ιδιότητες όπως TextPath.Text, TextPath.FontFamily, TextPath.Bold και TextPath.RotateLetters, συν μία απαρίθμηση TextPathAlignment με τιμές όπως Stretch, Center και LetterJustify.
Εικόνες και Ενσωματωμένες Εικόνες
Όταν ένα σχήμα περιέχει μια εικόνα, το Shape.HasImage είναι true και το Shape.ImageData επιστρέφει ένα αντικείμενο ImageData. Το ImageData εκθέτει τα ακατέργαστα bytes μέσω ImageData.ImageBytes, τη ανιχνευμένη μορφή μέσω ImageType (τιμές συμπεριλαμβανομένων Jpeg, Png, Bmp, Gif, Emf, Wmf, Pict, Eps, και WebP), τις διαστάσεις pixel και την ανάλυση μέσω ImageSize, και την περικοπή μέσω ImageData.CropTop, ImageData.CropBottom, ImageData.CropLeft και ImageData.CropRight. Οι ρυθμίσεις χρώματος — ImageData.Brightness, ImageData.Contrast, ImageData.GrayScale, ImageData.BiLevel και ImageData.ChromaKey — είναι ιδιότητες του ίδιου αντικειμένου, και τα ImageData.IsLink/ImageData.IsLinkOnly διακρίνουν μια ενσωματωμένη εικόνα από αυτή που αναφέρεται μόνο σε εξωτερική διαδρομή αρχείου. Το DocumentBuilder.InsertImage() έχει υπερφορτώσεις που δέχονται μια εικόνα, μια διαδρομή αρχείου, έναν πίνακα byte ή ένα stream, συμπεριλαμβανομένων παραλλαγών που ορίζουν επίσης ρητό πλάτος, ύψος, οριζόντια και κάθετη θέση, και WrapType κατά τη στιγμή της εισαγωγής.
Γέμισμα, Περίγραμμα και Εφέ Σχήματος
Κάθε Shape και GroupShape περιέχει ένα αντικείμενο Fill και ένα αντικείμενο Stroke για το εσωτερικό και το περίγραμμα του. Το Fill υποστηρίζει έξι είδη γεμίσματος μέσω FillType, με τιμές όπως Solid, Patterned, Gradient, Textured, Background και Picture, που ορίζονται με μεθόδους όπως Fill.Solid(color), Fill.OneColorGradient(style, variant, degree), Fill.TwoColorGradient(color1, color2, style, variant), Fill.Patterned(patternType) ή Fill.SetImage(fileName). Το Stroke ελέγχει το περίγραμμα: Stroke.Weight, DashStyle, JoinStyle, EndCap και Stroke.LineStyle (μια τιμή ShapeLineStyle) καλύπτουν τη γραμμή ίδια, ενώ τα Stroke.StartArrowType και Stroke.EndArrowType, σε συνδυασμό με τις απαριθμήσεις ArrowWidth και ArrowLength, διαμορφώνουν τις κεφαλές βέλους σε σχήματα συνδέσμου και γραμμής. Πέρα από το γέμισμα και το περίγραμμα, το Shape εκθέτει τέσσερα επιπλέον αντικείμενα εφέ — ShadowFormat, ReflectionFormat, GlowFormat και SoftEdgeFormat — το καθένα με τις δικές του ιδιότητες χρώματος και διαφάνειας για το αντίστοιχο οπτικό εφέ.
Τοποθέτηση και Αναδίπλωση Κειμένου
Τα σχήματα που αιωρούνται σχετικά με τη σελίδα ή την παράγραφο χρησιμοποιούν τα RelativeHorizontalPosition και RelativeVerticalPosition για να αγκυροβοληθούν — στο περιθώριο, τη σελίδα ή τη στήλη, για παράδειγμα — σε συνδυασμό με τα RelativeHorizontalSize και RelativeVerticalSize για αγκύρωση μεγέθους, συν HorizontalAlignment και VerticalAlignment για απλή τοποθέτηση αριστερά/κέντρο/δεξιά ή πάνω/μέση/κάτω. Ο τρόπος με τον οποίο το περιβάλλον κείμενο αντιδρά σε ένα σχήμα ελέγχεται από το WrapType, με τιμές όπως Inline, Square, Tight, TopBottom και None· για την αναδίπλωση Square και Tight, το WrapSide την περιορίζει περαιτέρω σε Left, Right, Both ή Largest. Το FlipOrientation κατοπτρίζει ένα σχήμα οριζόντια ή κάθετα χωρίς να αλλάζει τις συντεταγμένες του, και οι σημαίες Shape.AllowOverlap/Shape.BehindText ελέγχουν πώς ένα σχήμα αλληλεπιδρά με άλλο αιωρούμενο περιεχόμενο και με το επίπεδο κειμένου κάτω από αυτό.
Γραμμές Υπογραφής και Οριζόντιοι Χάρακες
Δύο ακόμη εξειδικευμένοι τύποι σχημάτων υπάρχουν στο ίδιο μοντέλο σχεδίασης. SignatureLine, που διαμορφώνεται κατά την εισαγωγή μέσω SignatureLineOptions (ιδιότητες περιλαμβάνουν SignatureLineOptions.Signer, SignatureLineOptions.SignerTitle, SignatureLineOptions.Email, SignatureLineOptions.Instructions, SignatureLineOptions.ShowDate και SignatureLineOptions.AllowComments), αποδίδει το οπτικό μπλοκ υπογραφής που εμφανίζεται σε εκτυπώσιμα έγγραφα και εκθέτει τα SignatureLine.IsSigned και SignatureLine.IsValid μόλις εφαρμοστεί μια υπογραφή — αυτό διαφέρει από την κρυπτογραφική επαλήθευση ψηφιακής υπογραφής που καλύπτεται αλλού, η οποία λειτουργεί με υπογεγραμμένα τμήματα εγγράφου αντί για το ίδιο το σχήμα. Το HorizontalRuleFormat καλύπτει την απλή γραμμή διαχωριστή που εισάγεται με DocumentBuilder.InsertHorizontalRule(), με τις ιδιότητες HorizontalRuleFormat.WidthPercent, HorizontalRuleFormat.Height, HorizontalRuleFormat.NoShade, HorizontalRuleFormat.Color και HorizontalRuleFormat.Alignment (η τελευταία μια τιμή HorizontalRuleAlignment).
Γρήγορη Εκκίνηση
Aspose.Words FOSS για .NET είναι διαθέσιμο μέσω NuGet:
dotnet add package Aspose.Words.FOSSΓια να δημιουργήσετε από πηγαίο κώδικα αντ’ αυτού:
git clone https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git
cd Aspose.Words-FOSS-for-.NET
dotnet build Aspose.Words.sln -c Release
Προσθέστε μια αναφορά έργου στο Aspose.Words.csproj από την εφαρμογή σας. Από εκεί, η εργασία με το επίπεδο σχεδίασης ακολουθεί το πρότυπο που χρησιμοποιείται σε όλη αυτή τη δημοσίευση: φορτώστε ή δημιουργήστε ένα Document, περιηγηθείτε στα σχήματά του με Document.GetChildNodes(NodeType.Shape, true) ή εισάγετε ένα νέο με μια μέθοδο DocumentBuilder όπως το DocumentBuilder.InsertImage(), DocumentBuilder.InsertGroupShape() ή DocumentBuilder.InsertHorizontalRule(), στη συνέχεια διαβάστε ή ορίστε ιδιότητες στο επιστρεφόμενο Shape — Shape.ImageData, Shape.TextBox, Shape.Fill, Shape.Stroke, Shape.WrapType και τα υπόλοιπα — πριν καλέσετε το Document.Save().
Υποστηριζόμενες Μορφές
| Μορφή | Επέκταση | Ανάγνωση | Εγγραφή |
|---|---|---|---|
| DOCX | .docx | ✓ | ✓ |
| DOCM | .docm | ✓ | ✓ |
| DOTX | .dotx | ✓ | ✓ |
| DOTM | .dotm | ✓ | ✓ |
| Flat OPC (όλες οι παραλλαγές) | (διάφορα) | ✓ | ✓ |
| Markdown | .md | ✓ | ✓ |
| Text | .txt | ✓ | ✓ |
Αυτή η έκδοση εξαιρεί σκόπιμα τη διάταξη και την απόδοση της σελίδας — χωρίς εξαγωγή σε PDF, XPS ή εικόνα, και χωρίς εκτύπωση — ώστε το Shape.Bounds ενός σχήματος και η διάταξη-εξαρτώμενη γεωμετρία να αντανακλούν τις τιμές που αποθηκεύονται στο έγγραφο αντί για μια υπολογισμένη διάταξη σελίδας. Οι πρόσθετοι μετατροπείς μορφών (DOC, RTF, ODT, HTML, EPUB, MHTML, MOBI, AZW3, και WordML) δεν διαβάζονται ούτε γράφονται· αυτά είναι τα ίδια υποσυστήματα που αφαιρέθηκαν από τη εμπορική βάση κώδικα για να παραμείνει αυτή η έκδοση δωρεάν.
Ανοιχτός Κώδικας & Άδειες
Aspose.Words FOSS για .NET κυκλοφορεί υπό την άδεια MIT, δωρεάν για εμπορική και προσωπική χρήση χωρίς δικαιώματα ή περιορισμούς διανομής. Ο πλήρης κώδικας είναι διαθέσιμος στο GitHub στο Aspose.Words FOSS για το αποθετήριο .NET.