2014-02-28 17 views
6

Ich möchte eine Open Office/Libre Office-Präsentation als Vorlage verwenden und Text und Bilder in Folien einfügen. Ich versuche, odftoolkit zu verwenden. Wenn ich eine Folie mit den Boxen habe, werden diese als <draw:frame> in der XMLHinzufügen von Inhalt zu Bildern einer OpenOffice-ODP-Präsentation in ODFToolkit

dargestellt. Wie kann ich darauf zugreifen, um ein Bild in ihnen zu platzieren? Sollte ich diese Klassen benutzen?

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

Wenn ich eine Folie öffnen die damit verbundenen Methoden, die ich sehen sind:

  • .getOdfElement
  • .getFrameContainerElement

Aber ich bin nicht in der Lage zu sehen, wie Frames auf der Folie ausgewählt werden. Wenn ich das XML öffne habe ich die 5 Frames unter <draw:page>.

Die haben Attribute wie: presentation:style-name="pr2" draw:layer="layout"

+1

Zumindest können Sie Frame-Container-Element der Folie erhalten, versuchen, über alle seine untergeordneten Elemente zu iterieren und ihre Klassen und Attribute manuell zu überprüfen, um einen Zielrahmen zu finden. –

Antwort

4

Als Eugene kommentierte, hatte ich den Zielrahmen zu finden und mehr Arbeit zu tun. Es gibt keine Methode zum Hinzufügen von Bildern zu einem Rahmen, nur zu einer Folie. Ich ging die Methoden in und es gelang ihm wie folgt:

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"); 

ich etwas näher an die GUI der Hoffnung, weil ich glaube, ich habe einige Stile verpasst und besseren Weg, Rahmen zu finden. Aber es ist sowieso nicht schlecht.