Как клонировать формы шаблона ppt на новый слайд с помощью apache poi - java? - PullRequest
0 голосов
/ 24 мая 2019

У меня есть шаблон .pptx MS PowerPoint с несколькими слайдами. Каждый слайд имеет групповую форму.

Мне нужно:

  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 (..).

Я видел упоминание об этом, но без решения:

Как создать файл PPTX с помощью шаблона power-point с использованием Apache POI

Добавление фигур в слайд Powerpoint с использованием XSLF (проект Apache POI)

изменить существующий файл powerpoint с помощью программирования Java

Я использую эти зависимости с 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, которую он выбрасывает на разные машины

...