Java Apache POI XSLFSlide页码

Java Apache POI XSLFSlide页码,java,apache-poi,powerpoint,openxml,Java,Apache Poi,Powerpoint,Openxml,是否有任何方法可以将页码添加到新创建的幻灯片中,并使用继承自上一张幻灯片的样式 XMLSlideShow slideShow = new XMLSlideShow(new FileInputStream("templateFile.pptx")); final XSLFSlide[] slides = slideShow.getSlides(); XSLFSlideMaster defaultMaster = slideShow.getSlideMasters()[0];

是否有任何方法可以将页码添加到新创建的幻灯片中,并使用继承自上一张幻灯片的样式

XMLSlideShow slideShow = new XMLSlideShow(new FileInputStream("templateFile.pptx"));
    final XSLFSlide[] slides = slideShow.getSlides();
    XSLFSlideMaster defaultMaster = slideShow.getSlideMasters()[0];
    XSLFSlideLayout titleLayout = defaultMaster.getLayout(SlideLayout.TITLE_ONLY);
    final XSLFSlide slide = slideShow.createSlide(titleLayout);
//how to set slide number for slide?
更新
根据@Andreas Kühntopf的回答,我做了一些修改,但没有任何帮助。原始幻灯片使用仅标题的布局,并且在Powerpoint中有编号,但新创建的幻灯片没有。

我认为您需要使用

slideShow.createSlide(layout);
其中layout是您可以从母版工作表获得的XSLFSlideLayout 使用

也许你必须调整你的布局,但基本上是这样的
应该是解决问题的方法。

好的,结合@Andreas Kuhntopf的回答,我找到了解决方案。首先我需要为幻灯片选择正确的样式,然后我需要手动复制
spPr
类型
numSld

        XSLFSlideMaster defaultMaster = slideShow.getSlideMasters()[0];
        XSLFSlideLayout titleLayout = defaultMaster.getLayout(SlideLayout.TITLE_ONLY);
        newSlide = slideShow.createSlide(titleLayout);
        final List<CTShape> spList = slide.getXmlObject().getCSld().getSpTree().getSpList();
        for (CTShape ctShape : spList) {
            try {
                final STPlaceholderType.Enum type;
                type = ctShape.getNvSpPr().getNvPr().getPh().getType();
                if (type == STPlaceholderType.SLD_NUM) {
                    final CTShape newSlideNumber = newSlide.getXmlObject().getCSld().getSpTree().addNewSp();
                    newSlideNumber.set(ctShape);
                    break;

                }
            } catch (NullPointerException e) {
                //Just ignore exception, this rather bad code style is used to avoid multiple checks
            }
        }
XSLFSlideMaster defaultMaster=slideShow.getSlideMasters()[0];
XSLFSlideLayout titleLayout=defaultMaster.getLayout(仅限SlideLayout.TITLE_);
newSlide=slideShow.createSlide(标题布局);
最终列表spList=slide.getXmlObject().getCSld().getSpTree().getSpList();
用于(CTShape CTShape:spList){
试一试{
最终STPlaceholderType.Enum类型;
type=ctShape.getnvspr().getNvPr().getPh().getType();
if(type==STPlaceholderType.SLD_NUM){
final CTShape newSlideNumber=newSlide.getXmlObject().getCSld().getSpTree().addNewSp();
newSlideNumber.set(ctShape);
打破
}
}捕获(NullPointerException e){
//只需忽略异常,这种相当糟糕的代码样式用于避免多次检查
}
}

谢谢!但这没用。我更新了我的问题。
        XSLFSlideMaster defaultMaster = slideShow.getSlideMasters()[0];
        XSLFSlideLayout titleLayout = defaultMaster.getLayout(SlideLayout.TITLE_ONLY);
        newSlide = slideShow.createSlide(titleLayout);
        final List<CTShape> spList = slide.getXmlObject().getCSld().getSpTree().getSpList();
        for (CTShape ctShape : spList) {
            try {
                final STPlaceholderType.Enum type;
                type = ctShape.getNvSpPr().getNvPr().getPh().getType();
                if (type == STPlaceholderType.SLD_NUM) {
                    final CTShape newSlideNumber = newSlide.getXmlObject().getCSld().getSpTree().addNewSp();
                    newSlideNumber.set(ctShape);
                    break;

                }
            } catch (NullPointerException e) {
                //Just ignore exception, this rather bad code style is used to avoid multiple checks
            }
        }