簡體   English   中英

如何使用 JAVA Apache POI 為幻燈片的每張幻燈片的背景設置不同的圖像?

[英]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 BackgroundPowerPoint的 GUI 所做的相同。

每個不同的幻燈片布局也有背景屬性。 所以背景屬性也可以設置在不同的幻燈片布局上。 不同的幻燈片布局可以是每個幻燈片母版的所有可能的SlideLayout之一。 如果完成,則該背景將自動用於使用該幻燈片布局的所有幻燈片。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM