1

我有一个场景,我需要从 pptx (source.pptx) 复制几张幻灯片,然后根据幻灯片中可用的演示文稿将其下载为单独的 pptx 文件 (output.pptx)。我正在使用 apache poi 来实现它。这是我的代码。

String filename = filepath+"\\source.pptx";
    try {
        XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(filename));
        XMLSlideShow outputppt = new XMLSlideShow();
        XSLFSlide[] slides = ppt.getSlides();

        for (int i = 0; i < slides.length; i++) {
            try {
                XSLFNotes mynotes = slides[i].getNotes();
                for (XSLFShape shape : mynotes) {
                    if (shape instanceof XSLFTextShape) {
                        XSLFTextShape txShape = (XSLFTextShape) shape;
                        for (XSLFTextParagraph xslfParagraph : txShape.getTextParagraphs()) {
                            if (xslfParagraph.getText().equals("NOTES1") || xslfParagraph.getText().equals("NOTES2")) {
                                outputppt.createSlide().importContent(slides[i]);
                            }

                        }
                    }
                }
            } catch (Exception e) {

            }

        }
        FileOutputStream out = new FileOutputStream("output.pptx");
        outputppt.write(out);
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

当我打开创建的 output.pptx 时,我收到以下错误:“PowerPoint 发现 output.pptx 中的内容有问题 PowerPoint 可以尝试修复演示文稿如果您信任此演示文稿的来源,请单击修复。”

单击修复后:“PowerPoint 删除了 merge.pptx [已修复] 中的不可读内容。您应该查看此演示文稿以确定是否有任何内容被意外更改或删除”我可以看到带有“单击以添加标题”和“单击以添加标题”的空白幻灯片添加字幕”

有什么建议可以解决这个问题吗?

4

2 回答 2

0

此代码适用于我复制幻灯片内容、布局和注释。如果您想遵循原始问题,只需根据您的需要修改代码。我假设您必须:

  1. 不从源幻灯片导入幻灯片内容
  2. 将笔记内容复制到幻灯片

        // get the layout from the source slide
        XSLFSlideLayout layout = srcSlide.getSlideLayout();
        XSLFSlide newslide = ppt
            .createSlide(defaultMaster.getLayout(layout.getType()))
            .importContent(srcSlide);
        XSLFNotes srcNotes = srcSlide.getNotes();
        XSLFNotes newNotes = ppt.getNotesSlide(newslide);
        newNotes.importContent(srcNotes);
    
于 2018-05-18T15:43:19.163 回答
-1

在某些文本框为空的情况下,我遇到了同样的错误。通过在创建幻灯片时始终在所有占位符中设置空文本来解决此问题。

XSLFSlide slide = presentation.createSlide(slideMaster.getLayout(layout));
// remove any placeholder texts
for (XSLFTextShape ph : slide.getPlaceholders()) {
  ph.clearText();
  ph.setText("");
}
于 2015-04-14T11:57:26.117 回答