[Python][Tkinter][小工具]自动分件&转PDFV1.1.2

工作需要,加个转单层PDF的功能

#! C:\ProgramData\Miniconda3\
#!/usr/bin/python3
# -*- encoding: utf-8 -*-
'''
@File		:	FJ_Main.py
@Time		:	2020/07/18 08:24:06
@Author		:	GonerY
@Version	:	1.0
@Contact	:	Gonery@qq.com
@WebSite	:	https://blog.csdn.net/gonery/
'''
# Start typing your code from here

import tkinter as tk
import tkinter.filedialog
import xlrd
import os
import shutil
import fitz
import glob
from tkinter import END
from tkinter import scrolledtext


def get_path():  # 输入框获取目录路径
    text = tkinter.filedialog.askdirectory(title='选择目录')
    txt_info.delete(1.0, END)
    txt_info.update()
    txt_path.delete(0, END)
    txt_path.insert(0, text)
    txt_path.update()


def search_xlsx(path):  # 查找excel文件,有返回选择的目录路径,无返回False
    juan = "案卷级目录数据库.xlsx"
    jian = "卷内级目录数据库.xlsx"
    for root, dirs, files in os.walk(path):
        if juan in files and jian in files:
            return root
        else:
            return False


def check_data(path):  # 录入数量与文件数量检查
    xr = xlrd.open_workbook(path + "/案卷级目录数据库.xlsx",
                            on_demand=True)  # 打开 案卷级目录数据库.xlsx
    sheet1 = xr.sheet_by_name("案卷级目录数据库")  # 获取sheet
    i = 1
    check_err = "no"
    u_list = []
    # 卷页数、图片数量检验
    while i < sheet1.nrows:  # 依次读取行信息
        rowlist = sheet1.row_values(i)
        ys = int(rowlist[8])
        dh = str(rowlist[1])
        u_tup = (dh, ys)  # 案卷 档号、页数 数据存入元组
        u_list.append(u_tup)  # 案卷 档号、页数 数据添加到列表
        j = 0
        for files in os.listdir(path + '/' + dh):
            j += 1
        if j != ys:
            check_err = "yes"
            txt_info.insert(
                "end", dh + "  卷级页数:" + str(ys) + "  图片页数:" + str(j) + "\n")
            txt_info.update()
            txt_info.see(END)
        i += 1
        txt_info.insert("end", dh + "\n")
        txt_info.update()
        txt_info.see(END)
    xr.release_resources()
    # 读取件级 档号、页数 数据
    xr = xlrd.open_workbook(path + "/卷内级目录数据库.xlsx", on_demand=True)
    sheet1 = xr.sheet_by_name("卷内级目录数据库")
    i = 1
    j_list = []
    while i < sheet1.nrows:
        rowlist = sheet1.row_values(i)
        ys = rowlist[3]
        dh = rowlist[8] + '-' + rowlist[9] + '-' + rowlist[10]
        j_tup = (dh, ys)
        j_list.append(j_tup)
        i += 1
    xr.release_resources()
    # 卷、件页数检验
    for u in u_list:  # 遍历卷数据
        y = 0  # 初始化 件页数
        for j in j_list:  # 遍历件数据
            if j[0] == u[0]:  # 档号相同,页数累计
                y += int(j[1])
        if y != u[1]:  # 页数不相等,输出错误信息
            check_err = "yes"
            txt_info.insert(
                "end",
                u[0] + "  卷级页数:" + str(u[1]) + "  件级页数:" + str(y) + "\n")
            txt_info.update()
            txt_info.see(END)

    if check_err == "yes":
        txt_info.insert("end", "页数数据不相符,请检查!\n")
        txt_info.update()
        txt_info.see(END)
        return check_err
    else:
        return check_err


def fj(path):  # 分件
    xr = xlrd.open_workbook(path + "/卷内级目录数据库.xlsx", on_demand=True)
    sheet1 = xr.sheet_by_name("卷内级目录数据库")
    i = 1
    while i < sheet1.nrows:
        rowlist = sheet1.row_values(i)
        dh = rowlist[8] + '-' + rowlist[9] + '-' + rowlist[10]
        ys = rowlist[3]
        lh = rowlist[7]
        JuanPath = path + '/' + dh + '/'
        JianPath = path + '/JPG/' + dh + '/' + dh + '-' + lh + '/'
        # 根据分类号创建文件夹
        if os.path.exists(JianPath):
            # 异常提示
            txt_info.insert("end", dh + "-" + lh + "\n该目录已存在,请检查!\n")
            txt_info.update()
            txt_info.see(END)
            return
        else:
            os.makedirs(JianPath)
        i += 1
        j = 1
        while j <= int(ys):
            for picfiles in os.listdir(JuanPath):
                # dnp: dir and pic 图片完全路径
                dnp = os.path.join(JuanPath, picfiles)
                # nn: newname 图片重命名,按0001,0002......
                nn = str(10000 + int(j))[-4:]
                shutil.move(dnp, JianPath + nn + '.jpg')
                j += 1
                # 移动一个图片文件后终止FOR循环,再移动下一张
                break
        txt_info.insert("end", dh + '-' + lh + '\n')
        txt_info.update()
        txt_info.see(END)
    xr.release_resources()
    txt_info.insert("end", "\n----------分件完成!----------\n")
    txt_info.update()
    txt_info.see(END)


