用Python实现简单的文件转化功能

最近要处理一些证件和个人信息文件,很多时候要经过格式转换如转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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值