jtyoui.imagepdf.tk 源代码

#!/usr/bin/python3.7
# -*- coding: utf-8 -*-
# @Time : 2019/2/9 0009
# @Email : jtyoui@qq.com
# @Software : PyCharm
from jtyoui.error import LibraryNotInstallError
from jtyoui.tools import pips
from jtyoui.file_zip import file_zip_path
from tkinter import filedialog, messagebox
import os
import tkinter
import glob

try:
    import fitz  # 安装 pip install PyMuPDF
except ModuleNotFoundError:
    try:
        fitz = pips('fitz', 'PyMuPDF')  # 自动安装
    except ModuleNotFoundError:
        raise LibraryNotInstallError("安装 pip install PyMuPDF")

DIRS, FILE = '', ''  # 文件夹地址,pdf文件地址


[文档]def select_pdf(): global FILE FILE = filedialog.askopenfilename(filetypes=(("PDF file", "*.pdf"),)) # 获得pdf文件地址
[文档]def select_dir(): global DIRS DIRS = filedialog.askdirectory() # 获得文件夹地址
[文档]def start(): global DIRS, FILE if DIRS: image_pdf(DIRS) # 执行图片转pdf DIRS = '' elif FILE: if not os.path.exists(FILE[:-4]): os.mkdir(FILE[:-4]) pdf_image(FILE) # 执行pdf转照片 FILE = '' else: messagebox.showwarning('警告', '先选择在执行!')
[文档]def get_dir_name(file_dir): base_name = os.path.basename(file_dir) # 获得地址的文件名 dir_name = os.path.dirname(file_dir) # 获得地址的父链接 return dir_name, base_name
[文档]def image_pdf(file_dir): dir_name, base_name = get_dir_name(file_dir) doc = fitz.Document() for img in sorted(glob.glob(file_dir + '\\*'), key=os.path.getmtime): # 排序获得对象 img_doc = fitz.Document(img) # 获得图片对象 pdf_bytes = img_doc.convertToPDF() # 获得图片流对象 img_pdf = fitz.Document("pdf", pdf_bytes) # 将图片流创建单个的PDF文件 doc.insertPDF(img_pdf) # 将单个文件插入到文档 img_doc.close() img_pdf.close() doc.save(dir_name + os.sep + base_name + ".pdf") # 保存文档 doc.close() messagebox.showinfo('提示', '转换成功!')
[文档]def pdf_image(pdf_name): dir_name, base_name = get_dir_name(pdf_name) pdf = fitz.Document(pdf_name) for pg in range(0, pdf.pageCount): page = pdf[pg] # 获得每一页的对象 trans = fitz.Matrix(1.0, 1.0).preRotate(0) pm = page.getPixmap(matrix=trans, alpha=False) # 获得每一页的流对象 pm.writePNG(FILE[:-4] + os.sep + base_name[:-4] + '_{:0>4d}.png'.format(pg + 1)) # 保存图片 pdf.close() messagebox.showinfo('提示', '转换成功!')
[文档]def ui(): root = tkinter.Tk() root.title('PDF和照片互转器') # 标题 root.resizable(width=False, height=False) # 防止大小调整 canvas = tkinter.Canvas(root, width=450, height=320, highlightthickness=0) # 创建画布 photo = tkinter.PhotoImage(file=file_zip_path + os.sep + 'pdf.png') # 获取背景图片的网络连接 canvas.create_image(225, 160, image=photo) select_dir_button = tkinter.Button(root, text="选择照片文件夹", command=select_dir, bg='yellow') # 创建按钮 select_pdf_button = tkinter.Button(root, text="选择PDF文件", command=select_pdf, bg='green') click_button = tkinter.Button(root, text="点击执行", command=start, bg='blue') select_dir_button.pack() # 启动按钮 select_pdf_button.pack() click_button.pack() canvas.create_window(240, 120, width=100, height=30, window=select_dir_button) # 将按钮创建到画布 canvas.create_window(240, 190, width=100, height=30, window=select_pdf_button) canvas.create_window(240, 260, width=100, height=30, window=click_button) canvas.pack() # 启动画布 root.mainloop() # 主程序循环
if __name__ == '__main__': ui()