gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:16:45 28 4
gpt4 key购买 nike

我正在尝试创建一个幻灯片,并为我的幻灯片的每张幻灯片设置不同的图像作为背景。不幸的是,即使我成功地通过图像更改了 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));
}

最佳答案

您使用代码所做的不是设置背景图片,而是在名为“空白”的始终相同的幻灯片布局上设置图片形状。幻灯片母版仅提供一种名为“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();
}
}

这与使用格式背景PowerPoint的 GUI 所做的相同。

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

关于java - 如何使用JAVA Apache POI为powerpoint的每张幻灯片的背景设置不同的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55868740/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com