Διαχείριση Θεμάτων Παρουσίασης σε JavaScript
Εισαγωγή
Ένα θέμα παρουσίασης ορίζει ένα συντονισμένο σύνολο χρωμάτων, γραμματοσειρών, στυλ παρασκηνίου, γεμίσματος, γραμμών και εφέ. Τα αντικείμενα που λαμβάνουν υπόψη το θέμα αναφέρονται σε αυτούς τους κοινόχρηστους ορισμούς αντί να αποθηκεύουν κάθε οπτική ιδιότητα ως σταθερή τιμή, ώστε μια αλλαγή θέματος να μπορεί να ενημερώσει πολλά αντικείμενα ταυτόχρονα.
Στο Aspose.Slides, το θέμα σε επίπεδο παρουσίασης είναι διαθέσιμο μέσω Presentation.getMasterTheme. Μια παρουσίαση μπορεί επίσης να περιέχει παρακάμψεις θέματος σε χαμηλότερα επίπεδα. Ένας master μπορεί να παρακάμψει το θέμα παρουσίασης μέσω MasterThemeManager.getOverrideTheme, ενώ μια διάταξη ή μια μεμονωμένη διαφάνεια μπορεί να παρακάμψει το κληρονομημένο θέμα μέσω BaseOverrideThemeManager.getOverrideTheme. Στην πράξη, το αποτελεσματικό θέμα για μια διαφάνεια καθορίζεται μέσα από αυτήν την αλυσίδα κληρονομικότητας: θέμα παρουσίασης, παράκαμψη master, παράκαμψη διάταξης και παράκαμψη διαφάνειας.

