如何使用Apache POI将PPT模板形状克隆到新幻灯片-Java?

时间:2019-05-24 16:00:54

标签: java apache apache-poi powerpoint

我有一个带有几张幻灯片的ms powerpoint模板.pptx文件。每张幻灯片都有一个小组形状。

我需要:

  1. 从模板pptx文件上的幻灯片中读取组形状(我的模板中的形状设置了“形状名称”属性,因此可以通过apache poi检查getShapeName()方法来找到它们 https://poi.apache.org/components/slideshow/xslf-cookbook.html#GetShapes

  2. “复制”或“克隆”此检索到的组形状,并将其添加为新幻灯片上的新组形状对象,其中该新组形状将包含模板幻灯片下也存在的所有新的子子形状小组形状

似乎我不能使用XSLFSheet.addShape(..),因为它有一个总是会抛出的硬编码异常:

    throw new UnsupportedOperationException(
        "Adding a shape from a different container is not supported -"
        + " create it from scratch witht XSLFSheet.create* methods");

我无法使用XSLFSlide.importContent(XSLFSheet),因为这将覆盖新目标幻灯片上的所有内容。我需要在新的目标幻灯片上添加几个组形状-以便在多次调用importContent(..)时无法删除它们。

我看到了对此的提及,但没有解决方案:

How to create PPTX file using power-point-template using Apache POI

Adding shapes to Powerpoint slide using XSLF (Apache POI Project)

modify an existing file of powerpoint with java programming

我在Java 8中使用这些依赖项

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.0</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.0</version>
</dependency>

由于内存需求大,我不能使用aspose-并且它会在不同的计算机上引发NPE开放问题

0 个答案:

没有答案