如何使用Apache POI正确复制粘贴幻灯片

时间:2018-11-20 21:31:44

标签: apache-poi

我正在尝试在Apache POI中复制一张幻灯片。

根据幻灯片内容,我有三种情况

  1. 复制成功(对于某些带有XSLFPictureShape对象的幻灯片)
  2. 当POI尝试复制XSLFPictureShape时,我得到NullPointerException(紧随其后的stacktrace)

    线程“主”中的异常java.lang.NullPointerException     在org.apache.poi.xslf.usermodel.XSLFSheet.importBlip(XSLFSheet.java:651)     在org.apache.poi.xslf.usermodel.XSLFPictureShape.copy(XSLFPictureShape.java:202)     在org.apache.poi.xslf.usermodel.XSLFSheet.wipeAndReinitialize(XSLFSheet.java:452)     在org.apache.poi.xslf.usermodel.XSLFSheet.importContent(XSLFSheet.java:431)     在org.apache.poi.xslf.usermodel.XSLFSlide.importContent(XSLFSlide.java:294) ...

  3. 当POI试图复制XSLFPictureShape时,我得到ClassCastException(跟在stacktrace之后)

    线程“主”中的异常java.lang.ClassCastException:org.apache.poi.ooxml.POIXMLDocumentPart无法转换为org.apache.poi.xslf.usermodel.XSLFPictureData     在org.apache.poi.xslf.usermodel.XSLFSheet.importBlip(XSLFSheet.java:651)     在org.apache.poi.xslf.usermodel.XSLFPictureShape.copy(XSLFPictureShape.java:223)     在org.apache.poi.xslf.usermodel.XSLFSheet.wipeAndReinitialize(XSLFSheet.java:452)     在org.apache.poi.xslf.usermodel.XSLFSheet.importContent(XSLFSheet.java:431)     在org.apache.poi.xslf.usermodel.XSLFSlide.importContent(XSLFSlide.java:294) ...

我在做什么错了?

更新

我发现第2点的NullPointerException问题是由于pptx文件损坏(也许是因为它已使用Mac进行过一次编辑?)

我现在唯一真正的问题是第3点的问题

更新

第3点的ClassCastException似乎是由于某些图片上应用了“艺术效果”所致,而Apache POI目前不支持这些图片。在PowerPoint中复制图片并“按图片”粘贴可消除效果和问题。

1 个答案:

答案 0 :(得分:0)

我在原始问题的更新中找到了自己的解决方案:

我发现第2点的NullPointerException问题是由于pptx文件损坏(也许是因为它已使用Mac进行过一次编辑?)

第3点的ClassCastException似乎是由于某些图片上应用了“艺术效果”所致,而Apache POI目前不支持这些图片。在PowerPoint中复制图片并“按图片”粘贴可消除效果和问题。