Есть ли способ добавить номер страницы к недавно созданному слайду со стилем, унаследованным от предыдущего слайда?
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 я сделал некоторые изменения, но это не помогло. Оригинальный слайд использует макет TITLE_ONLY и имеет нумерацию в Powerpoint, но недавно созданный слайд не работает.
Я думаю, вам нужно создать новый XSLFSlide, используя
slideShow.createSlide(layout);
где макет XSLFSlideLayout вы можете получить из мастер-листа, используя
XSLFSlideMaster defaultMaster = slideShow.getSlideMasters()[0];
XSLFSlideLayout titleLayout = defaultMaster.getLayout(SlideLayout.TITLE);
Возможно, вам нужно настроить, где вы получаете свой макет, но в основном это должен быть путь.
Хорошо, в сочетании с ответом @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
}
}