Embedded Objects

From Apache OpenOffice Wiki
< Documentation‎ | DevGuide
Revision as of 13:05, 15 February 2008 by Ccornell (Talk | contribs)

Jump to: navigation, search



A TextEmbeddedObject is a com.sun.star.text.BaseFrame providing the interface com.sun.star.document.XEmbeddedObjectSupplier. The only method of this interface,

 com::sun::star::lang::XComponent getEmbeddedObject ()

provides access to the model of the embedded document. That way, an embedded OpenOffice.org spreadsheet, drawing, chart or a formula document can be used in a text over its document model.

An embedded object is inserted by using the document's factory to create an instance of the the service com.sun.star.text.TextEmbeddedObject. The type of object is determined by setting the string property CLSID to an appropriate value before inserting the object as text content in the document.

 ///***************************************************************************
 // comment: Step 1: get the Desktop object from the office
 // Step 2: open an empty text document
 // Step 3: insert a sample text table
 // Step 4: insert a Chart object
 // Step 5: insert data from text table into Chart object
 //***************************************************************************
 
 import com.sun.star.uno.UnoRuntime;
 
 public class OleObject {
 
     public static void main(String args[]) {
         // You need the desktop to create a document
         // The getDesktop method does the UNO bootstrapping, gets the
         // remote servie manager and the desktop object.
         com.sun.star.frame.XDesktop xDesktop = null;
         xDesktop = getDesktop();
         
         com.sun.star.text.XTextDocument xTextDocument =
             createTextdocument( xDesktop );
         
         com.sun.star.text.XTextTable xTextTable = 
             createExampleTable( xTextDocument );
         
         try {
             // create TextEmbeddedObject
             com.sun.star.lang.XMultiServiceFactory xDocMSF = (com.sun.star.lang.XMultiServiceFactory)
             UnoRuntime.queryInterface(com.sun.star.lang.XMultiServiceFactory.class, xTextDocument);
             com.sun.star.text.XTextContent xObj = (com.sun.star.text.XTextContent)
             UnoRuntime.queryInterface(com.sun.star.text.XTextContent.class, 
                 xDocMSF.createInstance( "com.sun.star.text.TextEmbeddedObject" ));
             
             // set class id for chart object to determine the type 
             // of object to be inserted
             com.sun.star.beans.XPropertySet xPS = (com.sun.star.beans.XPropertySet)
             UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class, xObj);
             xPS.setPropertyValue( "CLSID", "12dcae26-281f-416f-a234-c3086127382e" );
             
             // insert object in document
             com.sun.star.text.XTextCursor xCursor = xTextDocument.getText().createTextCursor();
             com.sun.star.text.XTextRange xRange = (com.sun.star.text.XTextRange)
             UnoRuntime.queryInterface(com.sun.star.text.XTextRange.class, xCursor);
             xTextDocument.getText().insertTextContent( xRange, xObj, false );
             
             // access objects model
             com.sun.star.document.XEmbeddedObjectSupplier xEOS = (com.sun.star.document.XEmbeddedObjectSupplier)
             UnoRuntime.queryInterface(com.sun.star.document.XEmbeddedObjectSupplier.class, xObj);
             com.sun.star.lang.XComponent xModel = xEOS.getEmbeddedObject();
             
             // get table data
             com.sun.star.chart.XChartDataArray xDocCDA = (com.sun.star.chart.XChartDataArray)
             UnoRuntime.queryInterface(com.sun.star.chart.XChartDataArray.class, xTextTable);
             double[][] aData = xDocCDA.getData();
             
             // insert table data in Chart object
             com.sun.star.chart.XChartDocument xChartDoc = (com.sun.star.chart.XChartDocument)
             UnoRuntime.queryInterface(com.sun.star.chart.XChartDocument.class, xModel);
             com.sun.star.chart.XChartDataArray xChartDataArray = (com.sun.star.chart.XChartDataArray)
             UnoRuntime.queryInterface(com.sun.star.chart.XChartDataArray.class, xChartDoc.getData());
             xChartDataArray.setData( aData );
             
             // to remove the embedded object just uncomment the next line
             //xTextDocument.getText().removeTextContent( xObj );
         }
         catch( Exception e) {
             e.printStackTrace(System.err);
         } 
         
         System.out.println("Done");
         
         System.exit(0);
     }
               
     protected static com.sun.star.text.XTextTable createExampleTable(
         com.sun.star.text.XTextDocument xTextDocument )
     {
         com.sun.star.lang.XMultiServiceFactory xDocMSF =
             (com.sun.star.lang.XMultiServiceFactory) UnoRuntime.queryInterface(
                 com.sun.star.lang.XMultiServiceFactory.class, xTextDocument);
         
         com.sun.star.text.XTextTable xTT = null;
         
         try {
             Object oInt = xDocMSF.createInstance("com.sun.star.text.TextTable");
             xTT = (com.sun.star.text.XTextTable)
             UnoRuntime.queryInterface(com.sun.star.text.XTextTable.class,oInt);
             
             //initialize the text table with 4 columns an 5 rows
             xTT.initialize(4,5);
             
         } catch (Exception e) {
             System.err.println("Couldn't create instance "+ e);
             e.printStackTrace(System.err);
         }
         
         com.sun.star.text.XText xText = xTextDocument.getText();
         
         //create a cursor object
         com.sun.star.text.XTextCursor xTCursor = xText.createTextCursor();
         
         //insert the table
         try {
             xText.insertTextContent(xTCursor, xTT, false);
         
         } catch (Exception e) {
             System.err.println("Couldn't insert the table " + e);
             e.printStackTrace(System.err);
         }
         
         // inserting sample data
         (xTT.getCellByName("A2")).setValue(5.0);
         (xTT.getCellByName("A3")).setValue(5.5);
         (xTT.getCellByName("A4")).setValue(5.7);
         (xTT.getCellByName("B2")).setValue(2.3);
         (xTT.getCellByName("B3")).setValue(2.2);
         (xTT.getCellByName("B4")).setValue(2.4);
         (xTT.getCellByName("C2")).setValue(6);
         (xTT.getCellByName("C3")).setValue(6);
         (xTT.getCellByName("C4")).setValue(6);
         (xTT.getCellByName("D2")).setValue(3);
         (xTT.getCellByName("D3")).setValue(3.5);
         (xTT.getCellByName("D4")).setValue(4);
         (xTT.getCellByName("E2")).setValue(8);
         (xTT.getCellByName("E3")).setValue(5);
         (xTT.getCellByName("E4")).setValue(3);
         
         return xTT;
     }
         
     public static com.sun.star.frame.XDesktop getDesktop() {
         com.sun.star.frame.XDesktop xDesktop = null;
         com.sun.star.lang.XMultiComponentFactory xMCF = null;
         
         try {
             com.sun.star.uno.XComponentContext xContext = null;
             
             // get the remote office component context
             xContext = com.sun.star.comp.helper.Bootstrap.bootstrap();
             
             // get the remote office service manager
             xMCF = xContext.getServiceManager();
             if( xMCF != null ) {
                 System.out.println("Connected to a running office ...");
                 
                 Object oDesktop = xMCF.createInstanceWithContext(
                     "com.sun.star.frame.Desktop", xContext);
                 xDesktop = (com.sun.star.frame.XDesktop) UnoRuntime.queryInterface(
                     com.sun.star.frame.XDesktop.class, oDesktop);
             }
             else
                 System.out.println( "Can't create a desktop. No connection, no remote office servicemanager available!" );
         }
         catch( Exception e) {
             e.printStackTrace(System.err);
             System.exit(1);
         }
             
         return xDesktop;
     }
         
     public static com.sun.star.text.XTextDocument createTextdocument(
         com.sun.star.frame.XDesktop xDesktop )
     {
         com.sun.star.text.XTextDocument aTextDocument = null;
         
         try {
             com.sun.star.lang.XComponent xComponent = CreateNewDocument(xDesktop, "swriter");
             aTextDocument = (com.sun.star.text.XTextDocument)
                 UnoRuntime.queryInterface(
                     com.sun.star.text.XTextDocument.class, xComponent);
         }
         catch( Exception e) {
             e.printStackTrace(System.err);
         }
             
         return aTextDocument;
     }
             
     protected static com.sun.star.lang.XComponent CreateNewDocument(
         com.sun.star.frame.XDesktop xDesktop,
         String sDocumentType )
     {
         String sURL = "private:factory/" + sDocumentType;
         
         com.sun.star.lang.XComponent xComponent = null;
         com.sun.star.frame.XComponentLoader xComponentLoader = null;
         com.sun.star.beans.PropertyValue xValues[] =
             new com.sun.star.beans.PropertyValue[1];
         com.sun.star.beans.PropertyValue xEmptyArgs[] =
             new com.sun.star.beans.PropertyValue[0];
         
         try {
             xComponentLoader = (com.sun.star.frame.XComponentLoader)
                 UnoRuntime.queryInterface(
                     com.sun.star.frame.XComponentLoader.class, xDesktop);
             
             xComponent = xComponentLoader.loadComponentFromURL(
                 sURL, "_blank", 0, xEmptyArgs);
         }
         catch( Exception e) {
             e.printStackTrace(System.err);
         }
             
         return xComponent ;
     }
 }


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools