Διαχείριση Θεμάτων Παρουσίασης σε Java

Εισαγωγή

Ένα θέμα παρουσίασης ορίζει τις ιδιότητες των σχεδιαστικών στοιχείων. Όταν επιλέγετε ένα θέμα παρουσίασης, ουσιαστικά επιλέγετε ένα συγκεκριμένο σύνολο οπτικών στοιχείων και τις ιδιότητές τους.

Στο PowerPoint, ένα θέμα αποτελείται από χρώματα, γραμματοσειρές, στυλ φόντου, και εφέ.

theme-constituents

Αλλαγή Χρώματος Θέματος

Ένα θέμα PowerPoint χρησιμοποιεί ένα συγκεκριμένο σύνολο χρωμάτων για διαφορετικά στοιχεία σε μια διαφάνεια. Εάν δεν σας αρέσουν τα χρώματα, τα αλλάζετε εφαρμόζοντας νέα χρώματα για το θέμα. Για να μπορείτε να επιλέξετε ένα νέο χρώμα θέματος, το Aspose.Slides παρέχει τιμές στο απαρίθμηση SchemeColor.

Presentation pres = new Presentation();
try {
    IAutoShape shape = pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 100, 100);

    shape.getFillFormat().setFillType(FillType.Solid);

    shape.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4);
} finally {
    if (pres != null) pres.dispose();
}

Αυτός ο κώδικας Java δείχνει πώς να αλλάξετε το χρώμα έμφασης για ένα θέμα:

IFillFormatEffectiveData fillEffective = shape.getFillFormat().getEffective();

Color effectiveColor = fillEffective.getSolidFillColor();

System.out.println(String.format("Color [A=%d, R=%d, G=%d, B=%d]", 
        effectiveColor.getAlpha(), effectiveColor.getRed(), effectiveColor.getGreen(), effectiveColor.getBlue()));

Μπορείτε να καθορίσετε την αποτελεσματική τιμή του προκύπτοντος χρώματος με αυτόν τον τρόπο:

IAutoShape otherShape = pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 10, 120, 100, 100);

otherShape.getFillFormat().setFillType(FillType.Solid);

otherShape.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4);

pres.getMasterTheme().getColorScheme().getAccent4().setColor(Color.RED);

Για να δείξουμε περαιτέρω τη λειτουργία αλλαγής χρώματος, δημιουργούμε ένα άλλο στοιχείο και του αναθέτουμε το χρώμα έμφασης (από την αρχική λειτουργία). Στη συνέχεια αλλάζουμε το χρώμα στο θέμα:

Το νέο χρώμα εφαρμόζεται αυτόματα και στα δύο στοιχεία.

Ορισμός Χρώματος Θέματος από Πρόσθετη Παλέτα

Όταν εφαρμόζετε μετασχηματισμούς φωτεινότητας στο κύριο χρώμα θέματος(1), δημιουργούνται χρώματα από την πρόσθετη παλέτα(2). Μπορείτε στη συνέχεια να ορίσετε και να λάβετε αυτά τα χρώματα θέματος.

additional-palette-colors

1 - Κύρια χρώματα θέματος
2 - Χρώματα από την πρόσθετη παλέτα.

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    // Έμφαση 4
    IShape shape1 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 50, 50);

    shape1.getFillFormat().setFillType(FillType.Solid);
    shape1.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4);

    // Έμφαση 4, πιο φωτεινό 80%
    IShape shape2 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 70, 50, 50);

    shape2.getFillFormat().setFillType(FillType.Solid);
    shape2.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4);
    shape2.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.MultiplyLuminance, 0.2f);
    shape2.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.AddLuminance, 0.8f);

    // Έμφαση 4, πιο φωτεινό 60%
    IShape shape3 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 130, 50, 50);

    shape3.getFillFormat().setFillType(FillType.Solid);
    shape3.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4);
    shape3.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.MultiplyLuminance, 0.4f);
    shape3.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.AddLuminance, 0.6f);

    // Έμφαση 4, πιο φωτεινό 40%
    IShape shape4 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 190, 50, 50);

    shape4.getFillFormat().setFillType(FillType.Solid);
    shape4.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4);
    shape4.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.MultiplyLuminance, 0.6f);
    shape4.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.AddLuminance, 0.4f);

    // Έμφαση 4, πιο σκοτεινό 25%
    IShape shape5 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 250, 50, 50);

    shape5.getFillFormat().setFillType(FillType.Solid);
    shape5.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4);
    shape5.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.MultiplyLuminance, 0.75f);

    // Έμφαση 4, πιο σκοτεινό 50%
    IShape shape6 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 310, 50, 50);

    shape6.getFillFormat().setFillType(FillType.Solid);
    shape6.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4);
    shape6.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.MultiplyLuminance, 0.5f);

    presentation.save(path + "example_accent4.pptx", SaveFormat.Pptx);
} finally {
    if (presentation != null) presentation.dispose();
}

Χαρτογράφηση SchemeColor σε Χρώματα IColorScheme

Όταν εργάζεστε με SchemeColor, μπορεί να παρατηρήσετε ότι περιέχει τις παρακάτω τιμές χρωμάτων θέματος:

Background1, Background2, Text1, and Text2.

Ωστόσο, το Presentation.getMasterTheme().getColorScheme() επιστρέφει IColorScheme, που εκθέτει τα αντίστοιχα χρώματα ως:

Dark1, Dark2, Light1, and Light2.

Αυτή η διαφορά είναι μόνο στην ονομασία. Οι τιμές αναφέρονται στα ίδια slots χρωμάτων θέματος και η αντιστοίχηση είναι σταθερή:

  • Text1 = Dark1
  • Background1 = Light1
  • Text2 = Dark2
  • Background2 = Light2

Είναι απλώς εναλλακτικές ονομασίες για τα ίδια χρώματα θέματος.

Αυτή η διαφορά ονοματολογίας προέρχεται από τη τεκμηρίωση του Microsoft Office. Οι παλαιότερες εκδόσεις του Office χρησιμοποιούσαν Dark 1, Light 1, Dark 2 και Light 2, ενώ οι νεότερες εκδόσεις UI εμφανίζουν τα ίδια slots ως Text 1, Background 1, Text 2 και Background 2.

Αλλαγή Γραμματοσειράς Θέματος

Για να μπορείτε να επιλέξετε γραμματοσειρές για θέματα και άλλους σκοπούς, το Aspose.Slides χρησιμοποιεί αυτά τα ειδικά αναγνωριστικά (παρόμοια με αυτά που χρησιμοποιούνται στο PowerPoint):

  • +mn-lt - Γραμματοσειρά Σώματος Λατινική (Μικρή Λατινική Γραμματοσειρά)
  • +mj-lt - Γραμματοσειρά Τίτλου Λατινική (Κύρια Λατινική Γραμματοσειρά)
  • +mn-ea - Γραμματοσειρά Σώματος Ανατολική Ασιατική (Μικρή Ανατολική Ασιατική Γραμματοσειρά)
  • +mj-ea - Γραμματοσειρά Σώματος Ανατολική Ασιατική (Κύρια Ανατολική Ασιατική Γραμματοσειρά)

Αυτός ο κώδικας Java δείχνει πώς να αναθέσετε τη Λατινική γραμματοσειρά σε ένα στοιχείο θέματος:

IAutoShape shape = pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 100, 100);

Paragraph paragraph = new Paragraph();

Portion portion = new Portion("Theme text format");

paragraph.getPortions().add(portion);

shape.getTextFrame().getParagraphs().add(paragraph);

portion.getPortionFormat().setLatinFont(new FontData("+mn-lt"));

Αυτός ο κώδικας Java δείχνει πώς να αλλάξετε τη γραμματοσειρά του θέματος παρουσίασης:

pres.getMasterTheme().getFontScheme().getMinor().setLatinFont(new FontData("Arial"));

Η γραμματοσειρά σε όλα τα πλαίσια κειμένου θα ενημερωθεί.

Αλλαγή Στυλ Φόντου Θέματος

Κατά προεπιλογή, η εφαρμογή PowerPoint παρέχει 12 προορισμένα φόντα, αλλά μόνο 3 από αυτά τα 12 φόντα αποθηκεύονται σε μια τυπική παρουσίαση.

