API/Samples/Java/Draw/Impress/SDraw

    From The Document Foundation Wiki
    < API‎ | Samples‎ | Java

    Open Drawing documents

    you need to specifiy the URL of the document to load for loadComponentFromURL() as “private:factory/sdraw”

    Draw document structure

    Draw documents maintain their drawing content on draw pages, master pages and layers. If a new draw document is opened, it contains one slide that corresponds to a <idls>com.sun.star.drawing.DrawPage</idls> service. Switching to Master View brings up the master page handled by the service <idls>com.sun.star.drawing.MasterPage</idls>. The Layer View allows access to layers to structure your drawings. These layers can be controlled through <idls>com.sun.star.drawing.Layer</idls> and <idls>com.sun.star.drawing.LayerManager</idls>.

    The <idls>com.sun.star.drawing.DrawingDocument</idls> service has following interfaces for this purposes:

     XDrawPagesSupplier: 
     XMasterPagesSupplier: 
     XLayerSupplier: 
     XStyleFamiliesSupplier: 
    

    <idl>com.sun.star.drawing.XDrawPageSupplier</idl> and <idl>com.sun.star.drawing.XMasterPagesSupplier</idl> supplies XDrawPages and <idl>com.sun.star.drawing.MasterPage</idl> via <idl>com.sun.star.container.XIndexAccess</idl>. Each DrawPage has support <idl>com.sun.star.drawing.XShapes</idl> interface to manage shapes in this DrawPage.

    The brief summary to access the single shape in Drawing document might be described as:

    1. Open Drawing document
    2. Querying DrawPagesSupplier interface of Drawing document
    3. Call getDrawPages() method of DrawPagesSupplier to get DrawPages
    4. Querying XIndexAccess interface of DrawPages
    5. Single DrawPage can be accessd through method of <idlm>com.sun.star.container.XXIndexAccess:getByIndex</idlm>
    6. However, <idlm>com.sun.star.container.XIndexAccess:getByIndex</idlm> method returns ANY type, you should querying <idl>com.sun.star.drawing.DrawPage</idl> interface before using it.
    7. Going a little bit further, Querying <idl>com.sun.star.drawing.XShapes</idl> interface of <idl>com.sun.star.drawing.DrawPage</idl> to gain access to the list of <idl>com.sun.star.drawing.Shapes</idl>

    Shapes

    Drawings consist of shapes on draw pages. Shapes are drawing elements, such as rectangles, circles, polygons, and lines. To create a drawing, get a shape by its service name at the ServiceFactory of a drawing document and add it to the appropriate DrawPage.

    //get MSF
            com.sun.star.lang.XMultiServiceFactory xDocMSF =
                (com.sun.star.lang.XMultiServiceFactory)UnoRuntime.queryInterface(
                    com.sun.star.lang.XMultiServiceFactory.class, xDocComp );
    
            ...
    
            oInt = xDocMSF.createInstance("com.sun.star.drawing.EllipseShape");
            xShape = (com.sun.star.drawing.XShape)UnoRuntime.queryInterface(
                        com.sun.star.drawing.XShape.class, oInt);
                   
            ...
    
            // set the size and positions
            size.Height = height;
            size.Width = width;
            position.X = x;
            position.Y = y;
            xShape.setSize(size);
            xShape.setPosition(position);

    ServiceFactory can create several kind of Shape Service, they could be LineShape, PolyLineShape, RectangleShape, TextShape etc.

    File:ShapeType1.png

    File:ShapeType2.png

    Example project download

    File:SDraw.zip

    See Also

    Apache Feather Logo.svg

    This work is licensed under the Apache License version 2.0