这是我的用例:
我有两个 powerpoint 文件。我想将所有幻灯片模板从一个 powerpoint 复制到另一个。我在 MasterSlide 中找不到像 createTemplate() 这样的 API,所以为了做到这一点,我使用模板之一(存在于同一个 powerpoint 中)PackagePart 创建一个新的 XSLFSlideLayout,然后使用 importContent() 来复制来自其他 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 - 内容类型:org.apache.poi.xslf.usermodel.XSLFSlideLayout 的 application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml .getSlideMaster(XSLFSlideLayout.java:98) at org.apache.poi.xslf.usermodel.XSLFSlideLayout.getMasterSheet(XSLFSlideLayout.java:105) at org.apache.poi.xslf.usermodel.XSLFSlideLayout.getMasterSheet(XSLFSlideLayout.java:36 ) 在 org.apache.poi.xslf.usermodel.XSLFSimpleShape.getXfrm(XSLFSimpleShape.java:133) 在 org.apache.poi 的 org.apache.poi.xslf.usermodel.XSLFShape.fetchShapeProperty(XSLFShape.java:307)。 org.apache.poi.xslf.usermodel.XSLFShape.copy(XSLFShape.java:137) 在 org.apache.poi.xslf 中的 xslf.usermodel.XSLFShape.setAnchor(XSLFSimpleShape.java:169)。org.apache.poi.xslf.usermodel.XSLFTextShape.copy(XSLFTextShape.java:588) 中的 usermodel.XSLFSimpleShape.copy(XSLFSimpleShape.java:711) org.apache.poi.xslf.usermodel.XSLFSheet.importContent(XSLFSheet.爪哇:372)
我正在使用 poi-3.15。任何线索都会有很大帮助。