龙空技术网

分享一个Python批量ppt转图片,pdf转图片,word转图片脚本

Python柒柒i 177

前言:

如今咱们对“pythonsetexist”都比较珍视,咱们都想要知道一些“pythonsetexist”的相关内容。那么小编也在网络上网罗了一些关于“pythonsetexist””的相关内容,希望咱们能喜欢,你们一起来了解一下吧!

前言

某天我们运营在编辑后台的时候说每次上传ppt,pdf,word时都要把每个文件先导出一次图片,然后一个一个上传(png用作预览,ppt,pdf,word源文件不能直接下载的),说效率太低了,问有没有办法只要上传文件就行。当时就想了想每个上传都转一次确实效率低,因为有些导出来可能有几十张图片。

最后通过GitHub和网友博客。最终把自动转图片问题解决。

本文python版本3.9.5

脚本思路

运营人员上传ppt,pdf,word到数据库,脚本读取文件远程连接->下载到本地->转图片->上传到云存储->获取远程图片连接->存储到数据库。

连接数据库查询需要转的集合

def connectDatabase():    conn = pymysql.connect(host='127.0.0.1', user='root', password="",database ='pic',port=3306)  # host=localhost #也可以写,如果127.0.0.1不能用的话#  登录数据库    cur = conn.cursor(pymysql.cursors.DictCursor)     return {       "conn":conn,       "cur":cur    }
# 获取需要转的文件集合def getUrlArr(cur):    sql = 'select * from pic' # 写自己的sql语句    arr = ''    try:        cur.execute(sql)        ex = cur.execute(sql)        arr = cur.fetchmany(ex)    except Exception as e:        raise e    finally:        return arr
下载文件到本地
# 下载文件到本地def downLoad(url):    print('----url-----',url)    filename=''    try:        suffix = os.path.basename(url).split('.')[1]        filename = "miaohui."+suffix        if os.path.exists(filename):  # 如果文件存在 删除文件            os.remove(filename)        wget.download(url,filename)    except IOError:        print('下载失败',url)    else:        print('\n')        print('下载成功',url)        return filename
ppt转图片
# pip install pywin32# 初始化PPTdef init_powerpoint():    powerpoint = win32com.client.Dispatch('PowerPoint.Application') #comtypes.client.CreateObject("Powerpoint.Application")    powerpoint.Visible = 1    return powerpoint
# PPT转pngdef ppt2png(url,pptFileName,powerpoint):    try:        ppt_path = os.path.abspath(pptFileName)        ppt = powerpoint.Presentations.Open(ppt_path)        #保存为图片        img_path = os.path.abspath(downLoad_path + '.png')        ppt.SaveAs(img_path, 18) # 17保存为jpg格式        # 关闭打开的ppt文件        ppt.Close()    except IOError:        print('PPT转png失败',url)    else:        print("PPT转png成功",url)
pdf转图片
# pip install PyMuPDF# pdf转图片def pdf2png(_url,pptFileName):    imagePath = os.path.abspath(downLoad_path)    try:        pdfDoc = fitz.open(pptFileName)        for pg in range(pdfDoc.pageCount):            page = pdfDoc[pg]            rotate = int(0)            # 每个尺寸的缩放系数为1.3,这将为我们生成分辨率提高2.6的图像。            # 此处若是不做设置,默认图片大小为:792X612, dpi=96            zoom_x = 1.33333333  # (1.33333333-->1056x816)   (2-->1584x1224)            zoom_y = 1.33333333            mat = fitz.Matrix(zoom_x, zoom_y).prerotate(rotate)            pix = page.get_pixmap(matrix=mat, alpha=False)            if not os.path.exists(imagePath):  # 判断存放图片的文件夹是否存在                os.makedirs(imagePath)  # 若图片文件夹不存在就创建            pix.save(imagePath + '/' + '幻灯片%s.png' % pg)  # 将图片写入指定的文件夹内    except IOError:        print('pdf转png失败',_url)    else:        print("pdf转png成功",_url)
word转图片

word转图片要先中转一次,先把word转成pdf,然后再把pdf转成图片。

# word转Pdfdef word2pdf(word_file):    '''    将word文件转换成pdf文件    :param word_file: word文件    :return:    '''    # 获取word格式处理对象    word = Dispatch('Word.Application')    # 以Doc对象打开文件    doc_ = word.Documents.Open(word_file)    # 另存为pdf文件    suffix = os.path.basename(word_file).split('.')[1]    doc_.SaveAs(word_file.replace(suffix, "pdf"), FileFormat=17)    print(word_file,'----转pdf成功')    # 关闭doc对象    doc_.Close()    # 退出word对象    word.Quit()    return os.path.basename(word_file).split('.')[0]+'.pdf'

然后再调用上面的 pdf2png

上传到对象存储

这里就不贴出来了,我们用的是华为云的OBS。阿里云,腾讯云等对象存储都有各自的Python版SDK,接入也很方便。

最后组在一起调用

if __name__=='__main__':    connect = connectDatabase()    powerpoint = init_powerpoint()    downArr = getUrlArr(connect['cur'])    for i in downArr:        if(os.path.exists('./'+downLoad_path)):            removeFileInFirstDir('./'+downLoad_path)        _url = unquote(i['url'])        id = i['id']        pptFileName = downLoad(_url)#下载文件        if(('.pdf' in _url) ==True):            pdf2png(_url,pptFileName)        elif (('.doc' in _url) ==True):            _file = os.path.abspath(pptFileName)            pdfNmae = word2pdf(_file)            pdf2png(_url,pdfNmae)        else:                ppt2png(_url,pptFileName,powerpoint) #转png        imgArr = uploadImg(_url) #上传图片到云存储拿到远程链接        setData(_url,id,imgArr,connect) #保存到数据库        time.sleep(2)        print('\n')        print('\n')    connect['cur'].close()    #关闭游标    connect['conn'].close()   #断开数据库,释放资源    powerpoint.Quit()    input("输入任意键结束")

因为是自己内部用,所以可以使用pyinstaller打包成了一个exe,提供给运营用,资料上传完运行下,便可批量自动转图片了。

#py转exepyinstaller -c -F -i a.ico ppt_to_img.py
最后

希望本文对你有一些帮助,如有问题,欢迎指正~

标签: #pythonsetexist