python实现前端ppt/pptx预览(win32com.client)

一:实现原理

将ppt/pptx转换成pdf,利用前端iframe标签实现预览

二:ppt转换为pdf

将目标文件夹下的ppt/pptx全部转换为pdf

import win32com.client
import os

def ppt_pdf(filename, output_filename):
    ppt_app = win32com.client.Dispatch('PowerPoint.Application')
    ppt = ppt_app.Presentations.Open(filename)
    ppt.SaveAs(output_filename, 32)
    ppt_app.Quit()

dirname = 'D:/'    # ppt路径
filenames = os.listdir(dirname)   # 所有文件

for filename in filenames:
    if filename.endswith('ppt') or filename.endswith('pptx'):    # 遍历寻找ppt/pptx
        base, ext = filename.split('.')
        new_name = base + '.pdf'
        filename = dirname + '/' + filename           
        output_filename = dirname + '/' + new_name    # pdf保存路径
        ppt_pdf(filename, output_filename)

参考文章:

http://t.csdn.cn/RzilB

小tips:

如果是在多线程里调用win32com包可能会出现这个报错:

pywintypes.com_error: (-2147221008, '尚未调用 CoInitialize。', None, None)

解决方法是导入 pythoncom 库,然后线程前面加一句这个即可 pythoncom.CoInitialize()

参考文章:

http://t.csdn.cn/i1Cqa

本文的话就是这样:

import pythoncom  # 增加导入

def ppt_pdf(filename, output_filename):
    pythoncom.CoInitialize()    # 增加这句
    ppt_app = win32com.client.Dispatch('PowerPoint.Application')
    ppt = ppt_app.Presentations.Open(filename)
    ppt.SaveAs(output_filename, 32)
    ppt_app.Quit()

三:前端预览

后端传输文件名file_name给前端HTML

(这里是由于我想要动态改变预览的pdf链接,正常直接用iframe标签打开预览即可)

content = {
            'file_name': file_name,
            }
return render_template('file_name.html', **content)

 前端获取后拼接好地址给iframe标签的src,这样就能实现预览不同ppt

<body>

<input type="hidden" id="file_name" value="{{ file_name }}">

<iframe id="reportFrame" src="" frameborder="0" style="border: none; width: 100%; height: 100%"></iframe>

</body>

<script>
    var file_name = $('#file_name').val();
    let url = '/static/' + file_name ;     // 拼接地址
    document.getElementById('reportFrame').src = url

</script>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值