Создайте блок-схему в LibreOffice с помощью Python

Существует множество примеров того, как использовать Python для управления текстовым документом и электронной таблицей LibreOffice, но очень мало документации о том, как использовать программу для рисования. Я пытаюсь понять, как нарисовать блок-схему или хотя бы некоторые фигуры в LibreOffice с помощью Python. Я использую Windows 10 и Python 3.3, поставляемый с LibreOffice 5.

Существует очень хороший пример использования электронной таблицы Пример Python для LibreOffice

В примере следующие строки являются общими, если вы используете текстовый документ, электронную таблицу, чертеж или другие документы.

import socket  
import uno
localContext = uno.getComponentContext()
resolver =     localContext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", localContext )
ctx = resolver.resolve( "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext" )
smgr = ctx.ServiceManager
desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx)
model = desktop.getCurrentComponent()

Следующий код также был в примере для изменения программы работы с электронными таблицами, и он прекрасно работает. Код помещает «Hello World» и число в электронную таблицу.

cell1 = active_sheet.getCellRangeByName("C4")
cell1.String = "Hello world"
cell2 = active_sheet.getCellRangeByName("E6")
cell2.Value = cell2.Value + 1

Существуют ли аналогичные команды для программы рисования, чтобы получить активный лист и получить список фигур, которые можно нарисовать? Я могу искать не в том месте, но не нашел никакой документации для программы рисования.


person John Bessire    schedule 25.04.2016    source источник


Ответы (1)


Вот рабочий пример Python:

import uno

def create_shape(document, x, y, width, height, shapeType):
    shape = document.createInstance(shapeType)
    aPoint = uno.createUnoStruct("com.sun.star.awt.Point")
    aPoint.X, aPoint.Y = x, y
    aSize = uno.createUnoStruct("com.sun.star.awt.Size")
    aSize.Width, aSize.Height = width, height
    shape.setPosition(aPoint)
    shape.setSize(aSize)
    return shape

def insert_shape():
    document = XSCRIPTCONTEXT.getDocument()
    drawPage = document.getDrawPages().getByIndex(0)
    shape = create_shape(
        document, 0, 0, 10000, 5000, "com.sun.star.drawing.RectangleShape")
    drawPage.add(shape)
    shape.setString("My new RectangleShape");
    shape.setPropertyValue("CornerRadius", 1000)
    shape.setPropertyValue("Shadow", True)
    shape.setPropertyValue("ShadowXDistance", 250)
    shape.setPropertyValue("ShadowYDistance", 250)
    shape.setPropertyValue("FillColor", int("C0C0C0", 16))  # blue
    shape.setPropertyValue("LineColor", int("000000", 16))  # black
    shape.setPropertyValue("Name", "Rounded Gray Rectangle")

# Functions that can be called from Tools -> Macros -> Run Macro.
g_exportedScripts = insert_shape,

Достаточно полная справочная документация находится по адресу https://wiki.openoffice.org/wiki/Documentation/DevGuide/Drawings/Working_with_Drawing_Documents. Обратите особое внимание на страницы «Фигуры» (обратите внимание на навигацию в правой части страницы). Во-первых, есть страница со списком типов фигур, как вы и просили.

Поскольку документация Python-UNO несколько ограничена, вам нужно привыкнуть к чтению примеров на Java или Basic и адаптации кода к Python, как я сделал выше.

person Jim K    schedule 27.04.2016