创建新幻灯片布局并从其他powerpoint幻灯片布局复制内容

时间:2017-03-29 06:48:03

标签: apache-poi openxml xslf

这是我的用例:

我有两个电源点文件。我想将所有幻灯片模板从一个powerpoint复制到另一个。我在MasterSlide中找不到像createTemplate()这样的API,所以为了做到这一点,我使用其中一个模板(存在于同一个powerpoint中)PackagePart然后使用importContent()创建一个新的XSLFSlideLayout它,从其他powerpoint复制模板。这是它的简短版本:

XMLSlideShow xmlSlideShow1 = new XMLSlideShow(templateInputStream1);
XMLSlideShow XmlSlideShow2 = new XMLSlideShow(templateInputStream2);
XSLFSlideLayout newLayout = null;

try {
  newLayout = new XSLFSlideLayout(xmlSlideShow1.getSlideMasters().get(0).getSlideLayouts().get(0).getPackagePart());
} catch (IOException | XmlException e){
  LOGGER.error("Unable to create new layout", e);
}
// breaks here
newLayout.importContent(xmlSlideShow2.getSlideMasters().get(0).getSlideLayouts().get(0));
return userXmlSlideShow.createSlide(newLayout);

当调用importContent时它会中断:

  

java.lang.IllegalStateException:找不到名称的SlideMaster:   /ppt/slideLayouts/slideLayout1.xml - 内容类型:   应用/ vnd.openxmlformats-officedocument.presentationml.slideLayout + xml的     在   org.apache.poi.xslf.usermodel.XSLFSlideLayout.getSlideMaster(XSLFSlideLayout.java:98)     在   org.apache.poi.xslf.usermodel.XSLFSlideLayout.getMasterSheet(XSLFSlideLayout.java:105)     在   org.apache.poi.xslf.usermodel.XSLFSlideLayout.getMasterSheet(XSLFSlideLayout.java:36)     在   org.apache.poi.xslf.usermodel.XSLFShape.fetchShapeProperty(XSLFShape.java:307)     在   org.apache.poi.xslf.usermodel.XSLFSimpleShape.getXfrm(XSLFSimpleShape.java:133)     在   org.apache.poi.xslf.usermodel.XSLFSimpleShape.setAnchor(XSLFSimpleShape.java:169)     在org.apache.poi.xslf.usermodel.XSLFShape.copy(XSLFShape.java:137)     在   org.apache.poi.xslf.usermodel.XSLFSimpleShape.copy(XSLFSimpleShape.java:711)     在   org.apache.poi.xslf.usermodel.XSLFTextShape.copy(XSLFTextShape.java:588)     在   org.apache.poi.xslf.usermodel.XSLFSheet.importContent(XSLFSheet.java:372)

我使用的是poi-3.15。任何线索都会有很大的帮助。

0 个答案:

没有答案