我有问题的幻灯片主版面,其中包括页码和静态文本。我已经在我的布局,但他们没有出现,一旦我生成演示文稿。当我进入INSTER ->页号时,我可以选择并显示它们。当我通过PowerPoint (添加带有选定布局的幻灯片)将新幻灯片添加到我生成的演示文稿中时,它将显示该页面的页码。以下是代码:
String fileName = "slidemaster-010";
String templateLocation = "/Users/akonopko/Export/Templates/Presentation10.pptx";
XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(templateLocation));
XSLFSlideMaster defaultMaster = ppt.getSlideMasters().get(0);
XSLFSlideLayout masterLayout = defaultMaster.getLayout("Master");
XSLFSlide slide = ppt.createSlide(masterLayout);
XSLFSlideLayout masterLayout1 = defaultMaster.getLayout("1_Custom Layout");
XSLFSlide slide2 = ppt.createSlide(masterLayout1);
List<XSLFShape> slideShapes = slide2.getShapes();
for (XSLFShape shape : slideShapes) {
if (shape.getPlaceholder() == Placeholder.TITLE) {
((XSLFTextShape) shape).setText("Test Text");
}
}





发布于 2022-04-23 07:47:39
Apache只是不从XSLFSlideLayout而XMLSlideShow.createSlide(XSLFSlideLayout)复制占位符。它使用XSLFSlideLayout.copyLayout(XSLFSlide),在那里DATETIME、SLIDE_NUMBER和FOOTER被明确排除在外。
可以编写一个方法,从布局中复制这些占位符。这可能看起来是这样的:
public void copyPlaceholdersFromLayout(XSLFSlideLayout layout, XSLFSlide slide) {
for (XSLFShape sh : layout.getShapes()) {
if (sh instanceof XSLFTextShape) {
XSLFTextShape tsh = (XSLFTextShape) sh;
Placeholder ph = tsh.getTextType();
if (ph == null) continue;
switch (ph) {
// these are special and not copied by default
case DATETIME:
case SLIDE_NUMBER:
case FOOTER:
System.out.println(ph);
slide.getXmlObject().getCSld().getSpTree().addNewSp().set(tsh.getXmlObject().copy());
break;
default:
//slide.getSpTree().addNewSp().set(tsh.getXmlObject().copy());
//already done
}
}
}
}像这样被打电话:
copyPlaceholdersFromLayout(masterLayout1, slide2);但apache poi明确排除这一点可能是有原因的。
https://stackoverflow.com/questions/71955159
复制相似问题