Πώς να προσθέσετε σχήματα σχεδίασης σε έγγραφα Word στο .NET
Αυτός ο οδηγός δείχνει πώς να προσθέσετε περιεχόμενο στο επίπεδο σχεδίασης ενός εγγράφου Word με Aspose.Words FOSS για .NET: εισαγωγή ενός AutoShape, προσθήκη εικόνας, τοποθέτησή του και περιτύλιξη κειμένου γύρω του, γέμισμα και στυλιζάρισμα, ομαδοποίηση πολλών σχημάτων και ορισμό υδατογραφήματος. Το Aspose.Words FOSS για .NET είναι διαθέσιμο μέσω NuGet ή με κατασκευή από πηγαίο κώδικα.
Οδηγός Βήμα-Βήμα
Βήμα 1: Λάβετε τη Βιβλιοθήκη
Κλωνοποιήστε το αποθετήριο και κάντε build Aspose.Words.sln σε διαμόρφωση Release, έπειτα προσθέστε μια αναφορά έργου προς Aspose.Words.csproj από το δικό σας έργο .NET, όπως περιγράφεται στο Οδηγός εγκατάστασης. Προσθέστε using Aspose.Words; and using Aspose.Words.Drawing; στην αρχή κάθε αρχείου που δουλεύει με σχήματα.
Βήμα 2: Προσθέστε ένα AutoShape
Δομήστε ένα σχήμα απευθείας με new Shape(doc, shapeType), όπου το shapeType είναι μια τιμή ShapeType όπως Rectangle, Ellipse, Star ή TextBox, έπειτα εισάγετέ το στο δέντρο με DocumentBuilder.InsertNode(node). Το Shape είναι η συγκεκριμένη, σφραγισμένη κλάση που δημιουργείτε και διαμορφώνετε· κληρονομεί από την αφηρημένη ShapeBase, η οποία ορίζει τη θέση (Left, Top, Width, Height, Rotation) και τα υπο-αντικείμενα μορφοποίησης (Fill, Stroke, ShadowFormat, Glow, Reflection) που μοιράζονται με το GroupShape.
Βήμα 3: Προσθήκη εικόνας
DocumentBuilder.InsertImage είναι η άμεση διαδρομή για εικόνες: οι υπερφορτώσεις δέχονται ένα Image, μια διαδρομή αρχείου, ένα Stream ή έναν ακατέργαστο πίνακα byte, με περαιτέρω υπερφορτώσεις που λαμβάνουν ρητές width/height ή πλήρη επιχειρήματα τοποθέτησης (horzPos, left, vertPos, top, width, height, wrapType). Η ιδιότητα ImageData του αποτελέσματος Shape περιέχει τα δεδομένα της εικόνας — καλέστε ImageData.SetImage(...) για να αντικαταστήσετε την εικόνα, και χρησιμοποιήστε CropTop/CropBottom/CropLeft/CropRight, Brightness, Contrast και GrayScale για βασικές προσαρμογές.
Βήμα 4: Τοποθέτηση του σχήματος και αναδίπλωση κειμένου
Ένα ενσωματωμένο σχήμα (το προεπιλεγμένο αποτέλεσμα του InsertImage) ρέει με το γύρω κείμενο και αγνοεί τις ιδιότητες τοποθέτησης μέχρι να αιωρείται — ελέγξτε το IsInline για να επιβεβαιώσετε σε ποια λειτουργία βρίσκεται ένα σχήμα. Για να αιωρήσετε ένα σχήμα, ορίστε το WrapType σε μια μη ενσωματωμένη τιμή και ορίστε το RelativeHorizontalPosition / RelativeVerticalPosition (κάθε ένα σχετικά με το Page, Margin, Column, ή μια παρόμοια άγκυρα) μαζί με τις μετατοπίσεις Left/Top. Το WrapSide ελέγχει την αναδίπλωση ανά πλευρά, και τα HorizontalAlignment / VerticalAlignment διαχειρίζονται απλή σχετική στοίχιση αντί για ρητές μετατοπίσεις.
Βήμα 5: Γέμισμα και στυλ του σχήματος
Shape.Fill (ένα αντικείμενο Fill) βάφει το εσωτερικό του σχήματος: Fill.Solid(color) για μονόχρωμο, Fill.OneColorGradient(...) / Fill.TwoColorGradient(...) για διαβαθμίσεις, Fill.Patterned(patternType) για μοτίβο, και Fill.SetImage(...) για γέμισμα εικόνας — το FillType αναφέρει ποιο είναι ενεργό αυτή τη στιγμή. Το περίγραμμα προέρχεται από την ιδιότητα Stroke. Για εφέ, τα ShadowFormat, Glow (GlowFormat), Reflection (ReflectionFormat) και SoftEdge (SoftEdgeFormat) εκθέτουν τις δικές τους ρυθμίσεις και μια μέθοδο Remove() που καθαρίζει το εφέ πίσω στο «none».
Βήμα 6: Ομαδοποίηση πολλαπλών σχημάτων
Συνδυάστε πολλά σχήματα σε μία μονάδα με το DocumentBuilder.InsertGroupShape(shapes), το οποίο επιστρέφει ένα GroupShape. Το GroupShape είναι από μόνο του ένα ShapeBase, έτσι έχει τα δικά του Fill, ShadowFormat, Glow και Reflection που εφαρμόζονται σε ολόκληρη την ομάδα· μετακινήστε ή αλλάξτε το μέγεθος του GroupShape αντί για τα μεμονωμένα παιδιά του ώστε ο μετασχηματισμός συντεταγμένων της ομάδας να παραμένει συνεπής. Για ένα σχήμα που περιέχει κείμενο, το Shape.TextBox (ένα αντικείμενο TextBox) ελέγχει το padding (InternalMarginLeft/Right/Top/Bottom), το αυτόματο μέγεθος (FitShapeToText), την κατεύθυνση του κειμένου (LayoutFlow), και την κάθετη στοίχιση (VerticalAnchor).
Βήμα 7: Προσθήκη υδατογραφήματος
Document.Watermark διαχειρίζεται ένα μοναδικό υδατογράφημα σε ολόκληρο το έγγραφο, ανεξάρτητο από οποιοδήποτε σχήμα έχετε εισάγει χειροκίνητα. Καλέστε το Watermark.SetText(text) ή το SetText(text, options) για υδατογράφημα κειμένου, ή το SetImage(...) για υδατογράφημα εικόνας· το Watermark.Remove() το διαγράφει, και το Watermark.Type αναφέρει το τρέχον WatermarkType (Text, Image ή None). Το TextWatermarkOptions ορίζει τα FontFamily, FontSize, Color και Layout (WatermarkLayout.Horizontal ή Diagonal); το ImageWatermarkOptions ορίζει τα Scale και IsWashout.
Κοινά προβλήματα και διορθώσεις
Setting Left/Top σε ένα σχήμα δεν έχει ορατό αποτέλεσμα. Το σχήμα παραμένει ενσωματωμένο (IsInline == true). Ορίστε WrapType σε μια κινητή τιμή και ορίστε RelativeHorizontalPosition/RelativeVerticalPosition ώστε οι ιδιότητες μετατόπισης να ισχύσουν.
Shape.ImageData πετάει εξαίρεση ή δεν επιστρέφει τίποτα. Το σχήμα δεν είναι σχήμα εικόνας. Ελέγξτε Shape.HasImage πριν από την ανάγνωση ImageData.
Τα παιδικά σχήματα μιας ομάδας δεν κινούνται μαζί. Τα παιδιά μετατοπίστηκαν ατομικά αντί μέσω της ομάδας. Μετακινήστε ή αλλάξτε το μέγεθος του GroupShape ο ίδιος, έτσι ώστε ο μετασχηματισμός συντεταγμένων του να εφαρμόζεται σε κάθε παιδί.
Το κείμενο υδατογράφησης δεν χρησιμοποιεί τη ζητούμενη γραμματοσειρά. Όχι TextWatermarkOptions μεταβιβάστηκε. Κλήση Watermark.SetText(text, options) με ένα TextWatermarkOptions instance του οποίου FontFamily είναι ορισμένο.
Συχνές Ερωτήσεις
Ποια είναι η διαφορά μεταξύ Shape και ShapeBase;
ShapeBase είναι η αφηρημένη βασική κλάση που μοιράζεται από Shape και GroupShape. Γράψτε κώδικα εναντίον του ShapeBase όταν πρέπει να χειρίζεται οποιοδήποτε από τα δύο ομοιόμορφα· χρησιμοποιήστε το Shape απευθείας για μέλη που αφορούν ένα μόνο αντικείμενο σχεδίασης, όπως το ImageData.
Πώς μπορώ να εισάγω μια εικόνα με συγκεκριμένο μέγεθος;
Χρησιμοποιήστε μια υπερφόρτωση του DocumentBuilder.InsertImage που δέχεται ρητά επιχειρήματα width και height, μαζί με την πηγή της εικόνας (ένα Image, διαδρομή αρχείου, Stream ή πίνακα byte).
Πώς μπορώ να κάνω ένα σχήμα να αιωρείται αντί να βρίσκεται ενσωματωμένο στο κείμενο;
Ορίστε το WrapType του σε μια μη ενσωματωμένη τιμή και ορίστε τα RelativeHorizontalPosition / RelativeVerticalPosition ώστε οι μετατοπίσεις Left/Top να ερμηνεύονται σε σχέση με τη σελίδα, το περιθώριο ή τη στήλη.
Μπορεί ένα έγγραφο να έχει ταυτόχρονα υδατογράφημα κειμένου και υδατογράφημα εικόνας;
Αριθ. Document.Watermark.Type αναφέρει τον τρέχον τύπο του υδατογραφήματος· η κλήση του SetText ή του SetImage ξανά αντικαθιστά ό,τι υδατογράφημα είχε οριστεί προηγουμένως.
Πώς μπορώ να αφαιρέσω σκιά ή αντανάκλαση από ένα σχήμα;
Καλέστε το Remove() στο αντίστοιχο αντικείμενο μορφοποίησης — Shape.ShadowFormat.Remove() ή Shape.Reflection.Remove().