最近要处理一些证件和个人信息文件,很多时候要经过格式转换如转pdf、转图片等操作,虽说网上的类似工具一大把,但多数要收费,更何况这种隐私信息放在网上,谁知道安不安全呢?思来想去,何不用python自己做一个程序来转化文件呢?
(本人初学python,很多地方不懂,借鉴了网上许多大佬的文章,还望多多指教)
import fpdf
import fitz
from win32com import client
from pdf2docx import Converter
import cv2
from tkinter import *
import os
from tkinter import filedialog
from tkinter.messagebox import *
from tkinter import ttk
import random
import tkinter as tk
def main(width,height):
hp = Tk()
hp.title("FILE CONVERSION")
hp.resizable(False,False)#设置窗口不可调节高度和宽度
w = hp.winfo_screenwidth()#获取屏幕宽度
h = hp.winfo_screenheight()#获取屏幕高度
pw = (w - width - 80)/2
ph = (h - height - 170)/2
hp.geometry("%dx%d+%d+%d"%(width,height,pw,ph))#设置窗口居中
def 选择图片toPDF():
file = tk.filedialog.askopenfilename(title = "选择图片",filetypes = [("图片格式","*.jpg"),("图片格式","*.png"),("图片格式","*.gif"),("所有文件","*.*")])#打开文件选择对话框
image_file = os.path.basename(file)#获取选择文件文件名
filename = "pdf-"+image_file.split(".")[0]#截取文件名(除后缀)
os.chdir(os.path.dirname(file))#更改操作目录
输入框1.delete(0,END)
输入框1.insert(END,file)
try:
pdf = fpdf.FPDF("p","mm","A4")
pdf.add_page()
pdf.image(image_file,0,0,210,210)
#生成PDF格式
pdf.output(str(filename)+ ".pdf","F")#输出PDF格式
tk.messagebox.showinfo("Complete","转换完成")
except Exception as e:
tk.messagebox.showinfo("Error",e)
##图片转PDF格式
def 选择PDFto图片():
file = tk.filedialog.askopenfilename(title = "选择PDF文件",filetypes = [("便捷式文档格式","*.pdf"),("所有文件","*.*")])#打开文件选择对话框
pdf_file = os.path.basename(file)#..
filename = "image-"+pdf_file.split(".")[0]#..
os.chdir(os.path.dirname(file))#..
输入框2.delete(0,END)
输入框2.insert(END,file)
try:
pdfDoc = fitz.open(file)
for pg in range(pdfDoc.pageCount):
page = pdfDoc[pg]
zoom_x = 1.33333333
zoom_y = 1.33333333
mat = fitz.Matrix(zoom_x,zoom_y).prerotate(int(0))#设置尺寸缩放系
pix = page.get_pixmap(matrix=mat, alpha=False)
#转换图片文件
pix.save(str(filename)+".jpg")#写入图片文件
tk.messagebox.showinfo("Complete","转换完成")
except Exception as e:
tk.messagebox.showinfo("Error",e)
##PDF转图片格式
def 选择word_to_PDF():
file = tk.filedialog.askopenfilename(title = "选择word文件",filetypes = [("文档格式","*.docx"),("文档格式","*.doc"),("所有文件","*.*")])#打开文件选择对话框
word_file = os.path.basename(file)#..
os.chdir(os.path.dirname(file))#..
输入框3.delete(0,END)
输入框3.insert(END,file)
try:
word = client.Dispatch("Word.Application")#打开word应用程序
doc = word.Documents.Open(file)#打开word文件
try:
doc.SaveAs("{}.pdf".format(file[:-5]),17)#另存为pdf文件(参数17表示pdf)
except:
doc.SaveAs("{}.pdf".format(file[:-4]),17)#(尝试doc文件处理)
doc.Close()#关闭原来的word文件
word.Quit()#退出程序
convert_file = word_file.split(".")[0]+".pdf"#获取转换后文件名称
os.rename(convert_file,"pdf-"+convert_file)#重命名转换文件
tk.messagebox.showinfo("Complete","转换完成")
except Exception as e:
tk.messagebox.showinfo("Error",e)
##word转PDF格式
def 选择PDF_to_word():
file = tk.filedialog.askopenfilename(title = "选择PDF文件",filetypes = [("便捷式文档格式","*.pdf"),("所有文件","*.*")])#打开文件选择对话框
pdf_file = os.path.basename(file)#..
filename = "word-"+pdf_file.split(".")[0]#..
os.chdir(os.path.dirname(file))#..
输入框4.delete(0,END)
输入框4.insert(END,file)
try:
cv = Converter(file)#加载PDF文件
cv.convert(str(filename)+".docx")
cv.close()#关闭文件
tk.messagebox.showinfo("Complete","转换完成")
except Exception as e:
tk.messagebox.showinfo("Error",e)
##PDF转word格式
def 图片压缩():
file = tk.filedialog.askopenfilename(title = "选择图片",filetypes = [("图片格式","*.jpg"),("图片格式","*.png"),("所有文件","*.*")])#打开文件选择对话框
image_file = os.path.basename(file)#获取选择文件文件名
filename = "zip-"+image_file.split(".")[0]#..
os.chdir(os.path.dirname(file))#更改操作目录
输入框5.configure(state = "normal")
输入框5.delete(0,END)
输入框5.insert(END,file)
输入框5.configure(state = "readonly")
try:
img = cv2.imread(image_file,1)#读取图像
cv2.imwrite(str(filename)+".jpg",img,[cv2.IMWRITE_JPEG_QUALITY,30])#压缩图片
tk.messagebox.showinfo("Complete","压缩完成")
except Exception as e:
tk.messagebox.showinfo("Error",e)
##图片压缩
框架 = Canvas(hp,width = 600,height = 350)
框架.create_rectangle(2,10,440,280)
框架.place(x = 10,y = 10)
标签 = Label(hp,text = "FILE CONVERSION",font = ("微软雅黑",17))#标签
标签.place(x = 119,y = 0)
标签1 = Label(hp,text = "图片转PDF:",font = ("微软雅黑",12))
标签1.place(x = 26,y = 46)
输入框1 = ttk.Entry(hp)
输入框1.place(x = 125,y = 50,width = 202,height = 21)
选择style1 = ttk.Style()
选择style1.configure("选择图片1.TButton",font = ("微软雅黑",10),fontground = "white")
选择图片1 = ttk.Button(hp,text = "选择图片",style = "选择图片1.TButton",command = 选择图片toPDF)#图片转PDF组件
选择图片1.place(x = 345,y = 46,width = 67,height = 30)
标签2 = Label(hp,text = "PDF转图片:",font = ("微软雅黑",12))
标签2.place(x = 26,y = 106)
输入框2 = ttk.Entry(hp)
输入框2.place(x = 125,y = 110,width = 202,height = 21)
选择style2 = ttk.Style()
选择style2.configure("选择PDF.TButton",font = ("微软雅黑",10),fontground = "white")
选择PDF = ttk.Button(hp,text = "选择PDF",style = "选择PDF.TButton",command = 选择PDFto图片)#PDF转图片组件
选择PDF.place(x = 345,y = 106,width = 67,height = 30)
标签3 = Label(hp,text = "word转PDF:",font = ("微软雅黑",12))
标签3.place(x = 22,y = 166)
输入框3 = ttk.Entry(hp)
输入框3.place(x = 125,y = 170,width = 202,height = 21)
选择style3 = ttk.Style()
选择style3.configure("选择word.TButton",font = ("微软雅黑",10),fontground = "white")
选择word = ttk.Button(hp,text = "选择word",style = "选择word.TButton",command = 选择word_to_PDF)#word转PDF组件
选择word.place(x = 345,y = 166,width = 67,height = 30)
标签4 = Label(hp,text = "PDF转word:",font = ("微软雅黑",12))
标签4.place(x = 22,y = 226)
输入框4 = ttk.Entry(hp)
输入框4.place(x = 125,y = 230,width = 202,height = 21)
选择style4 = ttk.Style()
选择style4.configure("选择PDF2.TButton",font = ("微软雅黑",10),fontground = "white")
选择PDF2 = ttk.Button(hp,text = "选择PDF",style = "选择PDF2.TButton",command = 选择PDF_to_word)#PDF转word组件
选择PDF2.place(x = 345,y = 226,width = 67,height = 30)
标签5 = Label(hp,text = "图片压缩",font = ("微软雅黑",16))
标签5.place(x = 177,y = 293)
输入框5 = ttk.Entry(hp)
输入框5.place(x = 42,y = 330,width = 358,height = 22)
输入框5.configure(state = "readonly")
选择style5 = ttk.Style()
选择style5.configure("选择图片2.TButton",font = ("微软雅黑",10),fontground = "white")
选择图片2 = ttk.Button(hp,text = "选择图片",style = "选择图片2.TButton",command = 图片压缩)#压缩图片组件
选择图片2.place(x = 187,y = 361,width = 70,height = 35)
##tk组件设置
hp.mainloop()
if __name__ == "__main__":
main(470,400)