如何使用JAVA Apache POI为powerpoint的每张幻灯片的背景设置不同的图像?

问题描述 投票:0回答:1

我正在尝试创建一个powerpoint,并为我的powerpoint的每张幻灯片设置一个不同的图像作为背景。不幸的是,即使我成功通过图像改变了我的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));
}
java apache background apache-poi powerpoint
1个回答
0
投票

您使用代码执行的操作不是设置背景图片,而是将图片形状设置为始终位于名为“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();
 }
}

这与PowerPoints GUI在使用Format Background时所做的相同。

每个不同的幻灯片布局也具有背景属性。因此,也可以在不同的幻灯片布局上设置背景属性。不同的幻灯片布局可以是每个幻灯片母版中所有可能的SlideLayout中的一个。如果完成,那么该背景将自动用于使用该幻灯片布局的所有幻灯片。

© www.soinside.com 2019 - 2024. All rights reserved.