То, что вы делаете с вашим кодом, это не установка фоновых изображений, а установка форм изображения на всегда одном и том же макете слайда с именем «Пустой». Мастер слайдов предоставляет только один макет слайда с именем «Пустой», поэтому slideMaster.getLayout(SlideLayout.BLANK)
всегда получает один и тот же макет одного слайда.
Если действительно необходимо установить фоновые изображения для слайдов, то это должно быть сделано с использованием свойств фона слайдов.
Пример:
import java.io.FileOutputStream;
import java.io.FileInputStream;
import org.apache.poi.xslf.usermodel.*;
import org.apache.poi.sl.usermodel.*;
import org.openxmlformats.schemas.presentationml.x2006.main.*;
import org.openxmlformats.schemas.drawingml.x2006.main.*;
import java.awt.Dimension;
public class CreatePPTXSheetsDifferentBackgroundPictures {
public static void main(String[] args) throws Exception {
XMLSlideShow slideShow = new XMLSlideShow();
XSLFPictureData[] pictureDatas = new XSLFPictureData[]{
slideShow.addPicture(new FileInputStream("Hydrangeas.jpg"), PictureData.PictureType.JPEG),
slideShow.addPicture(new FileInputStream("Desert.jpg"), PictureData.PictureType.JPEG),
slideShow.addPicture(new FileInputStream("Chrysanthemum.jpg"), PictureData.PictureType.JPEG)
};
// s slides, each having one different background picture out of pictureDatas array
for (int s = 0; s < pictureDatas.length; s++ ) {
XSLFSlide slide = slideShow.createSlide();
CTBackgroundProperties backgroundProperties = slide.getXmlObject().getCSld().addNewBg().addNewBgPr();
CTBlipFillProperties blipFillProperties = backgroundProperties.addNewBlipFill();
CTRelativeRect ctRelativeRect = blipFillProperties.addNewStretch().addNewFillRect();
String idx = slide.addRelation(null, XSLFRelation.IMAGES, pictureDatas[s]).getRelationship().getId();
CTBlip blib = blipFillProperties.addNewBlip();
blib.setEmbed(idx);
}
FileOutputStream out = new FileOutputStream("CreatePPTXSheetsDifferentBackgroundPictures.pptx");
slideShow.write(out);
out.close();
}
}
Это то же самое, что делает PowerPoint
GUI, когда используется Format Background
.
Каждый отдельный макет слайда также имеет свойства фона. Таким образом, свойства фона также могут быть установлены на разных макетах слайдов. Различные макеты слайдов могут быть по одному из всех возможных SlideLayout на мастер слайдов. Если все сделано, то этот фон автоматически используется на всех слайдах, которые используют этот макет слайда.