[英]How to set a different image for the background of each slide of the powerpoint using JAVA Apache POI?
我正在嘗試創建一個 powerpoint 並為我的 powerpoint 的每張幻燈片設置不同的圖像作為背景。 不幸的是,即使我成功地通過圖像更改了我的幻燈片的背景,我的背景也將始終是循環的最后一張圖像。
在代碼中,每個圖像的名稱都是“圖像(‘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));
}
您對代碼所做的不是設置背景圖片,而是在始終名為“Blank”的相同幻燈片布局上設置圖片形狀。 幻燈片母版僅提供一種名為“Blank”的幻燈片布局,因此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();
}
}
這與使用Format Background
時PowerPoint
的 GUI 所做的相同。
每個不同的幻燈片布局也有背景屬性。 所以背景屬性也可以設置在不同的幻燈片布局上。 不同的幻燈片布局可以是每個幻燈片母版的所有可能的SlideLayout之一。 如果完成,則該背景將自動用於使用該幻燈片布局的所有幻燈片。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.