使用 Python 在 LibreOffice 中创建流程图

2024-01-02

关于如何使用 Python 控制 LibreOffice 文本文档和电子表格的示例有很多,但关于如何使用绘图程序的文档却很少。我试图弄清楚如何使用 Python 在 LibreOffice 中绘制流程图或至少某些形状。我使用的是 Windows 10 和 LibreOffice 5 附带的 Python 3.3。

有一个很好的例子说明如何使用电子表格LibreOffice Python 示例 http://christopher5106.github.io/office/2015/12/06/openoffice-libreoffice-automate-your-office-tasks-with-python-macros.html

在示例中,如果您使用文本文档、电子表格、绘图或其他文档,则以下行很常见。

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

对于绘图程序是否有一些类似的命令来获取活动工作表并获取可以绘制的形状列表?我可能找错了地方,但没有找到绘图程序的任何文档。


这是一个有效的 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 https://wiki.openoffice.org/wiki/Documentation/DevGuide/Drawings/Working_with_Drawing_Documents。特别查看“形状”页面(注意页面右侧的导航)。一方面,有一个页面根据您的要求提供了形状类型列表。

由于 Python-UNO 文档有些有限,因此您需要习惯阅读 Java 或 Basic 中的示例并将代码改编为 Python,正如我上面所做的那样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python 在 LibreOffice 中创建流程图 的相关文章

随机推荐

  • Sidekiq Perform_later 无法与操作电缆一起使用

    我在我的应用程序中设置了基本的有线聊天功能 我有一个 after create commit 回调 它将消息发送到要广播到适当通道的作业 当设置为perform now时它可以正常工作 但当设置为perform later时则不起作用 Si
  • 将两个变量相除得到 NaN

    我正在学习 JavaScript 我当前的代码似乎适用于总价值 但我无法让我的部门代码发挥作用来显示每人的成本是多少 这似乎是问题所在 document getElementById costeach innerHTML Price eac
  • Android 浅色/深色主题操作栏文本

    我正在我的 Playground Android 应用程序中实现深色主题 并且正在努力将操作栏文本颜色设置为白色 下面是我的风格和颜色 操作栏的背景遵循 colorPrimary 这很棒 然而 两种颜色 浅色和深色 都是非常深色的颜色 并且
  • Android,从不同的活动在缓存中保存和加载位图

    我有一个需要在新活动中显示的位图 因此我对其进行缓存 并在打开的活动中尝试加载它 但出现 nullPointerException 我在这里保存图像 File cacheDir getBaseContext getCacheDir File
  • 如何压缩谷歌驱动器中的文件?

    有什么方法可以将大文件压缩成谷歌驱动器中较小的 zip 或 tar gz 文件吗 我试过谷歌应用脚本 https stackoverflow com questions 13259041 creating a zip file inside
  • 为什么 Chrome 不允许 Web Workers 在 JavaScript 中运行?

    如果我尝试通过 JavaScript 文件使用 Web Worker Chrome 会抛出错误 未捕获的安全错误 无法创建工作程序 无法从源 null 访问 path worker js 处的脚本 但如果我们直接通过 HTML 使用 它就允
  • JSF 2.0 和多重提交问题

    有人告诉我JSF 2 0自动处理多重提交问题 是对的吗 如果是 JSF 2 0 是如何做到这一点的 如果不是 在处理这个问题时必须注意哪些事项 以免留下任何陷阱 Thanks 这是由以下人员请求和维护的JSF 规范问题 559 http j
  • Magento 获取购物车单件商品价格(含税)税

    我有一个很奇怪的问题 我希望有人能帮助我解决这个问题 以下是影响我的问题的主要配置设置 管理面板中显示的目录价格包含税费 前端显示的目录价格包含税费 购物车中的商品显示不含税 因此它单独显示在小计附近 到目前为止一切都运行良好 问题出在自定
  • ESlint 抛出错误而不是警告

    是否可以使用 Eslint 抛出错误而不是警告 我正在与一个create react app并希望在我的团队中有一个非常严格的 lint 政策 并认为这可能是一个好的开始 那可能吗 max warnings可以达到这个目的 max warn
  • 为什么 UnixSystem().getUsername() 返回 null(Docker 中的 OpenJDK 17)

    以下代码适用于 OSX var hadoopInputFile org apache parquet hadoop util HadoopInputFile fromPath parquetPath new Configuration 但在
  • 日期时间中不包括周末

    我只想知道如何计算日期时间而不包括周末 目前正在制作一个图书馆系统 图书馆周末不开放 这就是为什么我需要计算不包括周末的日期 前任 2015 年 3 月 13 日 星期五 我借了 5 天 所以 返回日期应该是 03 20 15 星期五 因为
  • Django Rest框架如何更改:“此字段不能为空。”错误信息

    当我尝试创建新的用户模型时 我收到以下验证错误响应 HTTP 400 Bad Request Allow POST OPTIONS Content Type application JSON Vary Accept phone This f
  • NGINX try_files + 别名指令

    我正在尝试使用 php 代码向站点的 blog 子目录提供请求 该代码位于文档根目录之外的文件夹中 这是我的主机配置 server server name local test ru root home alex www test2 loc
  • ActionListener 未实现

    JFrameWithPanel 不是抽象的 不会重写 java awt event ActionListener 中的抽象方法 actionPerformed java awt event ActionEvent 公共类 JFrameWit
  • Javascript 中 (1).toString() 和 1.toString() 内部发生了什么[重复]

    这个问题在这里已经有答案了 在 JavaScript 控制台中 如果输入以下内容 1 toString Uncaught SyntaxError Invalid or unexpected token 1 toString 1 这两条语句在
  • css 圆圈内中间对齐图标字体

    我正在尝试将图标居中对齐在圆圈内 我正在使用 font awesome 的图标字体 我的代码如下 ul li a href i class icon 5x icon camera i a li li a href i class icon
  • Ruby - 按属性降序对对象数组进行排序

    我有这个 Json 对象数组 students id 1 first name John last name Doe age 14 id 2 first name Victoria last name Secret age 9 id 3 f
  • 在android中动态添加选项卡

    在我的应用程序中 我想通过单击按钮动态添加选项卡 我该如何添加 其余的 GUI 应与原来相同 仅应添加选项卡 这是 xml 文件
  • 为什么在映射定义中需要转义 bar Ex 命令分隔符,但在 Vim 的命令行中不需要转义?

    我不明白为什么以下命令会做不同的事情 粘贴在 vimrc文件中 这两个命令都定义了通过按触发的映射的两个版本t在普通模式下 nnoremap t call search m a b W
  • 使用 Python 在 LibreOffice 中创建流程图

    关于如何使用 Python 控制 LibreOffice 文本文档和电子表格的示例有很多 但关于如何使用绘图程序的文档却很少 我试图弄清楚如何使用 Python 在 LibreOffice 中绘制流程图或至少某些形状 我使用的是 Windo