我试图创建一个幻灯片,并为幻灯片的每张幻灯片设置不同的图像作为背景。不幸的是,即使我成功通过图像更改了Powerpoint的背景,我的背景也始终是循环的最后一个图像。
在代码中,每个图像的名称都为'image('i')',其中i为图像编号,我希望第一个图像作为第一张幻灯片的背景,第二个图像为第二张幻灯片的背景,等等...
如果有人可以帮助我,请。 谢谢
//Find number of slides to create
int nbSlide = new File(directoryScreen).listFiles().length;
//creating a new empty slide show
XMLSlideShow ppt = new XMLSlideShow();
XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0);
List<XSLFSlideLayout> slides = new ArrayList<XSLFSlideLayout>();
for(int i=1; i<=nbSlide; i++)
XSLFPictureData pd = ppt.addPicture(new
File(directoryScreen+"\\image"+i+".png"), PictureType.PNG);
XSLFSlideLayout slidelayout = slideMaster.getLayout(SlideLayout.BLANK);
XSLFPictureShape ps = slidelayout.createPicture(pd);
ps.setAnchor(new Rectangle2D.Double(0, 0, 960, 540));
slides.add(slidelayout);
}
for(int i=0; i<nbSlide; i++) {
XSLFSlide sl = ppt.createSlide(slides.get(i));
}
答案 0 :(得分:0)
您对代码所做的操作不是在设置背景图片,而是在始终名为“空白”的同一幻灯片布局上设置图片形状。幻灯片母版仅提供一个名为“空白”的幻灯片版式,因此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
时Format Background
的GUI所做的相同。
每个不同的幻灯片布局还具有背景属性。因此,还可以在不同的幻灯片布局上设置背景属性。每个幻灯片母版可以在所有SlideLayout中使用不同的幻灯片布局。如果完成,则将在使用该幻灯片布局的所有幻灯片上自动使用该背景。