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 は、merged.pptx の判読できないコンテンツを削除しました [修復済み]。コンテンツが予期せず変更または削除されたかどうかを判断するには、このプレゼンテーションを確認する必要があります」字幕追加」

この問題を解決するための提案はありますか?

4

2 に答える 2

-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 に答える