概述
由于网站一般是展示PPT,想要在WEB上进行PPT展示且资源地址不在公网,一般只能通过PPT转化为图片,再由前端进行图片的展示。
由于项目部署环境都在Linux平台,所以需要进行Linux平台上PPT转图片了解。
由于Linux平台不支持PPT直接转为图片,所以这里采用的是PPT转PDF转图片的方式。
安装使用
安装依赖
apt-get install unoconv
apt-get install imagemagick
使用方式
- 将odt文件转成pdf文件。unoconv -f pdf XXXXXX是你需要转换的文件(包括后缀)。
- 将pdf转成图片(jpg)。convert XXX.pdf %d.jpgXXX是pdf的文件名,%d是按页进行转换
pdf乱码
如果转换出来的pdf里面中文乱码,是因为linux下没有相关的字体,解决方法就是把win下的字体复制到linux下
- 打包字体。
进入C:WINDOWSFonts,进行打包 win.zip - 上传服务器
把win.zip 上到局域网服务器放到/home/tmp目录下 - 解压并设置字体
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)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复