POI не копирует заметки слайдов ppt - PullRequest
0 голосов
/ 06 февраля 2020

Когда я пытался скопировать слайд ppt в новый документ ppt. Часть слайд-презентации была скопирована, но примечания к слайду не были скопированы.

Я попробовал MergePresentations. java из примера POI. Он также не копирует заметки.

Я явно получаю заметки с исходного слайда, затем устанавливаю его на целевой слайд. Это все еще не сработало.

XSLFNotes sreNotes = srcSlide.getNotes();

XMLSlideShow ppt = new XMLSlideShow();
XSLFSlide targetSlide = ppt.createSlide();
targetSlide.importContent(slide);
targetSlide.setNotes(sreNotes);
FileOutputStream out = new FileOutputStream(getNextFileName(RESULT_DIR, charName));
ppt.write(out);
out.close();

Как скопировать ppt слайды с заметками? Ваша помощь приветствуется.

1 Ответ

0 голосов
/ 18 февраля 2020

Я нашел способ получить заметки с исходного слайда, а затем установить его на новый слайд. Конечно, форматирование текста будет потеряно.

//Get note from a slide
private static String getNotesText(XSLFSlide slide) {

    XSLFNotes mynotes = slide.getNotes();
    for (XSLFShape shape : mynotes) {
        if (shape instanceof XSLFTextShape) {
            XSLFTextShape txShape = (XSLFTextShape) shape;
            for (XSLFTextParagraph xslfParagraph : txShape.getTextParagraphs()) {

                resultBuffer.append(xslfParagraph.getText())
                .append("\n");
            }
        }
    }

    return resultBuffer.toString();
}

private static void createNewPpt(XSLFSlide slide, Dimension pageSize) throws IOException {

    try (XMLSlideShow ppt = new XMLSlideShow()) {

        ppt.setPageSize(pageSize);

        XSLFSlide targetSlide = ppt.createSlide();
        targetSlide.importContent(slide);

        XSLFNotes targetNotes = ppt.getNotesSlide(targetSlide);
        for (XSLFTextShape targetShape : targetNotes.getPlaceholders()) {

            if (targetShape.getTextType() == Placeholder.BODY) {

                targetShape.setText(getNotesText(slide));
                break;
            }
        }


        FileOutputStream out = new FileOutputStream(getNextFileName(RESULT_DIR, charName));
        ppt.write(out);
        out.close();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...