Apache POI XSLFSlide номер страницы

1

Есть ли способ добавить номер страницы к недавно созданному слайду со стилем, унаследованным от предыдущего слайда?

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, но недавно созданный слайд не работает.

Теги:
apache-poi
powerpoint
openxml

2 ответа

1

Я думаю, вам нужно создать новый XSLFSlide, используя

slideShow.createSlide(layout);

где макет XSLFSlideLayout вы можете получить из мастер-листа, используя

XSLFSlideMaster defaultMaster = slideShow.getSlideMasters()[0];    
XSLFSlideLayout titleLayout = defaultMaster.getLayout(SlideLayout.TITLE);

Возможно, вам нужно настроить, где вы получаете свой макет, но в основном это должен быть путь.

  • 0
    Спасибо! Но это не помогло. Я обновил свой вопрос.
0

Хорошо, в сочетании с ответом @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
            }
        }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню