目录
python 操作 LibreOffice 控制pptx 一页一页播放
1. 安装 LibreOffice(麒麟系统基于 Debian/Ubuntu)
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 PropertyValue
def 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 ctx
def control_ppt():
ctx = connect_uno()
smgr = ctx.ServiceManager
desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx)
# 直接在脚本中打开文档,避免 doc=None
url = uno.systemPathToFileUrl("/home/qilin/doc/aaa.pptx")
doc = desktop.loadComponentFromURL(url, "_blank", 0, ())
# 获取 Presentation 对象
presentation = doc.getPresentation()
# 设置为窗口模式(不是全屏)
presentation.IsFullScreen = True
presentation.StartWithNavigator = False # 不显示导航器
# 开始放映
presentation.start()
time.sleep(1) # 等放映启动
# 获取 SlideShowController
slide_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