簡體   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