我是靠谱客的博主 可爱云朵,最近开发中收集的这篇文章主要介绍Linux平台PPT转图片(Python),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

由于网站一般是展示PPT,想要在WEB上进行PPT展示且资源地址不在公网,一般只能通过PPT转化为图片,再由前端进行图片的展示。

由于项目部署环境都在Linux平台,所以需要进行Linux平台上PPT转图片了解。

由于Linux平台不支持PPT直接转为图片,所以这里采用的是PPT转PDF转图片的方式。

安装使用

安装依赖

apt-get install unoconv

apt-get install imagemagick

使用方式

  1. 将odt文件转成pdf文件。unoconv -f pdf XXXXXX是你需要转换的文件(包括后缀)。
  2. 将pdf转成图片(jpg)。convert XXX.pdf %d.jpgXXX是pdf的文件名,%d是按页进行转换

pdf乱码

如果转换出来的pdf里面中文乱码,是因为linux下没有相关的字体,解决方法就是把win下的字体复制到linux下

  1. 打包字体。
    进入C:WINDOWSFonts,进行打包 win.zip
  2. 上传服务器
    把win.zip 上到局域网服务器放到/home/tmp目录下
  3. 解压并设置字体

cd /home/tmp  

//解压  

unzip win.zip  

mv win /usr/share/fonts  

cd win  

chmod  -Rf 755 Fonts  

//加载字体  

mkfontscale  

mkfontdir  

fc-cache –fv

Python实现

在安装完依赖后,可利用python脚本调用指令将PPT转为PDF

import os

command = 'unoconv -f pdf %s' % (new_file_path)

os.system(command)

由于Python存在将PDF转为图片的第三方库wand,且转化的图片效果比convert命令效果更好,所以这里Python采用第三方库wand进行处理

from wand.image import Image

import os

pdf_file = os.path.join(DATA_PATH, dir_path, hashed_name + '.pdf')#PPT转化后的PDF的路径地址+文件名

        image_pdf = Image(filename=pdf_file, resolution=300)

        image_jpeg = image_pdf.convert('jpg')

# 将pdf数据流转化为jpg数据

        req_image = []

        for img in image_jpeg.sequence:

            img_page = Image(image=img)

            req_image.append(img_page.make_blob('jpg'))

        #按每页进行划分对应ppt图片

        i = 0#第几页,这里从0开始计算

 

        for img in req_image:

            img_name = '%s.jpg' % (str(i))#文件名

            img_path = os.path.join(DATA_PPT_PATH, dir_path, hashed_name, img_name)#文件地址

            with open(img_path, 'wb+') as new_file:

                new_file.write(img)

            i += 1

            #保存对应数据文件

注意事项

从PPT转化为图片的过程所花费时间较长,且会比较占系统资源,如果通过WEB服务器进行接口处理PPT转化图片会进行长时间的请求,很容易造成服务器请求超时,服务器超时可以查看服务器超时处理进行了解处理。

Window处理方案

Linux平台上的PPT转PDF的方式并不完美,还是有机会产生错误,如果想完美的处理建议在Window平台进行处理。

Python脚本

由于该脚本针对window平台下的Python方案,原因是需要PC已下载微软Powerpoint,且comtypes第三库为window平台使用库。

# -*- coding: utf-8 -*-

"""

Created on Sun Mar 11 16:23:02 2018

 

@author: hp

"""

 

import comtypes.client

import os

def init_powerpoint():

    powerpoint = comtypes.client.CreateObject("Powerpoint.Application")

    powerpoint.Visible = 1

    return powerpoint

 

def ppt_to_pdf(powerpoint, inputFileName, outputFileName, formatType = 32):

    if outputFileName[-3:] != 'pdf':

        outputFileName + ".pdf"

    deck = powerpoint.Presentations.Open(inputFileName)

    deck.SaveAs(outputFileName,formatType)                          # formatType = 32 for ppt to pdf

    deck.Close()

 

def convert_files_in_folder(powerpoint, folder):

    files = os.listdir(folder)                                      #回指定文件夹包含的文件或文件夹名字的列表

    pptfiles = [f for f in files if f.endswith((".ppt",".pptx"))]   #使用循环批量转换

    for pptfile in pptfiles:

        fullpath = os.path.join(cwd,pptfile)                        #将多个路径组合后返回

        ppt_to_pdf(powerpoint, fullpath, fullpath)

 

if __name__ == "__main__":

    powerpoint = init_powerpoint()

    cwd = os.getcwd()  # 返回当前进程的目录

    convert_files_in_folder(powerpoint, cwd)

    powerpoint.Quit()

 

最后

以上就是可爱云朵为你收集整理的Linux平台PPT转图片(Python)的全部内容,希望文章能够帮你解决Linux平台PPT转图片(Python)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部