Python调用WPS把文档转换PDF,并把PDF转图片
简介Python调用WPS把文档转换PDF,并把PDF转图片,首先需要安装WPS,然后利用pypiwin32把文档转化成PDF,再利用fitz、PyMuPD把PDF转化成图片
一、文档转PDF
1、准备:因为需要用WPS转换文档,那么需要先安装WPS;
2、安装pypiwin32包
pypiwin32是一个用于操作Windows系统的Python模块。它提供了许多用于操作Windows API的函数和类,让开发者能够在Python中方便地进行Windows系统操作。
pip install pypiwin32
3、代码
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
import win32com.client
import time
def ConvertByWps(sourceFile, targetFile):
if not os.path.exists(sourceFile):
print(sourceFile + "不存在,无法继续!")
return False
typemap = {
"doc": "word",
"docx": "word",
"ppt": "ppt",
"pptx": "ppt",
"xls": "excel",
"xlsx": "excel",
}
name_arr = sourceFile.split(".")
suffix = name_arr[len(name_arr) - 1]
wpstype = typemap.get(suffix)
if wpstype is None:
return False
os.system("taskkill /im wps.exe")
# 如果文件存在就删除
if os.path.exists(targetFile):
os.remove(targetFile)
if wpstype == "word":
ConvertDocToPdf(sourceFile, targetFile)
elif wpstype == "ppt":
ConvertPptToPdf(sourceFile, targetFile)
elif wpstype == "excel":
ConvertXlsToPdf(sourceFile, targetFile)
if os.path.exists(targetFile):
return True
else:
return False
# 转换 Word文件档到pdf
def ConvertDocToPdf(src, dst):
wps = win32com.client.Dispatch("Kwps.Application")
wps.Visible = False
doc = wps.Documents.Open(src)
doc.ExportAsFixedFormat(dst, 17)
doc.Close()
wps.Quit()
# 转换 PPT文件档到pdf
def ConvertPptToPdf(src, dst):
wps = win32com.client.Dispatch("Kwpp.Application")
wps.Visible = False
ppt = wps.Presentations.Open(src)
ppt.SaveAs(dst, 32)
ppt.Close()
wps.Quit()
# 转换 XLS文件档到pdf
def ConvertXlsToPdf(src, dst):
wps = win32com.client.Dispatch("Ket.Application")
excel = wps.Workbooks.Open(src)
excel.ExportAsFixedFormat(0, dst)
excel.Close()
wps.Quit()
if __name__ == "__main__":
# 当前目录
d = os.path.dirname(__file__)
abspath = os.path.abspath(d)
# 测试用例
src = abspath + r"/111.doc"
dst = abspath + r"/111.pdf"
r = ConvertByWps(src, dst)
print(r)
二、PDF转图片
1、安装依赖
pip install fitz
pip install PyMuPDF
2、解决错误(没有则跳过)
在安装的过程中需要解决出现的一些问题。
error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
出现上面错误参考这个文档:python中,Microsoft Visual C++ 14.0 or greater is required问题解决方案 - 张飞的猪 - 博客园 (cnblogs.com)
3、代码
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
import win32com.client
import time
# 将PDF转化为图片
# pdfPath pdf文件的路径
# imgPath 图像要保存的文件夹
# zoom_x x方向的缩放系数
# zoom_y y方向的缩放系数
# rotation_angle 旋转角度
def pdf_image(pdfPath, imgPath, zoom_x, zoom_y, rotation_angle):
path_arr = pdfPath.split(os.sep)
path_arr.reverse()
filename = ""
if len(path_arr) > 0:
filename = path_arr[0].split(".")[0]
start_time = time.perf_counter()
pdf = fitz.open(pdfPath)
pageCount = pdf.page_count
if pageCount > 3:
pageCount = 3
# 逐页读取PDF
filename_arr = []
for pg in range(0, pageCount):
page = pdf[pg]
# 设置缩放和旋转系数
trans = fitz.Matrix(zoom_x, zoom_y).prerotate(rotation_angle)
pm = page.get_pixmap(matrix=trans, alpha=False)
# 开始写图像
filename_all = f"{imgPath}{os.sep}{filename}_{str(pg)}.png"
pm.save(filename_all)
filename_arr.append(filename_all)
pdf.close()
end_time = time.perf_counter()
print(f"时间差:{end_time-start_time}")
print(len(filename_arr))
if __name__ == "__main__":
# 当前目录
d = os.path.dirname(__file__)
abspath = os.path.abspath(d)
dst = abspath + r"\111.pdf"
pdf_image(dst, abspath, 2, 2, 0)
图像在获取和传输过程种会受到随机信号的干扰从而产生噪声,例如电阻引起的热噪声、光子噪声、暗电流噪声以及光响应非均匀性噪声等,由于噪声会影响对图像的理解以及后续的处理工作,因此去除噪声的影响在图像中具有十分重要的意义。图像中常见的噪声有:椒盐噪声、高斯噪声、泊松噪声和乘性噪声。
对于小于2TB的磁盘可以使用fdisk和parted命令进行分区,一般采用fdisk命令。但是对于大于2TB的磁盘只能使用parted分区,且需要将磁盘转换为GPT格式。
有时候为了打包需要敲很多命令,实在比较麻烦,所以这里记录了如何通过shell脚本将这些命令全部集中起来,后面可以直接执行该脚本就把需要的所有命令跑完。
Python项目中必须包含一个 requirements.txt 文件,用于记录所有依赖包及其精确的版本号。以便新环境部署。本文记录python需求文件requirements.txt的创建及使用。
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
快速生成表格
Electron页面跳转、浏览器打开链接和打开新窗口
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题