Διαχείριση slide master παρουσίασης σε Python μέσω Java

Επισκόπηση

Ένας slide master ορίζει κοινές ρυθμίσεις σχεδίασης για μια ομάδα διαφανειών. Μπορεί να περιλαμβάνει κοινά σχήματα, λογότυπα, φόντο, στυλ κειμένου, ρυθμίσεις θέματος και ρυθμίσεις υποσέλιδου. Στο PowerPoint, η επεξεργασία ενός slide master είναι ο συνηθισμένος τρόπος για να διατηρείται μια παρουσίαση συνεπής χωρίς την επανάληψη της ίδιας μορφοποίησης σε κάθε διαφάνεια.

Το Aspose.Slides for Python via Java υποστηρίζει το ίδιο μοντέλο. Μια παρουσίαση μπορεί να περιέχει μία ή περισσότερες master slides, και κάθε master slide μπορεί να περιέχει αρκετές layout slides. Οι κανονικές διαφάνειες δεν αναφέρονται συνήθως απευθείας σε μια master slide. Αντίθετα, μια κανονική διαφάνεια χρησιμοποιεί μια layout slide, η οποία ανήκει σε μια master slide.

Η ιεραρχία είναι:

  1. Slide master - ορίζει το κοινό σχεδιασμό και το θέμα.
  2. Layout slide - ορίζει μια συγκεκριμένη διάταξη θέσεων κράτησης και μορφοποίησης επιπέδου διάταξης.
  3. Normal slide - περιέχει το πραγματικό περιεχόμενο της παρουσίασης και χρησιμοποιεί μία layout slide.

Η ιεραρχία των master slides, layout slides και normal slides

Στο Aspose.Slides, ένα slide master αντιπροσωπεύεται από την κλάση MasterSlide. Όλες οι master slides σε μια παρουσίαση είναι διαθέσιμες μέσω της συλλογής Presentation.getMasters, η οποία αντιπροσωπεύεται από την MasterSlideCollection.

Πρόσβαση σε Slide Masters

Στο PowerPoint, μπορείτε να ανοίξετε την προβολή Slide Master από View > Slide Master.

Η εντολή Slide Master στην καρτέλα View του PowerPoint

Στο Aspose.Slides, χρησιμοποιήστε τη συλλογή Presentation.getMasters για να αποκτήσετε πρόσβαση στις master slides:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation

presentation = Presentation("presentation.pptx")
try:
    first_master_slide = presentation.getMasters().get_Item(0)
    master_slide_count = presentation.getMasters().size()
    first_master_layout_slide_count = first_master_slide.getLayoutSlides().size()

    print(f"Master slides: {master_slide_count}")
    print(f"Layouts in the first master: {first_master_layout_slide_count}")
finally:
    presentation.dispose()

Μπορείτε επίσης να λάβετε τη master slide που χρησιμοποιείται από μια normal slide μέσω της διάταξής της:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation

presentation = Presentation("presentation.pptx")
try:
    slide = presentation.getSlides().get_Item(0)
    layout_slide = slide.getLayoutSlide()
    master_slide = layout_slide.getMasterSlide()
    master_slide_name = master_slide.getName()

    print(master_slide_name)
finally:
    presentation.dispose()

Τι Περιέχει ένα Slide Master

Ένα master slide είναι ένα αντικείμενο παρόμοιο με διαφάνεια. Κληρονομεί από το BaseSlide, έτσι εκθέτει πολλές από τις ίδιες ιδιότητες διαφάνειας που χρησιμοποιούνται από κανονικές και layout διαφάνειες. Τα ειδικά μέλη του master αναφέρονται στη σελίδα API MasterSlide.

Τα πιο συχνά χρησιμοποιούμενα μέλη του master slide περιλαμβάνουν:

Μέλος Σκοπός
getBackground Ορίζει το φόντο της διαφάνειας σε επίπεδο master.
getShapes Αποθηκεύει τα σχήματα που τοποθετούνται στο master, όπως λογότυπα, πλαίσια εικόνων και κοινό κείμενο.
getLayoutSlides Αποθηκεύει τις layout slides που ανήκουν στο master.
getThemeManager Παρέχει πρόσβαση στα API του θέματος του master.
getHeaderFooterManager Διαχειρίζεται τα κεφαλίδες, υποσέλιδα, ημερομηνίες και αριθμούς διαφανειών για το master και τις θυγατρικές του διατάξεις.
getDependingSlides Επιστρέφει τις κανονικές διαφάνειες που εξαρτώνται από το master μέσω των διατάξεών τους.