def delpath(path):  # 删除空目录
    for root, dirs, files in os.walk(path):
        if not os.listdir(root):
            os.rmdir(root)


def pic2pdf(path):  # 转PDF
    jpg_path = path + "/JPG/"
    for u_dirs in os.listdir(jpg_path):  # 案卷级目录 u_dirs
        for i_dirs in os.listdir(jpg_path + u_dirs):  # 卷内级目录 i_dirs
            txt_info.insert("end",i_dirs + '\n')
            txt_info.update()
            txt_info.see(END)
            doc = fitz.open()
            for img in sorted(glob.glob(jpg_path + u_dirs + "/" + i_dirs + "/*.jpg")):
                imgdoc = fitz.open(img)
                pdfbytes = imgdoc.convertToPDF()
                imgpdf = fitz.open("pdf", pdfbytes)
                doc.insertPDF(imgpdf)
            if os.path.exists("allimages.pdf"):
                os.remove("allimages.pdf")
            if os.path.exists(path + "/PDF/" + u_dirs):
                pass
            else:
                os.makedirs(path + "/PDF/" + u_dirs)
            doc.save(path + "/PDF/" + u_dirs + "/" + i_dirs + ".pdf")
            doc.close()
    txt_info.insert("end", "\n----------PDF转换完成!----------\n")
    txt_info.update()
    txt_info.see(END)

'''
def click_cs():  # 点击 测试 按钮
    fj_path = txt_path.get()
    pic2pdf(fj_path)
'''

def click_fj():  # 点击 分件 按钮
    txt_info.delete(1.0, END)
    fj_path = txt_path.get()
    if fj_path == "":  # 判断有无选择目录
        return
    else:
        xlsx = search_xlsx(fj_path)
        if not xlsx:  # 判断目录下有无Excel文件
            txt_info.insert("end", "目录下无对应的Excel文件!\n")
            txt_info.update()
            txt_info.see(END)
            return
    txt_info.insert("end", "正在检验数据,请稍候…………\n")
    txt_info.update()
    txt_info.see(END)
    if check_data(xlsx) == "yes":
        return
    txt_info.insert("end", "数据检验通过,正在分件,请稍候…………\n")
    txt_info.update()
    txt_info.see(END)
    fj(fj_path)
    delpath(fj_path)
    txt_info.insert("end", "\n正在转PDF,请稍候…………\n")
    txt_info.update()
    txt_info.see(END)
    pic2pdf(fj_path)


# 主窗体
window = tk.Tk()
window.title('分件')
window.geometry('450x400+300+50')
window.resizable(0, 0)
# 显示提示文本
tk.Label(
    window,
    text='请将“案卷级目录数据库.xlsx”及“卷内级目录数据库.xlsx”放在分件目录内',
    font=('宋体', 9),
).place(x=20, y=10)
# 选择目录 按钮
btn_choose = tk.Button(window, text='选择目录:', command=get_path)
btn_choose.place(x=20, y=40)
# 文本输入框
txt_path = tk.Entry(window, font=('宋体', 9), width=55)
txt_path.place(x=95, y=45)
# 分件 按钮
btn_fj = tk.Button(window, text='分件&转PDF', width=10, command=click_fj)
btn_fj.place(x=190, y=75)
'''
# 测试 按钮
btn_cs = tk.Button(window, text='TEST', width=10, command=click_cs)
btn_cs.place(x=20, y=75)
'''
# 信息显示框
txt_info = scrolledtext.ScrolledText(window,
                                     font=('宋体', 9),
                                     width=68,
                                     height=21)
txt_info.place(x=20, y=120)
# 处理过程显示
lbl_info = tk.Label(window, font=('宋体', 9))
lbl_info.place(x=20, y=380)
# 主窗体循环
window.mainloop()

 

