将图像背景设置为现有幻灯片 apache poi ppt

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

我试图将图像设置为已存在(具有空白背景)并具有一些组件(文本和图像)的特定幻灯片的背景,但在打开使用 apache poi 创建的 ppt 时出现错误。这是ppt参考:

enter image description here

我的代码基于另一个 stackoverflow 响应,但出现错误

XMLSlideShow slideShow = new XMLSlideShow(new FileInputStream("test.pptx"));
byte[] picData = IOUtils.toByteArray(new FileInputStream("image.jpg"));
XSLFPictureData pcData = slideShow.getSlides().get(0).getSlideShow().addPicture(picData, PictureData.PictureType.JPEG);
CTBackgroundProperties backgroundProperties = slideShow.getSlides().get(0).getXmlObject().getCSld().addNewBg().addNewBgPr();
CTBlipFillProperties blipFillProperties = backgroundProperties.addNewBlipFill();
CTRelativeRect ctRelativeRect = blipFillProperties.addNewStretch().addNewFillRect();
String idx = slideShow.getSlides().get(0).addRelation(null, XSLFRelation.IMAGES, pcData).getRelationship().getId();
CTBlip blib = blipFillProperties.addNewBlip();
blib.setEmbed(idx);

try (FileOutputStream fileOut = new FileOutputStream("test.pptx")) {
    slideShow.write(fileOut);
}

谢谢您的回答。

java apache-poi backend powerpoint slide
1个回答
0
投票

在你的代码中

CTBackgroundProperties backgroundProperties = slideShow.getSlides().get(0).getXmlObject().getCSld().addNewBg().addNewBgPr();

始终向幻灯片添加新背景 (

Bg
)。对于新创建的幻灯片来说这很好。但现有的幻灯片可能已经有背景设置。然后,在该代码行之后,它将有两个背景设置。这是不允许的。

因此,如果需要更改现有幻灯片的背景设置,则应首先取消旧的背景设置,然后再添加新的背景设置。

您的情况:

...
  if (slideShow.getSlides().get(0).getXmlObject().getCSld().isSetBg()) {
      slideShow.getSlides().get(0).getXmlObject().getCSld().unsetBg();
  }
  CTBackgroundProperties backgroundProperties = slideShow.getSlides().get(0).getXmlObject().getCSld().addNewBg().addNewBgPr();
...
© www.soinside.com 2019 - 2024. All rights reserved.