Apache POI - 合并pptx时出错

时间:2015-01-06 06:04:11

标签: java apache-poi powerpoint xslf

我有一个场景,我需要从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时,我得到以下内容 错误: &#34; PowerPoint发现output.pptx中的内容有问题 PowerPoint可以尝试修复演示文稿 如果您信任此演示文稿的来源,请单击“修复”。&#34;

点击修复后:&#34; PowerPoint在merged.pptx中删除了不可读的内容 [修复]。您应该查看此演示文稿以确定是否有任何内容 意外地改变或删除了#34; 我可以看到空白幻灯片&#34;点击添加标题&#34;和&#34;点击添加字幕&#34;

有任何解决此问题的建议吗?

2 个答案:

答案 0 :(得分:0)

此代码适用于复制幻灯片内容,布局和备注。 如果您想关注原始问题,只需根据需要修改代码即可。我认为你很简单:

  1. 不从其源幻灯片
  2. 导入幻灯片内容
  3. 将备注内容复制到幻灯片中

    Column B

答案 1 :(得分:-1)

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

XSLFSlide slide = presentation.createSlide(slideMaster.getLayout(layout));
// remove any placeholder texts
for (XSLFTextShape ph : slide.getPlaceholders()) {
  ph.clearText();
  ph.setText("");
}