Abstract Describes the Tkinter widget set for constructing graphical user interfaces (GUIs) in the Python programming language. This publication is available in Web form1 and also as a PDF document2. Please forward any comments to tcc-doc@nmt.edu. Table of Contents 1. What is Tkinter?.......................................................................................................................3 2. A minimal application..............................................................................................................3 3. Definitions..............................................................................................................................4 4. Layout management.................................................................................................................5 4.1. The .grid() method....................................................................................................5 4.2. Other grid management methods...................................................................................6 4.3. Configuring column and row sizes.................................................................................7 4.4. Making the root window resizeable................................................................................8 5. Standard attributes...................................................................................................................8 5.1. Dimensions...................................................................................................................9 5.2. The coordinate system...................................................................................................9 5.3. Colors...........................................................................................................................9 5.4. Type fonts...................................................................................................................10 5.5. Anchors......................................................................................................................11 5.6. Relief styles.................................................................................................................12 5.7. Bitmaps.......................................................................................................................12 5.8. Cursors.......................................................................................................................12 5.9. Images........................................................................................................................14 5.10. Geometry strings........................................................................................................14 5.11. Window names...........................................................................................................15 5.12. Cap and join styles.....................................................................................................15 5.13. Dash patterns.............................................................................................................16 5.14. Matching stipple patterns............................................................................................16 6. The Button widget................................................................................................................17 7. The Canvas widget................................................................................................................19 7.1. Canvas coordinates......................................................................................................20 7.2. The Canvas display list................................................................................................20 7.3. Canvas object IDs........................................................................................................21 7.4. Canvas tags................................................................................................................21 1http://www.nmt.edu/tcc/help/pubs/tkinter/ 2http://www.nmt.edu/tcc/help/pubs/tkinter/tkinter.pdf 1 Tkinter reference New Mexico Tech Computer Center 7.5. CanvastagOrId arguments......................................................................................21 7.6. Methods on Canvas widgets........................................................................................21 7.7. Canvas arc objects.......................................................................................................26 7.8. Canvas bitmap objects.................................................................................................28 7.9. Canvas image objects..................................................................................................29 7.10. Canvas line objects.....................................................................................................29 7.11. Canvas oval objects....................................................................................................31 7.12. Canvas polygon objects..............................................................................................32 7.13. Canvas rectangle objects.............................................................................................34 7.14. Canvas text objects.....................................................................................................35 7.15. Canvas window objects..............................................................................................36 8. The Checkbutton widget......................................................................................................37 9. The Entry widget..................................................................................................................40 9.1. Scrolling an Entry widget............................................................................................43 10. The Frame widget................................................................................................................43 11. The Label widget................................................................................................................44 12. The LabelFrame widget......................................................................................................46 13. The Listbox widget............................................................................................................48 13.1. Scrolling a Listbox widget........................................................................................52 14. The Menu widget..................................................................................................................52 14.1. Menu item creation (coption) options.........................................................................55 14.2. Top-level menus.........................................................................................................56 15. The Menubutton widget......................................................................................................57 16. The Message widget............................................................................................................59 17. The OptionMenu widget.......................................................................................................60 18. The PanedWindow widget....................................................................................................61 18.1. PanedWindow child configuration options...................................................................63 19. The Radiobutton widget....................................................................................................64 20. The Scale widget................................................................................................................67 21. The Scrollbar widget........................................................................................................70 21.1. The Scrollbarcommand callback............................................................................72 21.2. Connecting a Scrollbar to another widget................................................................73 22. The Spinbox widget............................................................................................................73 23. The Text widget..................................................................................................................78 23.1. Text widget indices...................................................................................................80 23.2. Text widget marks....................................................................................................81 23.3. Text widget images...................................................................................................82 23.4. Text widget windows...............................................................................................82 23.5. Text widget tags.......................................................................................................82 23.6. Setting tabs in a Text widget......................................................................................83 23.7. The Text widget undo/redo stack..............................................................................83 23.8. Methods on Text widgets..........................................................................................84 24. Toplevel: Top-level window methods..................................................................................91 25. Universal widget methods.....................................................................................................93 26. Standardizing appearance...................................................................................................101 26.1. How to name a widget class......................................................................................102 26.2. How to name a widget instance.................................................................................102 26.3. Resource specification lines.......................................................................................102 26.4. Rules for resource matching......................................................................................103 27. Connecting your application logic to the widgets...................................................................104 28. Control variables: the values behind the widgets...................................................................104 29. Focus: routing keyboard input.............................................................................................106 New Mexico Tech Computer Center Tkinter reference 2 30. Events................................................................................................................................107 30.1. Levels of binding......................................................................................................108 30.2. Event sequences.......................................................................................................109 30.3. Event types..............................................................................................................109 30.4. Event modifiers........................................................................................................110 30.5. Key names...............................................................................................................111 30.6. Writing your handler: The Event class......................................................................113 30.7. The extra arguments trick..........................................................................................115 30.8. Virtual events...........................................................................................................116 31. Pop-up dialogs....................................................................................................................116 31.1. The tkMessageBox dialogs module..........................................................................116 31.2. The tkFileDialog module.....................................................................................118 31.3. The tkColorChooser module.................................................................................119
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值