Οι παρακάτω ενότητες δείχνουν τις πιο συνηθισμένες ροές εργασίας με θέματα: επιθεώρηση θέματος, αλλαγή χρωμάτων και γραμματοσειρών, αντιγραφή ή εφαρμογή θέματος, ενημέρωση στυλ παρασκηνίου και εφέ, και ανάγνωση των αποτελεσματικών τιμών μετά την κληρονομικότητα και τις παρακάμψεις.
Επιθεώρηση Θέματος
Το αντικείμενο MasterTheme εκθέτει το χρωματοσχέδιο, το σχήμα γραμματοσειρών και το σχήμα μορφοποίησης του θέματος μέσω MasterTheme.getColorScheme, MasterTheme.getFontScheme και MasterTheme.getFormatScheme. Η επιθεώρηση αυτών των συλλογών πριν από την αλλαγή τους είναι ιδιαίτερα χρήσιμη όταν μια παρουσίαση προέρχεται από εξωτερική πηγή, επειδή ο αριθμός και το περιεχόμενο των εισόδων στυλ μπορεί να διαφέρει.
Το ακόλουθο παράδειγμα διαβάζει τις κύριες ιδιότητες του θέματος και αναφέρει πόσες στυλ παρασκηνίου, γεμίσματος, γραμμής και εφέ είναι αποθηκευμένες στο θέμα:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const presentation = new aspose.slides.Presentation("input.pptx");
try {
const theme = presentation.getMasterTheme();
console.log("Theme name: " + theme.getName());
console.log("Accent 1: " + theme.getColorScheme().getAccent1().getColor());
console.log("Major Latin font: " + theme.getFontScheme().getMajor().getLatinFont().getFontName());
console.log("Minor Latin font: " + theme.getFontScheme().getMinor().getLatinFont().getFontName());
console.log("Background fill styles: " + theme.getFormatScheme().getBackgroundFillStyles().size());
console.log("Fill styles: " + theme.getFormatScheme().getFillStyles().size());
console.log("Line styles: " + theme.getFormatScheme().getLineStyles().size());
console.log("Effect styles: " + theme.getFormatScheme().getEffectStyles().size());
} finally {
presentation.dispose();
}
Αν ένα αρχείο χρησιμοποιεί πολλαπλούς masters, μην υποθέτετε ότι κάθε διαφάνεια έχει το ίδιο αποτελεσματικό θέμα. Επιθεωρήστε τον master που σχετίζεται με τη διαφάνεια και χρησιμοποιήστε τη ροή εργασίας αποτελεσματικού θέματος που εμφανίζεται αργότερα σε αυτό το άρθρο όταν μπορεί να υπάρξουν παρακάμψεις διάταξης ή διαφάνειας.
Αλλαγή Χρωμάτων Θέματος
Τα γεμίσματα, οι γραμμές και το κείμενο που λαμβάνουν υπόψη το θέμα μπορούν να αναφέρονται σε ένα λογικό χρώμα από την απαρίθμηση SchemeColor. Όταν αλλάζετε την αντίστοιχη είσοδο στην ColorScheme, όλα τα αντικείμενα που εξακολουθούν να αναφέρονται σε αυτό το χρώμα θέματος λύνουν την τιμή τους έναντι της νέας τιμής. Τα αντικείμενα που χρησιμοποιούν άμεσο χρώμα RGB δεν αλλάζουν με την ενημέρωση του χρώματος θέματος.
Το ακόλουθο ολοκληρωμένο παράδειγμα δημιουργεί ένα σχήμα που χρησιμοποιεί Accent4, αλλάζει το χρώμα Accent4 του θέματος σε κόκκινο, αποθηκεύει την παρουσίαση, την ξαναφορτώνει και εκτυπώνει το αποτελεσματικό χρώμα γεμίσματος:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const shape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 10, 100, 100);
shape.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
shape.getFillFormat().getSolidFillColor().setSchemeColor(aspose.slides.SchemeColor.Accent4);
presentation.getMasterTheme().getColorScheme().getAccent4().setColor(java.getStaticFieldValue("java.awt.Color", "RED"));
presentation.save("theme-color.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
const savedPresentation = new aspose.slides.Presentation("theme-color.pptx");
try {
const savedSlide = savedPresentation.getSlides().get_Item(0);
const savedShape = savedSlide.getShapes().get_Item(0);
const effectiveFill = savedShape.getFillFormat().getEffective();
console.log("Effective fill color: " + effectiveFill.getSolidFillColor());
} finally {
savedPresentation.dispose();
}
Επειδή το ορθογώνιο παραμένει συνδεδεμένο με το Accent4, το ορατό του χρώμα γίνεται κόκκινο μετά την αλλαγή του θέματος. Εάν αντικαταστήσετε το χρώμα σχήματος με άμεσο χρώμα στο σχήμα, οι μετέπειτα αλλαγές του Accent4 δεν θα επηρεάσουν πλέον αυτό το γέμισμα.
Χρήση Χρωμάτων από την Πρόσθετη Παλέτα
Το PowerPoint παράγει ελαφρύτερες και σκούρτερες παραλλαγές από ένα χρώμα θέματος εφαρμόζοντας μετασχηματισμούς χρώματος. Το Aspose.Slides εκθέτει αυτούς τους μετασχηματισμούς μέσω της απαρίθμησης ColorTransformOperation.

1 - Κύρια χρώματα θέματος.
2 - Ελαφρύτερες και σκούρτερες παραλλαγές που δημιουργούνται από τα κύρια χρώματα θέματος.
Το ακόλουθο παράδειγμα δημιουργεί έξι ορθογώνια βασισμένα στο Accent4, εφαρμόζει μετασχηματισμούς φωτεινότητας σε πέντε από αυτά και αποθηκεύει το αποτέλεσμα:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const shape1 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 10, 50, 50);
shape1.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
shape1.getFillFormat().getSolidFillColor().setSchemeColor(aspose.slides.SchemeColor.Accent4);
const shape2 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 70, 50, 50);
shape2.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
shape2.getFillFormat().getSolidFillColor().setSchemeColor(aspose.slides.SchemeColor.Accent4);
shape2.getFillFormat().getSolidFillColor().getColorTransform().add(aspose.slides.ColorTransformOperation.MultiplyLuminance, java.newFloat(0.2));
shape2.getFillFormat().getSolidFillColor().getColorTransform().add(aspose.slides.ColorTransformOperation.AddLuminance, java.newFloat(0.8));
const shape3 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 130, 50, 50);
shape3.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
shape3.getFillFormat().getSolidFillColor().setSchemeColor(aspose.slides.SchemeColor.Accent4);
shape3.getFillFormat().getSolidFillColor().getColorTransform().add(aspose.slides.ColorTransformOperation.MultiplyLuminance, java.newFloat(0.4));
shape3.getFillFormat().getSolidFillColor().getColorTransform().add(aspose.slides.ColorTransformOperation.AddLuminance, java.newFloat(0.6));
const shape4 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 190, 50, 50);
shape4.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
shape4.getFillFormat().getSolidFillColor().setSchemeColor(aspose.slides.SchemeColor.Accent4);
shape4.getFillFormat().getSolidFillColor().getColorTransform().add(aspose.slides.ColorTransformOperation.MultiplyLuminance, java.newFloat(0.6));
shape4.getFillFormat().getSolidFillColor().getColorTransform().add(aspose.slides.ColorTransformOperation.AddLuminance, java.newFloat(0.4));
const shape5 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 250, 50, 50);
shape5.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
shape5.getFillFormat().getSolidFillColor().setSchemeColor(aspose.slides.SchemeColor.Accent4);
shape5.getFillFormat().getSolidFillColor().getColorTransform().add(aspose.slides.ColorTransformOperation.MultiplyLuminance, java.newFloat(0.75));
const shape6 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 310, 50, 50);
shape6.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
shape6.getFillFormat().getSolidFillColor().setSchemeColor(aspose.slides.SchemeColor.Accent4);
shape6.getFillFormat().getSolidFillColor().getColorTransform().add(aspose.slides.ColorTransformOperation.MultiplyLuminance, java.newFloat(0.5));
presentation.save("theme-color-palette.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Αυτές οι παραλλαγές παραμένουν βασισμένες στο χρώμα θέματος. Εάν το Accent4 αλλάξει αργότερα, τα μετασχηματισμένα χρώματα επανυπολογίζονται από τη νέα τιμή Accent4.
Χαρτογράφηση Τιμών SchemeColor σε Θέσεις ColorScheme
Η απαρίθμηση SchemeColor χρησιμοποιεί Text1, Background1, Text2 και Background2, ενώ η ColorScheme εκθέτει τις ίδιες θέσεις θέματος ως Dark1, Light1, Dark2 και Light2. Η χαρτογράφηση είναι σταθερή:
Text1=Dark1Background1=Light1Text2=Dark2Background2=Light2
Αυτά είναι εναλλακτικά ονόματα για τις ίδιες θέσεις θέματος· δεν είναι δυναμικά μετατρεπόμενες τιμές από τη μία μορφή στην άλλη.
Αλλαγή Γραμματοσειρών Θέματος
Ένα σχήμα γραμματοσειρών θέματος περιλαμβάνει ένα κύριο σύνολο γραμματοσειρών για τίτλους και ένα δευτερεύον σύνολο για το κυρίως κείμενο. Οι μέθοδοι FontScheme.getMajor και FontScheme.getMinor εκθέτουν αυτά τα σύνολα.
Οι αναγνωριστές γραμματοσειρών θέματος συμβατοί με το PowerPoint μπορούν να χρησιμοποιηθούν στη μορφοποίηση κειμένου:
+mn-lt- Γραμματοσειρά Σώματος Λατινική (Minor Latin Font)+mj-lt- Γραμματοσειρά Τίτλου Λατινική (Major Latin Font)+mn-ea- Γραμματοσειρά Σώματος Ανατολικής Ασίας (Minor East Asian Font)+mj-ea- Γραμματοσειρά Τίτλου Ανατολικής Ασίας (Major East Asian Font)
Το ακόλουθο παράδειγμα δημιουργεί έναν τίτλο που χρησιμοποιεί τη κύρια λατινική γραμματοσειρά θέματος και μια γραμμή σώματος που χρησιμοποιεί τη δευτερεύουσα λατινική γραμματοσειρά θέματος. Στη συνέχεια αλλάζει τις γραμματοσειρές θέματος και αποθηκεύει το αποτέλεσμα:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const heading = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 40, 40, 500, 60);
heading.getTextFrame().setText("Theme heading");
heading.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0).getPortionFormat().setLatinFont(new aspose.slides.FontData("+mj-lt"));
const body = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 40, 120, 500, 60);
body.getTextFrame().setText("Theme body text");
body.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0).getPortionFormat().setLatinFont(new aspose.slides.FontData("+mn-lt"));
presentation.getMasterTheme().getFontScheme().getMajor().setLatinFont(new aspose.slides.FontData("Aptos Display"));
presentation.getMasterTheme().getFontScheme().getMinor().setLatinFont(new aspose.slides.FontData("Arial"));
presentation.save("theme-fonts.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Ο τίτλος ακολουθεί τη μεγάλη γραμματοσειρά και το κείμενο σώματος ακολουθεί τη μικρή γραμματοσειρά. Το κείμενο που έχει ρητό όνομα γραμματοσειράς αντί για αναγνωριστικό θέματος δεν θα αλλάξει αυτόματα όταν το σχήμα γραμματοσειρών θέματος αλλάξει.
Οι συλλογές μεγάλης και μικρής γραμματοσειράς μπορούν επίσης να περιέχουν αντιστοιχίσεις γραμματοσειρών για μεμονωμένα συστήματα γραφής, όπως κυριλλικό, αραβικό, ιαπωνικό, γεωργιανό και θανά. Για επιθεώρηση, προσθήκη, αντικατάσταση ή αφαίρεση αυτών των αντιστοιχίσεων, δείτε Script-Specific Theme Fonts.
Tip
Για περισσότερες πληροφορίες σχετικά με τις γραμματοσειρές παρουσίασης, δείτε PowerPoint Fonts.Αντιγραφή ή Εφαρμογή Θέματος
Υπάρχουν δύο κοινές ροές εργασίας, και λύνουν διαφορετικά προβλήματα.
Διατήρηση Πρωταρχικού Θέματος Κατά τη Μεταφορά Διαφανειών
Εάν θέλετε να μετακινήσετε μια διαφάνεια σε άλλη παρουσίαση και να διατηρήσετε το αρχικό της σχέδιο, κλωνοποιήστε τον πηγαίο master στην προορισμένη παρουσίαση με MasterSlideCollection.addClone, στη συνέχεια κλωνοποιήστε τη διαφάνεια με SlideCollection.addClone και τον κλωνοποιημένο master. Αυτό μεταφέρει τον master, τις διατάξεις του και το σχετικό θέμα μαζί.
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const source = new aspose.slides.Presentation("source-theme.pptx");
try {
const target = new aspose.slides.Presentation("target.pptx");
try {
const sourceSlide = source.getSlides().get_Item(0);
const clonedMaster = target.getMasters().addClone(sourceSlide.getLayoutSlide().getMasterSlide());
target.getSlides().addClone(sourceSlide, clonedMaster, true);
target.save("theme-preserved.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
target.dispose();
}
} finally {
source.dispose();
}
Αυτή είναι η προτιμώμενη ροή εργασίας όταν η πηγή διαφάνειας πρέπει να φαίνεται ίδια στον προορισμό. Η απλή κλωνοποίηση περιεχομένου σε έναν άσχετο master προορισμού μπορεί να αλλάξει τα χρώματα, τις γραμματοσειρές, τα παρασκήνια και τα εφέ που καθορίζονται από το θέμα.
Εφαρμογή Τιμών Θέματος σε Υπάρχουσα Διαφάνεια
Εάν η διαφάνεια προορισμού πρέπει να παραμείνει στον τρέχοντα master και διάταξη, αρχικοποιήστε μια παράκαμψη σε επίπεδο διαφάνειας από το πηγαίο θέμα. Οι μέθοδοι OverrideTheme.initColorSchemeFrom, OverrideTheme.initFontSchemeFrom και OverrideTheme.initFormatSchemeFrom αντιγράφουν τα τρία κύρια συστατικά θέματος στην παράκαμψη.
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const source = new aspose.slides.Presentation("source-theme.pptx");
try {
const target = new aspose.slides.Presentation("target.pptx");
try {
const sourceTheme = source.getMasterTheme();
const targetSlide = target.getSlides().get_Item(0);
const overrideTheme = targetSlide.getThemeManager().getOverrideTheme();
overrideTheme.initColorSchemeFrom(sourceTheme.getColorScheme());
overrideTheme.initFontSchemeFrom(sourceTheme.getFontScheme());
overrideTheme.initFormatSchemeFrom(sourceTheme.getFormatScheme());
target.save("theme-applied-to-slide.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
target.dispose();
}
} finally {
source.dispose();
}
Αυτό αλλάζει το θέμα που χρησιμοποιείται από εκείνη τη διαφάνεια χωρίς να αλλάζει το θέμα που κληρονομεί η υπόλοιπη παρουσίαση. Για να αφαιρέσετε την τοπική παράκαμψη και να επιστρέψετε στις κληρονομημένες τιμές, καλέστε OverrideTheme.clear.
Εφαρμογή Παράκαμψης Θέματος σε Διάταξη
Μια παράκαμψη σε επίπεδο διάταξης εφαρμόζεται στις διαφάνειες που χρησιμοποιούν αυτή τη διάταξη, εκτός εάν μια συγκεκριμένη διαφάνεια έχει τη δική της παράκαμψη. Οι ίδιες μέθοδοι αρχικοποίησης μπορούν να χρησιμοποιηθούν μέσω του LayoutSlideThemeManager:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const source = new aspose.slides.Presentation("source-theme.pptx");
try {
const target = new aspose.slides.Presentation("target.pptx");
try {
const sourceTheme = source.getMasterTheme();
const targetSlide = target.getSlides().get_Item(0);
const overrideTheme = targetSlide.getLayoutSlide().getThemeManager().getOverrideTheme();
overrideTheme.initColorSchemeFrom(sourceTheme.getColorScheme());
overrideTheme.initFontSchemeFrom(sourceTheme.getFontScheme());
overrideTheme.initFormatSchemeFrom(sourceTheme.getFormatScheme());
target.save("theme-applied-to-layout.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
target.dispose();
}
} finally {
source.dispose();
}
Χρησιμοποιήστε ένα θέμα σε επίπεδο master ή παρουσίασης όταν πολλαπλές διατάξεις και διαφάνειες πρέπει να μοιράζονται το ίδιο βασικό σχέδιο, μια παράκαμψη διάταξης όταν μια οικογένεια διατάξεων χρειάζεται διαφορετικό στυλ, και μια παράκαμψη διαφάνειας μόνο για πραγματικές εξαιρέσεις. Οι υπερβολικές παρακάμψεις σε επίπεδο διαφάνειας καθιστούν τις μετέπειτα παγκόσμιες αλλαγές θέματος πιο δύσκολες στην πρόβλεψη.
Ενημέρωση Στυλ Παρασκηνίου Θέματος
Οι γέμιση παρασκηνίου του θέματος αποθηκεύονται στην FormatScheme.getBackgroundFillStyles. Το PowerPoint μπορεί να παρουσιάσει περισσότερες επιλογές παρασκηνίου στη διεπαφή χρήστη του από τον αριθμό των ορισμών γεμίσματος που αποθηκεύονται στην συλλογή, επειδή η διεπαφή μπορεί να συνδυάσει γεμίσματα θέματος με χρώματα θέματος και άλλες αναφορές στυλ.

Πριν χρησιμοποιήσετε ένα στυλ παρασκηνίου, επιθεωρήστε τη αποθηκευμένη συλλογή και το τρέχον Background.getStyleIndex. Ένας δείκτης στυλ 0 σημαίνει ότι δεν υπάρχει θεματικό γέμα· θετικές τιμές είναι αναφορές σε στυλ παρασκηνίου θέματος. Αυτό διαφέρει από την αρίθμηση της συλλογής JavaScript απευθείας, όπου ο δείκτης 0 σημαίνει το πρώτο αποθηκευμένο στοιχείο. Μην υποθέτετε ότι κάθε παρουσίαση περιέχει τον ίδιο αριθμό στυλ γεμίσματος παρασκηνίου.
Το ακόλουθο παράδειγμα αναφέρει τον διαθέσιμο αριθμό γεμισμάτων παρασκηνίου, εκχωρεί μια θεματική αναφορά παρασκηνίου στον πρώτο master και αποθηκεύει την παρουσίαση:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");
const presentation = new aspose.slides.Presentation("input.pptx");
try {
const backgroundStyles = presentation.getMasterTheme().getFormatScheme().getBackgroundFillStyles();
console.log("Background fill styles: " + backgroundStyles.size());
if (backgroundStyles.size() === 0) {
throw new Error("The presentation theme does not contain background fill styles.");
}
const masterSlide = presentation.getMasters().get_Item(0);
masterSlide.getBackground().setType(java.newByte(aspose.slides.BackgroundType.Themed));
masterSlide.getBackground().setStyleIndex(1);
presentation.save("theme-background.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Το εμφανιζόμενο αποτέλεσμα εξαρτάται από την καταχώριση θέματος που παραπέμπει ο master και από τυχόν παρακάμψεις παρασκηνίου στη διάταξη ή στο επίπεδο διαφάνειας. Εάν μια διαφάνεια χρησιμοποιεί το δικό της παρασκήνιο, η αλλαγή μόνο του παρασκηνίου του master ενδέχεται να μην επηρεάσει αυτή τη διαφάνεια. Χρησιμοποιήστε Background.getEffective όταν χρειάζεται να γνωρίζετε το τελικό παρασκήνιο μετά την κληρονομικότητα.
Warning
Μην θεωρείτε τον δείκτη στυλ ως δείκτη μηδενικής βάσης στη συλλογή. Επίσης, αποφύγετε την κωδικοποίηση ενός αριθμού στυλ από ένα αρχείο και την υπόθεση ότι θα έχει την ίδια εμφάνιση σε άλλο αρχείο· οι ορισμοί στυλ θέματος είναι συγκεκριμένοι για κάθε παρουσίαση.Tip
Για άμεση μορφοποίηση παρασκηνίου και κληρονομικότητα παρασκηνίου, δείτε Presentation Background.Ενημέρωση Εφέ Θέματος
Ένα σχήμα μορφοποίησης θέματος περιλαμβάνει ξεχωριστές συλλογές γεμίσματος, γραμμής και εφέ, που εκτίθενται μέσω των FormatScheme.getFillStyles, FormatScheme.getLineStyles, και FormatScheme.getEffectStyles. Τα τυπικά θέματα Office συχνά περιέχουν τρεις κύριες εισόδους στυλ που αντιστοιχούν οπτικά σε διακριτές, μέτριες και έντονες μορφοποιήσεις, αλλά ο κώδικας θα πρέπει να ελέγχει κάθε συλλογή αντί να υποθέτει σταθερό αριθμό.

Όταν προσπελάζετε αυτές τις συλλογές σε JavaScript, ο δείκτης της συλλογής είναι μηδενικής βάσης: ο δείκτης 0 είναι το πρώτο αποθηκευμένο στυλ και ο δείκτης 2 είναι το τρίτο. Οι δείκτες αναφοράς στυλ ενός σχήματος είναι ξεχωριστή έννοια, που εκτίθεται μέσω του ShapeStyle. Η τροποποίηση ενός στυλ θέματος επηρεάζει τα σχήματα που το αναφέρουν· σχήματα με άμεση μορφοποίηση ίσως παραμείνουν αμετάβλητα.
Το ακόλουθο παράδειγμα ελέγχει αν υπάρχουν οι απαιτούμενες εισόδους στυλ, αλλάζει το πρώτο στυλ γραμμής, αλλάζει το τρίτο στυλ γεμίσματος, ενεργοποιεί μια εξωτερική σκιά στο τρίτο στυλ εφέ και αποθηκεύει το αποτέλεσμα:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");
const presentation = new aspose.slides.Presentation("Subtle_Moderate_Intense.pptx");
try {
const formatScheme = presentation.getMasterTheme().getFormatScheme();
if (formatScheme.getLineStyles().size() < 1 || formatScheme.getFillStyles().size() < 3 || formatScheme.getEffectStyles().size() < 3) {
throw new Error("The theme does not contain the style entries required by this example.");
}
formatScheme.getLineStyles().get_Item(0).getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
formatScheme.getLineStyles().get_Item(0).getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "RED"));
formatScheme.getFillStyles().get_Item(2).setFillType(java.newByte(aspose.slides.FillType.Solid));
formatScheme.getFillStyles().get_Item(2).getSolidFillColor().setColor(java.newInstanceSync("java.awt.Color", 34, 139, 34));
const effectFormat = formatScheme.getEffectStyles().get_Item(2).getEffectFormat();
effectFormat.enableOuterShadowEffect();
effectFormat.getOuterShadowEffect().setDistance(10);
presentation.save("theme-effects.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Για σχήματα που αναφέρονται σε αυτές τις θέσεις, το πρώτο στυλ γραμμής θέματος γίνεται κόκκινο, το τρίτο στυλ γεμίσματος γίνεται αδιάσπαστο σμαραγδένιο πράσινο, και το τρίτο στυλ εφέ αποκτά εξωτερική σκιά με απόσταση 10 μονάδων. Το ακριβές οπτικό αποτέλεσμα εξακολουθεί να εξαρτάται από το ποιο στυλ αναφέρει κάθε σχήμα και αν η άμεση μορφοποίηση παρακάμπτει το θέμα.

Ανάγνωση Αποτελεσματικών Τιμών Θέματος
Τα ακατέργαστα αντικείμενα θέματος σας λένε τι ορίζεται σε ένα συγκεκριμένο επίπεδο. Οι αποτελεσματικές τιμές σας λένε τι μια διαφάνεια ή σχήμα χρησιμοποιεί πραγματικά μετά την κληρονομικότητα και τις τοπικές παρακάμψεις. Για μια διαφάνεια, καλέστε BaseOverrideThemeManager.createThemeEffective. Για ένα παρασκήνιο, χρησιμοποιήστε Background.getEffective, και για ένα γέμισμα, χρησιμοποιήστε FillFormat.getEffective.
Το ακόλουθο παράδειγμα διαβάζει το αποτελεσματικό θέμα, το παρασκήνιο και το πρώτο γέμισμα σχήματος από μια διαφάνεια:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const presentation = new aspose.slides.Presentation("input.pptx");
try {
const slide = presentation.getSlides().get_Item(0);
const effectiveTheme = slide.getThemeManager().createThemeEffective();
const effectiveBackground = slide.getBackground().getEffective();
console.log("Effective major Latin font: " + effectiveTheme.getFontScheme().getMajor().getLatinFont().getFontName());
console.log("Effective minor Latin font: " + effectiveTheme.getFontScheme().getMinor().getLatinFont().getFontName());
console.log("Effective background fill type: " + effectiveBackground.getFillFormat().getFillType());
if (slide.getShapes().size() > 0) {
const effectiveFill = slide.getShapes().get_Item(0).getFillFormat().getEffective();
console.log("First shape effective fill type: " + effectiveFill.getFillType());
if (effectiveFill.getFillType() === aspose.slides.FillType.Solid) {
console.log("First shape effective fill color: " + effectiveFill.getSolidFillColor());
}
}
} finally {
presentation.dispose();
}
Χρησιμοποιήστε αποτελεσματικά δεδομένα για διαγνωστικές απεικονίσεις, επαλήθευση και συγκρίσεις. Εάν επιθεωρήσετε μόνο το Presentation.getMasterTheme, μπορεί να χάσετε μια παράκαμψη master, διάταξης, διαφάνειας ή σχήματος που αλλάζει την τελική εμφάνιση.
ΣΥΧΝΕΣ ΕΡΩΤΗΣΕΙΣ
Μπορώ να εφαρμόσω ένα θέμα σε μία μόνο διαφάνεια χωρίς να αλλάξω τον master;
Ναι. Χρησιμοποιήστε το SlideThemeManager της διαφάνειας και αρχικοποιήστε το θέμα παράκαμψης της. Η αλλαγή παραμένει τοπική σε αυτή τη διαφάνεια· οι άλλες διαφάνειες συνεχίζουν να κληρονομούν τα υπάρχοντα θέματα τους.
Ποιος είναι ο πιο ασφαλής τρόπος μεταφοράς ενός θέματος από μια παρουσίαση σε άλλη;
Κατά τη μετακίνηση μιας διαφάνειας και διατήρησης της αρχικής της εμφάνισης, κλωνοποιήστε τον πηγαίο master στον προορισμό και κλωνοποιήστε τη διαφάνεια με αυτόν τον master χρησιμοποιώντας τα MasterSlideCollection.addClone και SlideCollection.addClone. Αυτό κρατάει μαζί το master, τις διατάξεις και το θέμα.
Πώς μπορώ να δω τις αποτελεσματικές τιμές μετά την κληρονομικότητα και τις παρακάμψεις;
Χρησιμοποιήστε BaseOverrideThemeManager.createThemeEffective για ένα θέμα διαφάνειας ή διάταξης και τις αντίστοιχες μεθόδους αποτελεσματικών δεδομένων για αντικείμενα μορφοποίησης όπως Background.getEffective και FillFormat.getEffective. Αυτά τα API επιστρέφουν τις επιλυμένες τιμές μετά την εφαρμογή της κληρονομικότητας και των παρακάμψεων.