Как объединить несколько презентаций (pptx слайд-шоу) вместе со встроенными объектами в Apache POI

#java #excel #apache-poi #powerpoint

#java #excel #apache-poi #powerpoint

Вопрос:

У меня проблема с объединением нескольких слайд-шоу PPTX в одно с Apache POI, когда одно XMLSlideShow содержит встроенный объект Excel (XLSX).

Документация выглядит следующим образом https://poi.apache.org/slideshow/xslf-cookbook.html#Merge

 XMLSlideShow pptx = new XMLSlideShow();
String[] inputs = {"presentations1.pptx", "presentation2.pptx"};
for(String arg : inputs){
    FileInputStream is = new FileInputStream(arg);
    XMLSlideShow src = new XMLSlideShow(is);
    is.close();

    for(XSLFSlide srcSlide : src.getSlides()){
        pptx.createSlide().importContent(srcSlide);
    }
}

FileOutputStream out = new FileOutputStream("merged.pptx");
pptx.write(out);
out.close();
  

Создается файл PPTX, но он поврежден. «PowerPoint не удалось прочитать некоторый контент в merged.pptx «.
Я вижу, что при загрузке PPTX встроенный excel возвращается методом getAllEmbedds():

 XMLSlideShow pptx = new XMLSlideShow(new FileInputStream("presentations1.pptx"))
PackagePart embedded = pptx.getAllEmbedds().get(0);
  

Но при слиянии он не копируется в новый XMLSlideShow.
Я использую POI 3.15

Все еще пытаюсь сделать это каким-то другим способом.

Кому-нибудь удалось это сделать?