【问题标题】:How to properly copy-paste a slide with Apache POI如何使用 Apache POI 正确复制粘贴幻灯片
【发布时间】:2018-11-20 21:31:44
【问题描述】:

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

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

  1. 复制成功(对于某些带有 XSLFPictureShape 对象的幻灯片)
  2. 当 POI 尝试复制 XSLFPictureShape 时出现 NullPointerException(堆栈跟踪如下)

    线程“main”中的异常 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(堆栈跟踪如下)

    线程“main”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 中的图片并“作为图像”粘贴即可消除效果和问题。

【问题讨论】:

    标签: apache-poi


    【解决方案1】:

    我找到了我自己的答案,如原始问题更新中所述:

    我发现第 2 点的 NullPointerException 问题是由于 pptx 文件损坏(可能是因为它已经用 mac 编辑过一次?)

    似乎第 3 点的 ClassCastException 是由于某些应用了“艺术效果”的图片造成的,Apache POI 目前不支持这些图片。复制 PowerPoint 中的图片并粘贴“作为图像”可以消除效果和问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 2017-09-17
      • 2011-11-28
      相关资源
      最近更新 更多