我正在编写面向发言人和会议的应用程序。我用Python编写它并专注于Linux。
我想知道是否有可能以某种方式在Linux下用Python控制LibreOffice Impress。
我想从我的Python应用程序启动一个带有一些.odp文件的LibreOffice Impress实例。然后,我希望能够从odp接收一些信息,例如:上一张,当前一张和下一张幻灯片。或者以某种方式在旅途中生成幻灯片的图像。
最后,我想实时控制LibreOffice。这是:使用方向键移动幻灯片;左右。
这个想法是单独使用python,但我不介意使用外部库或框架。
非常感谢。
答案 0 :(得分:0)
看看AOO UNO。您还可以检查一些应用程序项目,例如docvert。这个框架在LO和Apache OO之间共享,但由于两个项目的单独开发,可能会有一些细微的差别。
对于类似教程的简单代码,您可以查看this project。其余的取决于您的实际需求,您应该学习相应的UNO API,它(几乎)与语言无关。
答案 1 :(得分:0)
来自@ user3159253的答案描述了如何连接到演示文稿文件,这是您问题的第一部分。然后,要控制演示文稿,您需要使用XPresentation2和XSlideShowController。以下是使用其他示例中的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())
回复您的评论:您需要在代码底部添加以下内容, 类似于highlight.py中的内容。 您是否尝试过运行impress-code-highlighter示例?
def do_runSlideShow(*args):
ctx = XSCRIPTCONTEXT
doc = ctx.getDocument()
runSlideShow(doc)
g_exportedScripts = (do_runSlideShow,)
if __name__ == "__main__":
doc = remote_get_doc()
runSlideShow(doc)
答案 2 :(得分:0)
最后,我找到了一种使用Python以优雅和简单的方式解决这个问题的方法。我使用套接字连接到Impress并控制它,而不是库或API。
在帖子的最后,您可以阅读指示如何以这种方式控制Impress的全文。这很简单,也很棒。
您使用Python向Impress发送消息(即在某个端口侦听),它会根据您的请求接收消息并执行操作。
您必须在应用中启用此“遥控”功能。我用这个解决了我的问题。
感谢您的回复!
通信是通过UTF-8编码的字符流。 (在LibreOffice部分中使用RTL_TEXTENCODING_UTF8。)
有关设置和初始握手的更多特定于TCP的详细信息 写的,但实际的消息协议与蓝牙相同。
消息由一行或多行组成。第一行是消息描述, 更多行可以添加任何必要的数据。空行结束消息。
即。 “MESSAGE \ n \ n”或“MESSAGE \ nDATA \ nDATA2 ... \ n \ n”
你必须继续阅读消息,直到空行(即双倍) 到达新线)以允许将来的协议扩展。
连接后,服务器发送“LO_SERVER_SERVER_PAIRED”。 (即,通过流发送“LO_SERVER_SERVER_PAIRED \ n \ n”。)
随后,如果幻灯片正在运行,服务器将发送slideshow_started, 如果没有幻灯片正在运行,则幻灯片放映完成。 (详见下文。)
然后,当前服务器实现将继续发送所有幻灯片备注和预览 给客户。 (这应该更改以防止内存问题和预览 请求机制已实施。)
当a时,客户端不应该假设服务器的状态已经改变 命令已发送。所有更改都将发回给客户。 (这是为了允许多个客户请求不同的更改等情况。)
[方括号]中的任何行都是可选的,如果不需要,则应省略。
transition_previous
goto_slide SLIDE_NUMBER
presentation_start
presentation_stop
presentation_resume //在presentation_blank_screen之后恢复。
slideshow_finished //(如果启动时未播放幻灯片,也会传输。)
slideshow_started //(如果幻灯片正在启动时运行,也会传输。) numberOfSlides currentSlideNumber
slide_notes slideNumber [注意] //注释是一个html文档,也可能包含\ n换行符, //即客户应继续阅读,直至到达空行。
slide_updated //幻灯片服务器已更改 currentSlideNumber
slide_preview //提供幻灯片的预览图像。 slideNumber image // A Base 64编码的png图像。