从Python控制Libreoffice Impress

2024-09-28 03:20:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个面向演讲者和会议的应用程序。我用Python编写它,重点放在Linux上。在

我想知道在Linux下是否可以用Python控制LibreOffice Impress。在

我想启动LibreOffice Impress的一个实例,从Python应用程序加载一些.odp文件。然后,我希望能够从odp收到一些信息,比如:上一张,当前的和下一张幻灯片。或者在旅途中生成幻灯片的图像。在

LibreOffice终于要控制了。这是:使用方向键,左右移动幻灯片。在

想法是单独使用python,但我不介意使用外部库或框架。在

非常感谢。在


Tags: 文件实例图像信息应用程序重点libreoffice面向
3条回答

看看AOO UNO。您还可以检查一些应用程序项目,如docvert。这个框架是在LO和apacheoo之间共享的,但是由于两个项目的单独开发,可能会有一些细微的差异。在

对于类似代码的简单教程,您可以看看this project。其余的取决于你的实际需求,你应该学习相应的unoapi,它(几乎)是语言中立的。在

最后,我找到了一种使用Python以优雅而简单的方式解决这个问题的方法。Im使用一个套接字来连接Impress并控制它,而不是库或api。在

在文章的最后,你可以阅读全文,说明如何控制Impress。这很简单,也很神奇。在

您使用Python发送消息来打动(即在某个端口监听),它接收消息并根据您的请求执行操作。在

您必须在应用程序中启用此“远程控制”功能。我用这个解决了我的问题。在

谢谢你的回复!。在

LibreOffice Impress远程协议规范

通过UTF-8编码字符流进行通信。 使用librtu编码部分

TCP协议

有关设置和初始握手的更多特定于TCP的详细信息 写入,但实际的消息协议与蓝牙相同。在

消息格式

消息由一行或多行组成。第一行是消息描述, 进一步的行可以添加任何必要的数据。消息以空行结尾。在

即“消息\n\n”或“消息\n数据\n数据2…\n\n”

你必须一直读到一个空行(即双倍 新行)已到达,以允许将来的协议扩展。在

初始化

连接后,服务器发送“LO_server_server_PAIRED”。 (即“lou SERVER_SERVER_PAIRED \n \n”通过流发送。)

随后,如果正在运行幻灯片,服务器将发送任一幻灯片放映启动, 如果没有幻灯片放映,则幻灯片放映已完成。(详见下文。)

然后,当前服务器实现继续发送所有幻灯片注释和预览 给客户。(应更改此设置以防止内存问题,并进行预览 已实现请求机制。)

命令(客户端到服务器)

当 命令已发送。所有更改都将以信号形式返回给客户端。 (这是为了允许多个客户机请求不同的更改等情况)

[方括号]中的任何行都是可选的,如果不需要,应该省略。在

  • 下一个过渡
  • 上一次转换

  • 转到滑梯 幻灯片编号

  • 演示文稿开始

  • 演示文稿停止

  • presentation_resume//在演示文稿后继续,空白屏幕。

  • 演示文稿-空白屏幕 [Colour String]//为屏幕显示的颜色(默认值:黑色)。不是 //已实现,格式尚未定义。在

从gsoc2013开始,这些命令被扩展到现有协议中,因为服务器端可以容忍未知命令,所以这些扩展不会破坏向后兼容性

  • 指针开始//在屏幕上的初始位置(x,y)创建一个红点 initial_x//当用户第一次触摸屏幕时应该调用它 请注意x,y是相对于幻灯片大小的百分比(从0.0到1.0)
  • pointer_demissed//此函数消除屏幕上的指针红点,当用户停止触摸屏幕时应调用此函数
  • pointer_coordination//将指针的位置更新为current(x,y) current_x//请注意x,y是相对于幻灯片大小的百分比(从0.0到1.0) 除非screenupdater的性能得到显著改善,否则我们应该考虑限制 //远端

状态/数据(服务器到客户端)

  • 幻灯片放映结束//(如果开始时没有幻灯片放映,也会传输幻灯片)

  • slideshow_started//(如果幻灯片在启动时运行,也会传输) 幻灯片数量 当前幻灯片编号Ber

  • 幻灯片注释 幻灯片编号 [Notes]//注释是html文档,还可能包含\n换行符, //也就是说,客户应该一直读到空行。

  • slide_updated//服务器上的幻灯片已更改 currentSlideNumber

  • slide_preview//提供幻灯片的预览图像。 幻灯片编号 image//一个base64编码的png图像。

从gsoc2013开始,这些命令被扩展到现有的协议中,因为远程端也会忽略所有未知的命令(gsoc2012 android实现就是这样),因此保持了向后兼容性

  • slideshow_info//配对后,服务器端将发回当前演示文稿的标题 标题

@user3159253的答案描述了如何连接到演示文件,这是问题的第一部分。然后,要控制显示,需要使用XPresentation2XSlideShowController。下面是一些代码,使用另一个示例中的doc变量:

def runSlideShow(doc):
    presentation = doc.getPresentation()
    presentation.start()
    while not presentation.isRunning():
        pass
    presentation_controller = presentation.getController()
    presentation_controller.gotoNextSlide()
    print("isRunning() == %s" % presentation_controller.isRunning())

我从http://openoffice.2283327.n4.nabble.com/XPresentation2-returns-a-null-XSlideShowController-td2771599.html改编了这段代码。在

回复您的评论:您需要在代码底部添加以下内容, 类似于highlight.py. 你试过运行impress代码荧光笔的例子吗?在

^{pr2}$

相关问题 更多 >

    热门问题