目录
python 操作 LibreOffice 控制pptx 一页一页播放
1. 安装 LibreOffice(麒麟系统基于 Debian/Ubuntu)
2. 如果只想安装 PPT 播放/转换(Impress)
1. 启动 LibreOffice UNO 服务
2. Python 控制播放uno安装方法:
运行效果
wps 播放ppt 收费,免费一个月
python 操作 LibreOffice 控制pptx 一页一页播放
1. 安装 LibreOffice(麒麟系统基于 Debian/Ubuntu)
sudo apt update
sudo apt install libreoffice
这样会安装 LibreOffice 全家桶(Writer、Calc、Impress等)。
2. 如果只想安装 PPT 播放/转换(Impress)
sudo apt update
sudo apt install libreoffice-impress
打开pptx:
libreoffice --impress my.pptx
播放pptx
libreoffice --impress --show aaa.pptx
可以的,Python 可以通过 UNO(Universal Network Objects)接口 控制 LibreOffice,做到一页一页播放 PPTX。
思路是:
-
用 Python 连接 LibreOffice 的 UNO 服务。
-
加载 PPTX 到 Impress。
-
控制幻灯片切换(
presentation.gotoNextSlide()
)。 -
可以结合
time.sleep()
实现定时翻页,也可以按逻辑随时翻页。
1. 启动 LibreOffice UNO 服务
在 麒麟 / Linux 下,先开一个 LibreOffice 监听端口:
libreoffice --impress --accept="socket,host=localhost,port=2002;urp;" --norestore --nologo &
libreoffice --impress --accept="socket,host=127.0.0.1,port=2002;urp;" /home/qilin/doc/aaa.pptx
这样 Python 才能通过 UNO 连接它。
2. Python 控制播放
uno安装方法:
pip uninstall uno
sudo apt remove python3-uno # 先卸载旧版本,避免冲突
sudo apt install libreoffice python3-uno
import uno
import time
from com.sun.star.beans import PropertyValuedef connect_uno():local_ctx = uno.getComponentContext()resolver = local_ctx.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", local_ctx)ctx = resolver.resolve("uno:socket,host=127.0.0.1,port=2002;urp;StarOffice.ComponentContext")return ctxdef control_ppt():ctx = connect_uno()smgr = ctx.ServiceManagerdesktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx)# 直接在脚本中打开文档,避免 doc=Noneurl = uno.systemPathToFileUrl("/home/qilin/doc/aaa.pptx")doc = desktop.loadComponentFromURL(url, "_blank", 0, ())# 获取 Presentation 对象presentation = doc.getPresentation()# 设置为窗口模式(不是全屏)presentation.IsFullScreen = Truepresentation.StartWithNavigator = False # 不显示导航器# 开始放映presentation.start()time.sleep(1) # 等放映启动# 获取 SlideShowControllerslide_show = presentation.getController()# 翻页time.sleep(2)slide_show.gotoNextSlide()time.sleep(2)slide_show.gotoNextSlide()if __name__ == "__main__":control_ppt()
运行效果
-
LibreOffice 会隐藏窗口启动(
Hidden=True
),你也可以改成Hidden=False
来可视化播放。 -
controller.gotoNext()
就是翻到下一页,支持gotoPrevious()
、jumpToFirstSlide()
等方法。 -
你可以替换
time.sleep()
用别的逻辑,比如外部信号控制翻页。
wps 播放ppt 收费,免费一个月
wpp /path/to/your.pptx
如果要直接全屏播放,可以加启动参数(不同版本可能略有差异):
wpp --show /path/to/your.pptx