1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski //*************************************************************************** 25*b1cdbd2cSJim Jagielski // comment: Step 1: bootstrap UNO and get the remote component context 26*b1cdbd2cSJim Jagielski // Step 2: open an empty text document 27*b1cdbd2cSJim Jagielski // Step 3: get the drawpage an insert some shapes 28*b1cdbd2cSJim Jagielski //*************************************************************************** 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski import java.lang.Math; 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski public class SDraw { 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielski main(String args[])38*b1cdbd2cSJim Jagielski public static void main(String args[]) { 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski //oooooooooooooooooooooooooooStep 1oooooooooooooooooooooooooooooooooooooooo 41*b1cdbd2cSJim Jagielski // bootstrap UNO and get the remote component context. The context can 42*b1cdbd2cSJim Jagielski // be used to get the service manager 43*b1cdbd2cSJim Jagielski //************************************************************************* 44*b1cdbd2cSJim Jagielski com.sun.star.uno.XComponentContext xContext = null; 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski try { 47*b1cdbd2cSJim Jagielski // get the remote office component context 48*b1cdbd2cSJim Jagielski xContext = com.sun.star.comp.helper.Bootstrap.bootstrap(); 49*b1cdbd2cSJim Jagielski System.out.println("Connected to a running office ..."); 50*b1cdbd2cSJim Jagielski } 51*b1cdbd2cSJim Jagielski catch( Exception e) { 52*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 53*b1cdbd2cSJim Jagielski System.exit(1); 54*b1cdbd2cSJim Jagielski } 55*b1cdbd2cSJim Jagielski 56*b1cdbd2cSJim Jagielski com.sun.star.lang.XComponent xDrawDoc = null; 57*b1cdbd2cSJim Jagielski com.sun.star.drawing.XDrawPage xDrawPage = null; 58*b1cdbd2cSJim Jagielski 59*b1cdbd2cSJim Jagielski //oooooooooooooooooooooooooooStep 2oooooooooooooooooooooooooooooooooooooooo 60*b1cdbd2cSJim Jagielski // open an empty document. In this case it's a draw document. 61*b1cdbd2cSJim Jagielski // For this purpose an instance of com.sun.star.frame.Desktop 62*b1cdbd2cSJim Jagielski // is created. It's interface XDesktop provides the XComponentLoader, 63*b1cdbd2cSJim Jagielski // which is used to open the document via loadComponentFromURL 64*b1cdbd2cSJim Jagielski //************************************************************************* 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski //Open document 67*b1cdbd2cSJim Jagielski //Draw 68*b1cdbd2cSJim Jagielski System.out.println("Opening an empty Draw document ..."); 69*b1cdbd2cSJim Jagielski xDrawDoc = openDraw(xContext); 70*b1cdbd2cSJim Jagielski 71*b1cdbd2cSJim Jagielski //oooooooooooooooooooooooooooStep 3oooooooooooooooooooooooooooooooooooooooo 72*b1cdbd2cSJim Jagielski // get the drawpage an insert some shapes. 73*b1cdbd2cSJim Jagielski // the documents DrawPageSupplier supplies the DrawPage vi IndexAccess 74*b1cdbd2cSJim Jagielski // To add a shape get the MultiServiceFaktory of the document, create an 75*b1cdbd2cSJim Jagielski // instance of the ShapeType and add it to the Shapes-container 76*b1cdbd2cSJim Jagielski // provided by the drawpage 77*b1cdbd2cSJim Jagielski //************************************************************************* 78*b1cdbd2cSJim Jagielski 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski // get the drawpage of drawing here 81*b1cdbd2cSJim Jagielski try { 82*b1cdbd2cSJim Jagielski System.out.println( "getting Drawpage" ); 83*b1cdbd2cSJim Jagielski com.sun.star.drawing.XDrawPagesSupplier xDPS = 84*b1cdbd2cSJim Jagielski (com.sun.star.drawing.XDrawPagesSupplier)UnoRuntime.queryInterface( 85*b1cdbd2cSJim Jagielski com.sun.star.drawing.XDrawPagesSupplier.class, xDrawDoc); 86*b1cdbd2cSJim Jagielski com.sun.star.drawing.XDrawPages xDPn = xDPS.getDrawPages(); 87*b1cdbd2cSJim Jagielski com.sun.star.container.XIndexAccess xDPi = 88*b1cdbd2cSJim Jagielski (com.sun.star.container.XIndexAccess)UnoRuntime.queryInterface( 89*b1cdbd2cSJim Jagielski com.sun.star.container.XIndexAccess.class, xDPn); 90*b1cdbd2cSJim Jagielski xDrawPage = (com.sun.star.drawing.XDrawPage)UnoRuntime.queryInterface( 91*b1cdbd2cSJim Jagielski com.sun.star.drawing.XDrawPage.class, xDPi.getByIndex(0)); 92*b1cdbd2cSJim Jagielski } catch ( Exception e ) { 93*b1cdbd2cSJim Jagielski System.err.println( "Couldn't create document"+ e ); 94*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 95*b1cdbd2cSJim Jagielski } 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski createSequence(xDrawDoc, xDrawPage); 98*b1cdbd2cSJim Jagielski 99*b1cdbd2cSJim Jagielski //put something on the drawpage 100*b1cdbd2cSJim Jagielski System.out.println( "inserting some Shapes" ); 101*b1cdbd2cSJim Jagielski com.sun.star.drawing.XShapes xShapes = (com.sun.star.drawing.XShapes) 102*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( 103*b1cdbd2cSJim Jagielski com.sun.star.drawing.XShapes.class, xDrawPage); 104*b1cdbd2cSJim Jagielski xShapes.add(createShape(xDrawDoc,2000,1500,1000,1000,"Line",0)); 105*b1cdbd2cSJim Jagielski xShapes.add(createShape(xDrawDoc,3000,4500,15000,1000,"Ellipse",16711680)); 106*b1cdbd2cSJim Jagielski xShapes.add(createShape(xDrawDoc,5000,3500,7500,5000,"Rectangle",6710932)); 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski //************************************************************************* 109*b1cdbd2cSJim Jagielski System.out.println("done"); 110*b1cdbd2cSJim Jagielski System.exit(0); 111*b1cdbd2cSJim Jagielski } 112*b1cdbd2cSJim Jagielski openDraw( com.sun.star.uno.XComponentContext xContext)113*b1cdbd2cSJim Jagielski public static com.sun.star.lang.XComponent openDraw( 114*b1cdbd2cSJim Jagielski com.sun.star.uno.XComponentContext xContext) 115*b1cdbd2cSJim Jagielski { 116*b1cdbd2cSJim Jagielski com.sun.star.frame.XComponentLoader xCLoader; 117*b1cdbd2cSJim Jagielski com.sun.star.text.XTextDocument xDoc = null; 118*b1cdbd2cSJim Jagielski com.sun.star.lang.XComponent xComp = null; 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski try { 121*b1cdbd2cSJim Jagielski // get the remote office service manager 122*b1cdbd2cSJim Jagielski com.sun.star.lang.XMultiComponentFactory xMCF = 123*b1cdbd2cSJim Jagielski xContext.getServiceManager(); 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski Object oDesktop = xMCF.createInstanceWithContext( 126*b1cdbd2cSJim Jagielski "com.sun.star.frame.Desktop", xContext); 127*b1cdbd2cSJim Jagielski 128*b1cdbd2cSJim Jagielski xCLoader = (com.sun.star.frame.XComponentLoader) 129*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(com.sun.star.frame.XComponentLoader.class, 130*b1cdbd2cSJim Jagielski oDesktop); 131*b1cdbd2cSJim Jagielski com.sun.star.beans.PropertyValue szEmptyArgs[] = 132*b1cdbd2cSJim Jagielski new com.sun.star.beans.PropertyValue[0]; 133*b1cdbd2cSJim Jagielski String strDoc = "private:factory/sdraw"; 134*b1cdbd2cSJim Jagielski xComp = xCLoader.loadComponentFromURL(strDoc, "_blank", 0, szEmptyArgs); 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski } catch(Exception e){ 137*b1cdbd2cSJim Jagielski System.err.println(" Exception " + e); 138*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 139*b1cdbd2cSJim Jagielski } 140*b1cdbd2cSJim Jagielski 141*b1cdbd2cSJim Jagielski return xComp; 142*b1cdbd2cSJim Jagielski } 143*b1cdbd2cSJim Jagielski createShape( com.sun.star.lang.XComponent xDocComp, int height, int width, int x, int y, String kind, int col)144*b1cdbd2cSJim Jagielski public static com.sun.star.drawing.XShape createShape( 145*b1cdbd2cSJim Jagielski com.sun.star.lang.XComponent xDocComp, int height, int width, int x, 146*b1cdbd2cSJim Jagielski int y, String kind, int col) 147*b1cdbd2cSJim Jagielski { 148*b1cdbd2cSJim Jagielski //possible values for kind are 'Ellipse', 'Line' and 'Rectangle' 149*b1cdbd2cSJim Jagielski com.sun.star.awt.Size size = new com.sun.star.awt.Size(); 150*b1cdbd2cSJim Jagielski com.sun.star.awt.Point position = new com.sun.star.awt.Point(); 151*b1cdbd2cSJim Jagielski com.sun.star.drawing.XShape xShape = null; 152*b1cdbd2cSJim Jagielski 153*b1cdbd2cSJim Jagielski //get MSF 154*b1cdbd2cSJim Jagielski com.sun.star.lang.XMultiServiceFactory xDocMSF = 155*b1cdbd2cSJim Jagielski (com.sun.star.lang.XMultiServiceFactory) UnoRuntime.queryInterface( 156*b1cdbd2cSJim Jagielski com.sun.star.lang.XMultiServiceFactory.class, xDocComp ); 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski try { 159*b1cdbd2cSJim Jagielski Object oInt = xDocMSF.createInstance("com.sun.star.drawing." 160*b1cdbd2cSJim Jagielski +kind + "Shape"); 161*b1cdbd2cSJim Jagielski xShape = (com.sun.star.drawing.XShape)UnoRuntime.queryInterface( 162*b1cdbd2cSJim Jagielski com.sun.star.drawing.XShape.class, oInt); 163*b1cdbd2cSJim Jagielski size.Height = height; 164*b1cdbd2cSJim Jagielski size.Width = width; 165*b1cdbd2cSJim Jagielski position.X = x; 166*b1cdbd2cSJim Jagielski position.Y = y; 167*b1cdbd2cSJim Jagielski xShape.setSize(size); 168*b1cdbd2cSJim Jagielski xShape.setPosition(position); 169*b1cdbd2cSJim Jagielski 170*b1cdbd2cSJim Jagielski } catch ( Exception e ) { 171*b1cdbd2cSJim Jagielski System.err.println( "Couldn't create instance "+ e ); 172*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 173*b1cdbd2cSJim Jagielski } 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski com.sun.star.beans.XPropertySet xSPS = (com.sun.star.beans.XPropertySet) 176*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( 177*b1cdbd2cSJim Jagielski com.sun.star.beans.XPropertySet.class, xShape); 178*b1cdbd2cSJim Jagielski 179*b1cdbd2cSJim Jagielski try { 180*b1cdbd2cSJim Jagielski xSPS.setPropertyValue("FillColor", new Integer(col)); 181*b1cdbd2cSJim Jagielski } catch (Exception e) { 182*b1cdbd2cSJim Jagielski System.err.println("Can't change colors " + e); 183*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 184*b1cdbd2cSJim Jagielski } 185*b1cdbd2cSJim Jagielski 186*b1cdbd2cSJim Jagielski return xShape; 187*b1cdbd2cSJim Jagielski } 188*b1cdbd2cSJim Jagielski createSequence( com.sun.star.lang.XComponent xDocComp, com.sun.star.drawing.XDrawPage xDP)189*b1cdbd2cSJim Jagielski public static com.sun.star.drawing.XShape createSequence( 190*b1cdbd2cSJim Jagielski com.sun.star.lang.XComponent xDocComp, com.sun.star.drawing.XDrawPage xDP) 191*b1cdbd2cSJim Jagielski { 192*b1cdbd2cSJim Jagielski com.sun.star.awt.Size size = new com.sun.star.awt.Size(); 193*b1cdbd2cSJim Jagielski com.sun.star.awt.Point position = new com.sun.star.awt.Point(); 194*b1cdbd2cSJim Jagielski com.sun.star.drawing.XShape xShape = null; 195*b1cdbd2cSJim Jagielski com.sun.star.drawing.XShapes xShapes = (com.sun.star.drawing.XShapes) 196*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(com.sun.star.drawing.XShapes.class, xDP); 197*b1cdbd2cSJim Jagielski int height = 3000; 198*b1cdbd2cSJim Jagielski int width = 3500; 199*b1cdbd2cSJim Jagielski int x = 1900; 200*b1cdbd2cSJim Jagielski int y = 20000; 201*b1cdbd2cSJim Jagielski Object oInt = null; 202*b1cdbd2cSJim Jagielski int r = 40; 203*b1cdbd2cSJim Jagielski int g = 0; 204*b1cdbd2cSJim Jagielski int b = 80; 205*b1cdbd2cSJim Jagielski 206*b1cdbd2cSJim Jagielski //get MSF 207*b1cdbd2cSJim Jagielski com.sun.star.lang.XMultiServiceFactory xDocMSF = 208*b1cdbd2cSJim Jagielski (com.sun.star.lang.XMultiServiceFactory)UnoRuntime.queryInterface( 209*b1cdbd2cSJim Jagielski com.sun.star.lang.XMultiServiceFactory.class, xDocComp ); 210*b1cdbd2cSJim Jagielski 211*b1cdbd2cSJim Jagielski for (int i=0; i<370; i=i+25) { 212*b1cdbd2cSJim Jagielski try{ 213*b1cdbd2cSJim Jagielski oInt = xDocMSF.createInstance("com.sun.star.drawing.EllipseShape"); 214*b1cdbd2cSJim Jagielski xShape = (com.sun.star.drawing.XShape)UnoRuntime.queryInterface( 215*b1cdbd2cSJim Jagielski com.sun.star.drawing.XShape.class, oInt); 216*b1cdbd2cSJim Jagielski size.Height = height; 217*b1cdbd2cSJim Jagielski size.Width = width; 218*b1cdbd2cSJim Jagielski position.X = (x+(i*40)); 219*b1cdbd2cSJim Jagielski position.Y = 220*b1cdbd2cSJim Jagielski (new Float(y+(Math.sin((i*Math.PI)/180))*5000)).intValue(); 221*b1cdbd2cSJim Jagielski xShape.setSize(size); 222*b1cdbd2cSJim Jagielski xShape.setPosition(position); 223*b1cdbd2cSJim Jagielski 224*b1cdbd2cSJim Jagielski } catch ( Exception e ) { 225*b1cdbd2cSJim Jagielski // Some exception occures.FAILED 226*b1cdbd2cSJim Jagielski System.err.println( "Couldn't get Shape "+ e ); 227*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 228*b1cdbd2cSJim Jagielski } 229*b1cdbd2cSJim Jagielski 230*b1cdbd2cSJim Jagielski b=b+8; 231*b1cdbd2cSJim Jagielski 232*b1cdbd2cSJim Jagielski com.sun.star.beans.XPropertySet xSPS = (com.sun.star.beans.XPropertySet) 233*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class, 234*b1cdbd2cSJim Jagielski xShape); 235*b1cdbd2cSJim Jagielski 236*b1cdbd2cSJim Jagielski try { 237*b1cdbd2cSJim Jagielski xSPS.setPropertyValue("FillColor", new Integer(getCol(r,g,b))); 238*b1cdbd2cSJim Jagielski xSPS.setPropertyValue("Shadow", new Boolean(true)); 239*b1cdbd2cSJim Jagielski } catch (Exception e) { 240*b1cdbd2cSJim Jagielski System.err.println("Can't change colors " + e); 241*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 242*b1cdbd2cSJim Jagielski } 243*b1cdbd2cSJim Jagielski xShapes.add(xShape); 244*b1cdbd2cSJim Jagielski } 245*b1cdbd2cSJim Jagielski 246*b1cdbd2cSJim Jagielski com.sun.star.drawing.XShapeGrouper xSGrouper = 247*b1cdbd2cSJim Jagielski (com.sun.star.drawing.XShapeGrouper)UnoRuntime.queryInterface( 248*b1cdbd2cSJim Jagielski com.sun.star.drawing.XShapeGrouper.class, xDP); 249*b1cdbd2cSJim Jagielski 250*b1cdbd2cSJim Jagielski xShape = xSGrouper.group(xShapes); 251*b1cdbd2cSJim Jagielski 252*b1cdbd2cSJim Jagielski return xShape; 253*b1cdbd2cSJim Jagielski } 254*b1cdbd2cSJim Jagielski getCol(int r, int g, int b)255*b1cdbd2cSJim Jagielski public static int getCol(int r, int g, int b) { 256*b1cdbd2cSJim Jagielski return r*65536+g*256+b; 257*b1cdbd2cSJim Jagielski } 258*b1cdbd2cSJim Jagielski } 259*b1cdbd2cSJim Jagielski 260*b1cdbd2cSJim Jagielski 261*b1cdbd2cSJim Jagielski 262