Προσθήκη Εικόνας σε Slide Master

Όταν προσθέτετε μια εικόνα σε μια master slide, εμφανίζεται στις διαφάνειες που χρησιμοποιούν διατάξεις από αυτό το master. Αυτό είναι χρήσιμο για λογότυπα, υδατογραφίες, διακοσμητικές ταινίες και άλλα επαναλαμβανόμενα οπτικά στοιχεία.

Το παρακάτω παράδειγμα προσθέτει ένα λογότυπο στην πρώτη master slide:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Images, Presentation, SaveFormat, ShapeType

presentation = Presentation("presentation.pptx")
try:
    master_slide = presentation.getMasters().get_Item(0)
    logo = Images.fromFile("logo.png")
    try:
        logo_image = presentation.getImages().addImage(logo)
        master_slide.getShapes().addPictureFrame(ShapeType.Rectangle, 20, 20, 80, 80, logo_image)
    finally:
        logo.dispose()

    presentation.save("presentation-with-logo.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Για περισσότερες πληροφορίες σχετικά με τα πλαίσια εικόνων, δείτε Picture Frame.

Έλεγχος Ορατότητας Γραφικών Master

Χρησιμοποιήστε το BaseSlide.setShowMasterShapes για να κρύψετε κληρονομικά γραφικά master, όπως λογότυπα ή διακοσμητικά σχήματα, χωρίς να τα διαγράψετε από το master. Περάστε False στο Slide.setShowMasterShapes στη διαφάνεια που πρέπει να παραλείψει αυτά τα γραφικά και κρατήστε το True στις διαφάνειες που πρέπει να τα εμφανίσει.

Το παρακάτω αυτόνομα παράδειγμα δημιουργεί μια μπλε διακοσμητική ταινία σε ένα master και δύο διαφάνειες που χρησιμοποιούν την ίδια κενή διάταξη. Η ταινία είναι ορατή στην πρώτη διαφάνεια και κρυφή στη δεύτερη. Δεν απαιτείται εισαγωγική παρουσίαση ή εικόνα.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import FillType, Presentation, SaveFormat, ShapeType, SlideLayoutType

Color = jpype.JClass("java.awt.Color")

presentation = Presentation()
try:
    master_slide = presentation.getMasters().get_Item(0)
    layout_slide = master_slide.getLayoutSlides().getByType(SlideLayoutType.Blank)
    layout_slide.setShowMasterShapes(True)

    slide_height = jpype.JFloat(presentation.getSlideSize().getSize().getHeight())
    band = master_slide.getShapes().addAutoShape(ShapeType.Rectangle, 0, 0, 60, slide_height)
    band_color = Color(70, 130, 180)
    band.getFillFormat().setFillType(FillType.Solid)
    band.getFillFormat().getSolidFillColor().setColor(band_color)
    band.getLineFormat().getFillFormat().setFillType(FillType.NoFill)

    visible_slide = presentation.getSlides().get_Item(0)
    visible_slide.setLayoutSlide(layout_slide)
    visible_slide.getShapes().clear()

    hidden_slide = presentation.getSlides().addEmptySlide(layout_slide)

    visible_slide.setShowMasterShapes(True)
    hidden_slide.setShowMasterShapes(False)

    presentation.save("master-graphics.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Το παράδειγμα χρησιμοποιεί τη διάταξη Blank που παρέχεται με μια νέα παρουσίαση και αφαιρεί τις δικές της θέσεις κράτησης της αρχικής διαφάνειας.

Επιλογή Εύρους Ρύθμισης

Μια normal slide χρησιμοποιεί το master της μέσω του Slide.getLayoutSlide και του LayoutSlide.getMasterSlide. Ο ορισμός της ιδιότητας σε μια μεμονωμένη διαφάνεια επηρεάζει μόνο αυτή τη διαφάνεια. Περνώντας False στο LayoutSlide.setShowMasterShapes κρύβει τα γραφικά master για διαφάνειες που χρησιμοποιούν αυτή τη κοινή διάταξη, ακόμη κι αν η δική τους ρύθμιση είναι True. Για να κρύψετε γραφικά μόνο σε μία διαφάνεια, αλλάξτε την ιδιότητα της διαφάνειας και αφήστε τη κοινή διάταξη αμετάβλητη.

Η ρύθμιση δεν υποστηρίζεται ως έλεγχος ορατότητας στη ίδια τη master slide. Σε μια master, το getShowMasterShapes πάντα επιστρέφει False και περνώντας True στο setShowMasterShapes προκαλεί εξαίρεση. Εφαρμόστε τη σε μια normal slide ή σε μια διάταξη αντί αυτού.

Διαχωρισμός Γραφικών από το Φόντο

Λειτουργία Αποτέλεσμα
Απόκρυψη γραφικών master Ελέγχει την ορατότητα των κληρονομικών σχήματων master χωρίς να τα διαγράψει ή να αλλάξει τα δικά σχήματα της διαφάνειας.
Αλλαγή γεμίσματος φόντου διαφάνειας Αλλάζει το χρώμα, το gradient ή την εικόνα του φόντου. Τα γραφικά master είναι ξεχωριστά σχήματα και μπορούν να παραμείνουν ορατά πάνω από αυτό το φόντο. Δείτε το Presentation Background.
Διαγραφή σχήματος από το master Αφαιρεί το κοινό σχήμα-προέλευση, έτσι δεν είναι πλέον διαθέσιμο σε καμία διαφάνεια που χρησιμοποιεί αυτό το master.

Εργασία με Θέσεις Κράτησης

Οι θέσεις κράτησης ορίζονται συνήθως σε layout slides. Η master slide παρέχει το κοινό στυλ και θέμα που κληρονομούν αυτές οι διατάξεις, ενώ κάθε διάταξη αποφασίζει ποιες θέσεις κράτησης είναι διαθέσιμες και πού τοποθετούνται.

Στο PowerPoint, οι εντολές θέσεων κράτησης είναι διαθέσιμες στην προβολή Slide Master.

Η εντολή Insert Placeholder στην προβολή Slide Master του PowerPoint

Για να προσθέσετε νέες θέσεις κράτησης με το Aspose.Slides, εργαστείτε με την layout slide που ανήκει στο master:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, SlideLayoutType

presentation = Presentation("presentation.pptx")
try:
    master_slide = presentation.getMasters().get_Item(0)
    blank_layout_slide = master_slide.getLayoutSlides().getByType(SlideLayoutType.Blank)

    if blank_layout_slide is None:
        blank_layout_slide = master_slide.getLayoutSlides().add(SlideLayoutType.Blank, "Blank")

    blank_layout_slide.getPlaceholderManager().addTextPlaceholder(60, 120, 600, 80)

    presentation.getSlides().addEmptySlide(blank_layout_slide)
    presentation.save("presentation-with-placeholder.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Μπορείτε επίσης να μορφοποιήσετε σχήματα θέσεων κράτησης που ήδη υπάρχουν σε μια master slide. Το παρακάτω παράδειγμα εντοπίζει τη θέση κράτησης τίτλου και εφαρμόζει ένα γραμμικό gradient fill:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import AutoShape, FillType, GradientShape, PlaceholderType, Presentation, SaveFormat

Color = jpype.JClass("java.awt.Color")

presentation = Presentation("presentation.pptx")
try:
    master_slide = presentation.getMasters().get_Item(0)
    title_placeholder = None

    for shape in master_slide.getShapes():
        if isinstance(shape, AutoShape):
            if shape.getPlaceholder() is not None and shape.getPlaceholder().getType() == PlaceholderType.Title:
                title_placeholder = shape
                break

    if title_placeholder is not None:
        red_gradient_color = Color(255, 0, 0)
        purple_gradient_color = Color(128, 0, 128)

        title_placeholder.getFillFormat().setFillType(FillType.Gradient)
        title_placeholder.getFillFormat().getGradientFormat().setGradientShape(GradientShape.Linear)
        title_placeholder.getFillFormat().getGradientFormat().getGradientStops().add(jpype.JFloat(0.0), red_gradient_color)
        title_placeholder.getFillFormat().getGradientFormat().getGradientStops().add(jpype.JFloat(1.0), purple_gradient_color)

    presentation.save("presentation-title-style.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

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

Για περισσότερες επιλογές μορφοποίησης θέσεων κράτησης και κειμένου, δείτε Set Prompt Text in Placeholder και Text Formatting.

Αλλαγή Φόντου Slide Master

Το φόντο ενός master κληρονομείται από τις διατάξεις και τις διαφάνειες που δεν το αντικαθιστούν. Το παρακάτω παράδειγμα ορίζει ένα σταθερό χρώμα φόντου για την πρώτη master slide:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import BackgroundType, FillType, Presentation, SaveFormat

Color = jpype.JClass("java.awt.Color")

presentation = Presentation("presentation.pptx")
try:
    master_slide = presentation.getMasters().get_Item(0)
    master_background_color = Color.GREEN

    master_slide.getBackground().setType(BackgroundType.OwnBackground)
    master_slide.getBackground().getFillFormat().setFillType(FillType.Solid)
    master_slide.getBackground().getFillFormat().getSolidFillColor().setColor(master_background_color)

    presentation.save("presentation-master-background.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Για συναφή θέματα, δείτε Presentation Background και Presentation Theme.

Κλωνοποίηση Slide Master σε Άλλη Παρουσίαση

Χρησιμοποιήστε το MasterSlideCollection.addClone για να αντιγράψετε μια master slide σε άλλη παρουσίαση. Η αντιγραμμένη master μπορεί στη συνέχεια να χρησιμοποιηθεί από διατάξεις και διαφάνειες στην προορισμένη παρουσίαση.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat

source_presentation = Presentation("source.pptx")
destination_presentation = Presentation("destination.pptx")
try:
    source_master_slide = source_presentation.getMasters().get_Item(0)
    cloned_master_slide = destination_presentation.getMasters().addClone(source_master_slide)

    destination_presentation.save("destination-with-master.pptx", SaveFormat.Pptx)
finally:
    source_presentation.dispose()
    destination_presentation.dispose()

Αν χρειάζεστε κλωνοποίηση κανονικών διαφανειών μαζί με το master τους, δείτε Clone Slides.

Προσθήκη Πολλαπλών Slide Masters

Μια παρουσίαση μπορεί να περιέχει πολλαπλές master slides. Αυτό είναι χρήσιμο όταν διαφορετικές ενότητες απαιτούν διαφορετική επωνυμία, δομή σελίδας ή ρυθμίσεις θέματος.

Εντολές PowerPoint για εισαγωγή και διαχείριση master slides

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

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import BackgroundType, FillType, Presentation, SaveFormat, SlideLayoutType

Color = jpype.JClass("java.awt.Color")

presentation = Presentation("presentation.pptx")
try:
    default_master_slide = presentation.getMasters().get_Item(0)
    section_master_slide = presentation.getMasters().addClone(default_master_slide)
    section_master_background_color = Color.LIGHT_GRAY

    section_master_slide.getBackground().setType(BackgroundType.OwnBackground)
    section_master_slide.getBackground().getFillFormat().setFillType(FillType.Solid)
    section_master_slide.getBackground().getFillFormat().getSolidFillColor().setColor(section_master_background_color)

    source_blank_layout = default_master_slide.getLayoutSlides().getByType(SlideLayoutType.Blank)
    if source_blank_layout is None:
        source_blank_layout = default_master_slide.getLayoutSlides().get_Item(0)

    section_blank_layout = section_master_slide.getLayoutSlides().addClone(source_blank_layout)

    presentation.getSlides().addEmptySlide(section_blank_layout)
    presentation.save("presentation-with-multiple-masters.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Σύγκριση Slide Masters

Οι master slides μπορούν να συγκριθούν με τη μέθοδο equals που κληρονομείται από το BaseSlide. Η σύγκριση ελέγχει τη δομή και το στατικό περιεχόμενο, όπως σχήματα, κείμενο, μορφοποίηση, κινούμενα σχέδια και άλλες ρυθμίσεις διαφάνειας. Δεν συγκρίνει μοναδικά αναγνωριστικά, όπως IDs διαφανειών, ή δυναμικές τιμές θέσεων κράτησης, όπως η τρέχουσα ημερομηνία.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation

first_presentation = Presentation("first.pptx")
second_presentation = Presentation("second.pptx")
try:
    first_presentation_master_count = first_presentation.getMasters().size()
    second_presentation_master_count = second_presentation.getMasters().size()

    for first_master_index in range(first_presentation_master_count):
        for second_master_index in range(second_presentation_master_count):
            first_master_slide = first_presentation.getMasters().get_Item(first_master_index)
            second_master_slide = second_presentation.getMasters().get_Item(second_master_index)
            are_master_slides_equal = first_master_slide.equals(second_master_slide)

            if are_master_slides_equal:
                print(f"first.pptx master #{first_master_index} equals second.pptx master #{second_master_index}")
finally:
    first_presentation.dispose()
    second_presentation.dispose()

Για περισσότερες πληροφορίες, δείτε Compare Presentation Slides.

Ορισμός Προβολής Slide Master ως Προεπιλεγμένη Προβολή

Χρησιμοποιήστε τη μέθοδο setLastView στο ViewProperties για να ελέγξετε την προβολή που ανοίγει πρώτο το PowerPoint. Το παρακάτω παράδειγμα ανοίγει την παρουσίαση σε προβολή Slide Master:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, ViewType

presentation = Presentation("presentation.pptx")
try:
    presentation.getViewProperties().setLastView(ViewType.SlideMasterView)
    presentation.save("presentation-master-view.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Για περισσότερες ρυθμίσεις προβολής, δείτε Save Presentation.

Αφαίρεση Μη Χρησιμοποιούμενων Master Slides

Οι παρουσιάσεις μερικές φορές περιέχουν master slides που δεν χρησιμοποιούνται πλέον από καμία normal slide. Η αφαίρεση των μη χρησιμοποιούμενων masters μπορεί να μειώσει το μέγεθος του αρχείου και να απλοποιήσει τη συντήρηση του προτύπου.

Χρησιμοποιήστε το removeUnused για να αφαιρέσετε τους μη χρησιμοποιούμενους masters από τη συλλογή Presentation.getMasters:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation("presentation.pptx")
try:
    presentation.getMasters().removeUnused(True)
    presentation.save("presentation-clean.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Μπορείτε επίσης να χρησιμοποιήσετε τη μέθοδο low-code Compress.removeUnusedMasterSlides:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Compress, Presentation, SaveFormat

presentation = Presentation("presentation.pptx")
try:
    Compress.removeUnusedMasterSlides(presentation)
    presentation.save("presentation-clean.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

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

Ποια είναι η διαφορά μεταξύ slide master και layout slide;

Ένα slide master ορίζει κοινές ρυθμίσεις σχεδίασης όπως θέμα, φόντο, κοινά σχήματα και στυλ κειμένου. Μια layout slide ανήκει σε μια master slide και ορίζει μια συγκεκριμένη διάταξη θέσεων κράτησης. Μια normal slide χρησιμοποιεί μια layout slide, έτσι κληρονομεί τόσο από τη διάταξη όσο και από το master.

Μπορεί μια παρουσίαση να περιέχει πολλά slide masters;

Ναι. Μια παρουσίαση μπορεί να περιέχει πολλά slide masters. Χρησιμοποιήστε πολλαπλά masters όταν διαφορετικές ενότητες χρειάζονται διαφορετικά οπτικά συστήματα ή επωνυμία.

Πρέπει να προσθέσω θέσεις κράτησης σε master slide ή σε layout slide;

Στις περισσότερες περιπτώσεις, προσθέστε θέσεις κράτησης σε layout slides. Τοποθετήστε κοινά οπτικά στοιχεία και κοινή μορφοποίηση στη master slide, και έπειτα τοποθετήστε τις θέσεις κειμένου στις διατάξεις που θα χρησιμοποιούν οι normal slides.

Μπορώ να διαγράψω μια master slide που είναι ακόμη σε χρήση;

Όχι. Μια master slide που έχει εξαρτημένες διαφάνειες δεν μπορεί να αφαιρεθεί με ασφάλεια απευθείας. Πρώτα μετακινήστε αυτές τις διαφάνειες σε διατάξεις κάτω από άλλο master, ή χρησιμοποιήστε μια μέθοδο καθαρισμού μη χρησιμοποιούμενων masters που αφαιρεί μόνο masters που δεν χρησιμοποιούνται.