繁体   English   中英

Apache POI-合并pptx时出错

[英]Apache POI - Error while merging pptx

我有一种情况,我需要根据幻灯片中的演示文稿从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删除了merged.pptx中的不可读内容[已修复]。您应该查看此介绍以确定是否意外更改或删除了任何内容”,并且我可以看到空白幻灯片,其中包含“单击以添加标题”和“单击以添加字幕”

有解决这个问题的建议吗?

此代码对我有用,可以复制幻灯片内容,布局和注释。 如果要遵循原始问题,只需修改代码即可。 我认为您简单地必须:

  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); 

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM