• Python PDF文件合并,提取


    1. 功能介绍

    1. 选择两个pdf指定的页码并合并成一个文
    2. 选择一个指定的pdf文件,并指定页码,将指定的页码提取出来,可以用’,‘和’-‘分割
    3. 选择一个pdf文件,将其内容转换为word文件。
    4. 选择一个pdf文件将其表格转换为excel文件

    2.项目难点

    1. tkinter设置图标显示

    tkinter设置图标显示可以使用TK.iconbitmap(‘pdf.ico’)函数实现。
    但是在打包成一个exe文件之后,就无法实现了。
    可以将ico文件通过base64模块的base64decode()将ico文件转换成数据流,然后创建一个新的py文件来保存成一个参数。如此在使用过程中通过再将base64数据转换成一个ico文件,再引用即可。

    import base64
    
    open_icon = open("image/pdf.ico", "rb")
    b64str = base64.b64encode(open_icon.read())
    open_icon.close()
    write_data = "img = %s" % b64str
    # write_data = b64str
    with open("icon.icon", "w+") as f:
        f.write(write_data)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    引用base64数据,生成一个ico文件并在系统中引用

    import ctypes
    import tkinter as tk
    import base64
    import os
    from icon import img
    
    if __name__ == "__main__":
        # 以下两句代码用于将windows的任务栏图标设置为跟程序icon一样。
        myappid = "company.product.version"  # 这里可以设置任意文本
        ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
        window = tk.Tk()
        window.title = "testicon"
        window.geometry("800x400")
        window.resizable(0, 0)
    
        img_data = base64.b64decode(img)
    
        with open("pdf.ico", "wb+") as fw:
            fw.write(img_data)
    
        window.iconbitmap("pdf.ico")
        os.remove("pdf.ico")
    
        window.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    3. 源代码

    #!python
    # author:kunta
    # date: 2022-09
    # version 1.1.0
    # description: this software have 4 function
    # 1. 选择两个pdf指定的页码并合并成一个文件,未指定页码则完全合并两个文件
    # 2. 选择一个指定的pdf文件,并指定页码,将指定的页码提取出来,可以用’,‘和’-‘分割
    # 3. 选择一个pdf文件,将其内容转换为word文件。
    # 4. 选择一个pdf文件将其表格转换为excel文件。
    
    # date 2022-10
    # version 2.0
    # 本版本增加PDFOCR识别功能。
    
    import tkinter as tk
    from tkinter import ttk, HORIZONTAL
    from tkinter import filedialog
    from tkinter import messagebox
    from tkinter import Button, Label, StringVar, IntVar
    from tkinter.ttk import Separator
    from tkinter import RAISED
    from PyPDF2 import PdfReader, PdfMerger, PdfWriter
    from functools import partial
    from pdf2docx import Converter
    import pdfplumber as ppm
    import pandas as pd
    import ctypes
    from icon import img   # 将pdf.ico图片转换成base64文件并作为img变量保存到icon.py中。
    import openpyxl
    import cv2
    import os
    import base64
    
    
    # 读取合并文件的第一个选择框内容
    def askfile1():
        # 打开文件选择器,并筛选出pdf文件
        filename = tk.filedialog.askopenfilename(filetypes=[('PDF', '*.pdf'), ('All Files', '*')])
        if filename is None:
            entry1.insert(0, '您没有选择任何文件!')
        else:
            entry1.delete(0, "end")     # 选择文件之后,将entry1输入框的内容清空。
            entry1.insert(0, filename)  # 然后将选择的文件全路径插入到entry1输入框中
    
    
    # 读取合并文件的第二个选择框内容
    def askfile2():
        filename = tk.filedialog.askopenfilename(filetypes=[('PDF', '*.pdf'), ('All Files', '*')])
        if filename is None:
    
            entry2.insert(0, '您没有选择任何文件!')
        else:
            entry2.delete(0, "end")
            entry2.insert(0, filename)
    
    
    # 读取分割文件选择框内容
    def askfile3():
        filename = tk.filedialog.askopenfilename(filetypes=[('PDF', '*.pdf'), ('All Files', '*')])
        if filename is None:
            entry3.insert(0, '您没有选择任何文件!')
        else:
            entry3.delete(0, "end")
            entry3.insert(0, filename)
    
    
    # 读取pdf转word选择框内容
    def askfile4():
        filename = tk.filedialog.askopenfilename(filetypes=[('PDF', '*.pdf'), ('All Files', '*')])
        if filename is None:
            entry4.insert(0, '您没有选择任何文件!')
        else:
            entry4.delete(0, "end")
            entry4.insert(0, filename)
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
  • 相关阅读:
    图像增强技术与OpenCV实现
    剑指offer专项突击版第36天
    Leetcode刷题详解——找到字符串中所有字母异位词
    洛谷P2486 [SDOI2011]染色(树链剖分初入门)
    odoo在iot领域的发展情况
    Doping:使用精心设计的合成数据测试和评估异常检测器的技术
    LeetCode-1710. 卡车上的最大单元数【自定义排序,贪心】
    ES 中时间日期类型 “yyyy-MM-dd HHmmss” 的完全避坑指南
    无监督学习——k均值
    基于 I2C 协议的 AD实验(附代码)
  • 原文地址:https://blog.csdn.net/kuntagang/article/details/127974319