todo:image_alt_text

Για παράδειγμα, αφού αποθηκεύσετε μια παρουσίαση στην εφαρμογή PowerPoint, μπορείτε να εκτελέσετε αυτόν τον κώδικα Java για να βρείτε τον αριθμό των προορισμένων φόντων στην παρουσίαση:

Presentation pres = new Presentation("pres.pptx");
try {
    int numberOfBackgroundFills = pres.getMasterTheme().getFormatScheme().getBackgroundFillStyles().size();

    System.out.println("Number of background fill styles for theme is " + numberOfBackgroundFills);
} finally {
    if (pres != null) pres.dispose();
}

Αυτός ο κώδικας Java δείχνει πώς να ορίσετε το φόντο για μια παρουσίαση:

pres.getMasters().get_Item(0).getBackground().setStyleIndex(2);

Οδηγός ευρετηρίου: 0 χρησιμοποιείται για χωρίς γέμισμα. Το ευρετήριο ξεκινά από 1.

Αλλαγή Εφέ Θέματος

Ένα θέμα PowerPoint συνήθως περιέχει 3 τιμές για κάθε σειρά στυλ. Αυτές οι σειρές συνδυάζονται σε αυτά τα 3 εφέ: ήπιος, μέτριος και έντονος. Για παράδειγμα, αυτό είναι το αποτέλεσμα όταν τα εφέ εφαρμόζονται σε ένα συγκεκριμένο σχήμα:

todo:image_alt_text

Χρησιμοποιώντας 3 ιδιότητες (FillStyles, LineStyles, EffectStyles) από την κλάση FormatScheme μπορείτε να αλλάξετε τα στοιχεία σε ένα θέμα (ακόμη πιο ευέλικτα από τις επιλογές του PowerPoint).

Presentation pres = new Presentation("Subtle_Moderate_Intense.pptx");
try {
    pres.getMasterTheme().getFormatScheme().getLineStyles().get_Item(0).getFillFormat().getSolidFillColor().setColor(Color.RED);

    pres.getMasterTheme().getFormatScheme().getFillStyles().get_Item(2).setFillType(FillType.Solid);

    pres.getMasterTheme().getFormatScheme().getFillStyles().get_Item(2).getSolidFillColor().setColor(Color.GREEN);

    pres.getMasterTheme().getFormatScheme().getEffectStyles().get_Item(2).getEffectFormat().getOuterShadowEffect().setDistance(10f);

    pres.save("Design_04_Subtle_Moderate_Intense-out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Οι προκύπτοντες αλλαγές στο χρώμα γεμίσματος, τύπο γεμίσματος, εφέ σκιάς κ.λπ.:

todo:image_alt_text

Συχνές Ερωτήσεις

Μπορώ να εφαρμόσω ένα θέμα σε μία μόνο διαφάνεια χωρίς να αλλάξω το master;

Ναι. Το Aspose.Slides υποστηρίζει επικάλυψη θέματος σε επίπεδο διαφάνειας, ώστε μπορείτε να εφαρμόσετε ένα τοπικό θέμα σε αυτή τη διαφάνεια ενώ το master θέμα παραμένει αμετάβλητο (μέσω του SlideThemeManager).

Ποιος είναι ο ασφαλέστερος τρόπος να μεταφέρετε ένα θέμα από μια παρουσίαση σε άλλη;

Κλωνοποιήστε διαφάνειες μαζί με το master τους στην προορισμένη παρουσίαση. Αυτό διατηρεί το αρχικό master, τις διατάξεις και το σχετικό θέμα ώστε η εμφάνιση να παραμείνει συνεπής.

Πώς μπορώ να δω τις “αποτέλεσματικές” τιμές μετά από όλες τις κληρονομίες και τις παρακάμψεις;

Χρησιμοποιήστε τις αποτελεσματικές προβολές για θέμα/χρώμα/γραμματοσειρά/εφέ. Αυτές επιστρέφουν τις επιλυμένες, τελικές ιδιότητες μετά την εφαρμογή του master συν οποιεσδήποτε τοπικές παρακάμψεις.