Macros/Impress/001

    From The Document Foundation Wiki


    Other languages:

    Description

    This macro will insert a com.sun.star.drawing.RectangleShape[1] to the currently selected slide in an Impress document, with various custom presets as specified in the code.

    Code

    LibreOffice Basic

    Option Explicit
    
    Sub InsertRectangleShape()
        '''Insert a RectangleShape to the currently selected slide'''
    
        Dim oDoc As Object ' com.sun.star.lang.XComponent
        Dim oSlide As Object ' com.sun.star.drawing.XDrawPage
        Dim oRectangle As Object ' com.sun.star.drawing.RectangleShape
        Dim oSize As New com.sun.star.awt.Size
        Dim oPosition As New com.sun.star.awt.Point
    
        oDoc = ThisComponent
        oSlide = oDoc.CurrentController.CurrentPage
        oRectangle = oDoc.createInstance("com.sun.star.drawing.RectangleShape")
    
        With oSlide
            .add(oRectangle)
            oPosition.X = .7*(.Width - oSize.Width)
            oPosition.Y = .7*(.Height - oSize.Height)
        End With ' oSlide
    
        oSize.Width = 5000 ' 50 mm
        oSize.Height = 3000 ' 30 mm
        With oRectangle
            .setSize(oSize)
            .setPosition(oPosition)
            .FillColor = RGB(0, 0, 255) ' BLUE
            .FillStyle = com.sun.star.drawing.FillStyle.SOLID ' or .NONE
            .FillTransparence = 30 ' 0-100 from opaque to transparent
    
            .LineStyle = com.sun.star.drawing.LineStyle.SOLID ' or .NONE
            .LineWidth = 100 ' 1 mm
            .LineColor = RGB(0, 0, 0) ' BLACK
    
            .setName("MyBasicRectangle")
            .setString("Hello from Basic!")
            .CharFontName = "Liberation Sans"
            .CharColor = RGB(255, 255, 255) ' WHITE
            .ZOrder = 1
        End With ' oRectangle
    
    End Sub ' InsertRectangleShape


    Python

    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals
    from com.sun.star.awt import Size
    from com.sun.star.awt import Point
    from com.sun.star.drawing.FillStyle import SOLID as SOLID_FILLSTYLE
    from com.sun.star.drawing.LineStyle import SOLID as SOLID_LINESTYLE
    
    _GREEN, _BLACK, _RED = 0x00ff00, 0x000000, 0xff0000
    _VALUES = range(0,256,1)  # 0-255 integer values
    
    def _RGB(red: "# as 0-255", green: int, blue: "one-byte values") -> int:
        """Return a number color value made of red, green, and blue components"""
    
        if not (red in _VALUES and green in _VALUES and blue in _VALUES):
            raise ValueError
        return (red * 2**16) + (green * 2**8) + (blue * 2**0)
    
        # note:  ''red'', ''green'' and ''blue'' arguments of RGB function are one byte unsigned integer values.
    
    def InsertRectangleShape():
        """Insert a RectangleShape to the currently selected slide"""
    
        desktop = XSCRIPTCONTEXT.getDesktop()
        model = desktop.getCurrentComponent()
        slide = model.CurrentController.CurrentPage    
        rect = model.createInstance("com.sun.star.drawing.RectangleShape")
        slide.add(rect)  # Create the rectangle
    
        size = Size()
        size.Width = 5000  # 50 mm
        size.Height = 3000  # 50 mm
        
        position = Point()
        position.X = 0.9*(slide.Width - size.Width)
        position.Y = 0.5*(slide.Width - size.Width)
        
        rect.setSize(size)
        rect.setPosition(position)
    
        rect.FillStyle = SOLID_FILLSTYLE  # or NONE
        rect.FillColor = _RGB(255, 0, 0)  # _RED
        rect.FillTransparence = 30  # 0-100 from opaque to transparent
        rect.LineStyle = SOLID_LINESTYLE  # or NONE
        rect.LineWidth = 100  # 1 mm
        rect.LineColor = _RGB(0, 0, 0)  # _BLACK
        rect.setName("MyPythonRectangle")
        rect.setString("Hello from Python!")
        rect.CharFontName ='Lucida Calligraphy'
        rect.CharColor = _RGB(0, 255, 0)  # _GREEN
        rect.ZOrder = 1
    
        
    g_exportedScripts = (InsertRectangleShape,)

    ODP file to run macro

    Notes