[Java] Customize and Apply Slide Masters in PowerPoint
Tags: java, powerpoint, slidemaster
Published: 2020-06-15 08:26:02

PowerPoint slide master is a generic template which stores the information about theme, layouts, fonts, title and background image of a presentation. In addition, the slide master can be inherited by other slides, which makes the unifying of the presentation format easier. This article will demonstrate how to customize the slide masters in a PowerPoint file and apply them to different slides by using Free Spire.Presentation for Java.

**Installation**
**Method 1:** Download the [Free Spire.Presentation for Java](https://www.e-iceblue.com/Download/presentation-for-java-free.html) and unzip it.Then add the Spire.Presentation.jar file to your project as dependency.

**Method 2:** You can also add the jar dependency to maven project by adding the following configurations to the pom.xml.

```java
<repositories>
        <repository>
            <id>com.e-iceblue</id>
            <name>e-iceblue</name>
            <url>http://repo.e-iceblue.com/nexus/content/groups/public/</url>
        </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.presentation.free</artifactId>
        <version>2.6.1</version>
    </dependency>
</dependencies>
```



**【Example 1】Customize One Slide Master in PowerPoint**

```java
import com.spire.presentation.*;
import com.spire.presentation.drawing.BackgroundType;
import com.spire.presentation.drawing.FillFormatType;
import com.spire.presentation.drawing.IImageData;
import com.spire.presentation.drawing.PictureFillType;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;


public class CustomizeSlideMaster {

    public static void main(String[] args) throws Exception {

        //create a Presentation object and specify the slide size
        Presentation presentation = new Presentation();
        presentation.getSlideSize().setType(SlideSizeType.SCREEN_16_X_9);

        //get the first slide master
        IMasterSlide masterSlide = presentation.getMasters().get(0);

        //set the background image of the slide master
        String backgroundPic = "pic.jpg";
        BufferedImage image = ImageIO.read(new FileInputStream(backgroundPic));
        IImageData imageData = presentation.getImages().append(image);
        masterSlide.getSlideBackground().setType(BackgroundType.CUSTOM);
        masterSlide.getSlideBackground().getFill().setFillType(FillFormatType.PICTURE);
        masterSlide.getSlideBackground().getFill().getPictureFill().setFillType(PictureFillType.STRETCH);
        masterSlide.getSlideBackground().getFill().getPictureFill().getPicture().setEmbedImage(imageData);

        //add an image or company logo to slide master
        String logo = "logo.jpg";
        image = ImageIO.read(new FileInputStream(logo));
        imageData = presentation.getImages().append(image);
        IEmbedImage imageShape = masterSlide.getShapes().appendEmbedImage(ShapeType.RECTANGLE, imageData, new Rectangle2D.Float(60, 60, 200, 80));
        imageShape.getLine().setFillType(FillFormatType.NONE);

        //add some text to slide master
        IAutoShape textShape = masterSlide.getShapes().appendShape(ShapeType.RECTANGLE, new Rectangle2D.Float((float) presentation.getSlideSize().getSize().getWidth() - 200, (float) presentation.getSlideSize().getSize().getHeight() - 60, 200, 60));//Shapes.AppendShape(ShapeType.Rectangle, new RectangleF(ppt.SlideSize.Size.Width-200, ppt.SlideSize.Size.Height-60, 200, 30));
        textShape.getTextFrame().setText("Monthly Sales Report");
        textShape.getTextFrame().getTextRange().setFontHeight(20f);
        textShape.getTextFrame().getTextRange().getFill().setFillType(FillFormatType.SOLID);
        textShape.getTextFrame().getTextRange().getFill().getSolidColor().setColor(Color.blue);
        textShape.getTextFrame().getTextRange().getParagraph().setAlignment(TextAlignmentType.CENTER);
        textShape.getFill().setFillType(FillFormatType.NONE);
        textShape.getLine().setFillType(FillFormatType.NONE);

        //append a new slide
        presentation.getSlides().append();

        //save to file
        presentation.saveToFile("1SlideMaster.pptx", FileFormat.PPTX_2013);
        presentation.dispose();
    }
}
```


**Output:**
![](https://dev-to-uploads.s3.amazonaws.com/i/aw6opiqbt4inab56gub3.png)



**【Example 2】Customize Multiple Slide Maters and Apply Them in PowerPoint**

```java
import com.spire.presentation.*;
import com.spire.presentation.drawing.BackgroundType;
import com.spire.presentation.drawing.FillFormatType;
import com.spire.presentation.drawing.IImageData;
import com.spire.presentation.drawing.PictureFillType;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;

public class MultiSlideMasters {

        public static void main(String[] args) throws Exception {

            //create a Presentation object and specify the slide size
            Presentation presentation = new Presentation();
            presentation.getSlideSize().setType(SlideSizeType.SCREEN_16_X_9);

            //add four new slides to the presentation
            for (int i = 0; i < 4; i++)
            {
                presentation.getSlides().append();
            }

            //get the first slide master
            IMasterSlide first_master = presentation.getMasters().get(0);

            //create another slide master based on the first one
            presentation.getMasters().appendSlide(first_master);
            IMasterSlide second_master = presentation.getMasters().get(1);

            //set different background images for the two masters
            String pic1 = "image1.jpg";
            String pic2 = "image2.jpg";
            BufferedImage image = ImageIO.read(new FileInputStream(pic1));
            IImageData imageData = presentation.getImages().append(image);
            first_master.getSlideBackground().setType(BackgroundType.CUSTOM);
            first_master.getSlideBackground().getFill().setFillType(FillFormatType.PICTURE);
            first_master.getSlideBackground().getFill().getPictureFill().setFillType(PictureFillType.STRETCH);
            first_master.getSlideBackground().getFill().getPictureFill().getPicture().setEmbedImage(imageData);
            image = ImageIO.read(new FileInputStream(pic2));
            imageData = presentation.getImages().append(image);
            second_master.getSlideBackground().setType(BackgroundType.CUSTOM);
            second_master.getSlideBackground().getFill().setFillType(FillFormatType.PICTURE);
            second_master.getSlideBackground().getFill().getPictureFill().setFillType(PictureFillType.STRETCH);
            second_master.getSlideBackground().getFill().getPictureFill().getPicture().setEmbedImage(imageData);

            //apply the first master along with the layout to the first slide
            presentation.getSlides().get(0).setLayout(first_master.getLayouts().get(6));

            //apply the second master along with the layout to the rest slides
            for (int i = 1; i < presentation.getSlides().getCount(); i++)
            {
                presentation.getSlides().get(i).setLayout(second_master.getLayouts().get(6));
            }

            //save to file
            presentation.saveToFile("ApplyMultiMasters.pptx", FileFormat.PPTX_2013);
            presentation.dispose();
        }
    }
```


**Output:**
![](https://dev-to-uploads.s3.amazonaws.com/i/sn348yav5ojhto923ljv.png)