2014-02-28 6 views
6

Я хочу использовать презентацию Open Office/Libre Office как шаблон и вставлять текст и изображения в слайды. Я пытаюсь использовать odftoolkit. Если у меня есть слайд с полями, они представлены как <draw:frame> в XMLДобавить контент в фреймы презентации OpenOffice odp в ODFToolkit

Как мне получить доступ к этим местам для размещения изображения в них? Должен ли я использовать эти классы?

  • org.odftoolkit.simple.PresentationDocument
  • org.odftoolkit.simple.presentation.Slide

Когда у меня есть раздвинуть соответствующие методы, которые я вижу, являются:

  • .getOdfElement
  • .getFrameContainerElement

Но я не могу видеть, как выбрать кадры на слайде. Когда я открываю XML, у меня есть 5 кадров под <draw:page>.

Имеют такие атрибуты, как: presentation:style-name="pr2" draw:layer="layout"

+1

По крайней мере, вы можете получить элемент контейнера фрейма слайда, попробуйте выполнить итерацию по всем его дочерним элементам и вручную проверить их классы и атрибуты, чтобы найти целевой кадр. –

ответ

4

Как Евгений заметил, я должен был найти целевой кадр и делать больше работы. Нет способа добавить изображения в рамку, только для слайда. Я пошел в методы и преуспели следующим образом:

DrawPageElement drawPageElement = slide.getOdfElement(); 
DrawFrameElement drawFrame = OdfElement.findFirstChildNode(DrawFrameElement.class, drawPageElement); 
DrawImageElement image = drawFrame.newDrawImageElement(); 
OdfPackage mOdfPackage = odp.getPackage(); 
String imageRef = "/some/path/to/chart.png"; 

String packagePath = odp.getDocumentPath() + OdfPackage.OdfFile.IMAGE_DIRECTORY.getPath() + "/" + someMethodToCreateRandomString(); 

mOdfPackage.insert(new URI(imageRef), packagePath, OdfFileEntry.getMediaTypeString(imageRef)); 
packagePath = packagePath.replaceFirst(odp.getDocumentPath(), ""); 
URI uri = new URI(AnyURI.encodePath(packagePath).toString()); 
image.setXlinkHrefAttribute(AnyURI.decodePath(uri.toString())); 
image.setXlinkActuateAttribute("onLoad"); 
image.setXlinkShowAttribute("embed"); 
image.setXlinkTypeAttribute("simple"); 

Я надеялся на что-то ближе к GUI, потому что я думаю, что я пропустил несколько стилей и лучший способ найти кадры. Но все равно это не плохо.