1.选择待分割文件

2.选择保存位置

3.输入要分割的页码,单页或者页码范围

使用python tkinter 可生成exe可执行文件

win11 可用

# 20220521
# 1.选择要分割的文件
# 2.选择要保存的位置,分割为多个文件时,可自动用页码命名
# 3.输入要分割的页码,可以是一个范围1-23(将第1-23页提取出来),也可以是单个页码,12(将第12页单独提取出来)
# 4.点击按钮执行
# 20220528
# 模块化 可用
# 20220529 输入页码范围判断
import os.pathfrom PyPDF2 import PdfFileReader, PdfFileWriter
import tkinter as tk
from tkinter import filedialog as fd
import tkinter.messageboxfile_types = [('PDF文件', '.pdf')]# 分割操作,三个参数分别为待分割文件,分割开始页,结束页
def split_pdf(pdf_i, start_page, end_page):pdf = PdfFileReader(pdf_i)# pages = len(pdf.pages)# pages = pdf.getNumPages()pdf_wt = PdfFileWriter()# print(pages)for i in range(start_page - 1, end_page):pdf_wt.addPage(pdf.getPage(i))# pdf_wt.addPage(pdf.pages(i))# 使用wb模式。使用ab模式的话,会保留原始数据,文件会越来越大pdf_path, pdf_name = os.path.split(pdf_in.get())pdf_name, pdf_ext = os.path.splitext(pdf_name)split_name = pdf_out.get() + '\\' + pdf_name + f'(第{start_page}——{end_page}页).pdf'split_name2 = pdf_out.get() + '\\' + pdf_name + f'(第{start_page}页).pdf'pdf_name = split_name2 if start_page == end_page else split_namewith open(pdf_name, 'wb') as outfile:pdf_wt.write(outfile)# 选择待分割文件
def select_pdf():pdf_selected = fd.askopenfilename(filetypes=file_types)if pdf_selected != '':pdf_in.set(pdf_selected)pdf = PdfFileReader(pdf_selected)pages = len(pdf.pages)pdf_pages.set(f'③输入要分割的页码:(页码范围1-{pages})')button_out['state'] = 'normal'# button_split['state'] = 'normal'# 选择保存位置
def select_out():# path_save = fd.asksaveasfilename(defaultextension='*.pdf', filetypes=file_types)path_save = fd.askdirectory()# a = fd.askdirectory()if path_save != '':button_split['state'] = 'normal'pdf_out.set(path_save)# 分割前操作
def pdf_split():if pdf_out2.get() != '':# 输入页码范围时,将中文’,‘替换为英文','page_out_in = pdf_out2.get().replace(',', ',')# 将输入的要分割的页码分开page_split = page_out_in.split(',')# 要分割的pdf文件名称,获取StringVar中存储的数据pdf_to_be_split = pdf_in.get()pdf = PdfFileReader(pdf_to_be_split)pages = len(pdf.pages)flag_successed =0flag_failed =[]for i in page_split:page_range = i.split('-')page_range_l = len(page_range)# 如果输入的是一个范围,获取获取开始页和结束页。例如,1-18,18-39,2-15# 起始页大于结束页时,不能正确分割if page_range_l > 1:start_page = int(page_range[0])end_page = int(page_range[1])if start_page <= end_page <= pages:#print(start_page, end_page, pages)split_pdf(pdf_to_be_split, start_page, end_page)flag_successed+=1#tkinter.messagebox.showinfo('操作提示', '分割成功')else:flag_failed.append(f'{start_page}-{end_page}')#tkinter.messagebox.showinfo('操作提示', f'页码输入错误,页码范围为1——{pages}')# 输入的是某个数值,单独提取一页。例如1,3,12,5,53# 输入数值大于待分割文件总页数时,不能正常分割elif page_range_l == 1:if int(page_range[0]) <= pages:split_pdf(pdf_to_be_split, int(page_range[0]), int(page_range[0]))flag_successed += 1#tkinter.messagebox.showinfo('操作提示', '分割成功')else:flag_failed.append(f'{page_range[0]}')#tkinter.messagebox.showinfo('操作提示', f'页码输入错误,页码范围为1——{pages}')if len(flag_failed)==0:tkinter.messagebox.showinfo('操作提示', f'{flag_successed}个文件分割成功')else:tkinter.messagebox.showinfo('操作提示', f'{flag_successed}个文件分割成功,{len(flag_failed)}个文件分割失败')tkinter.messagebox.showinfo('操作提示', f'以下页码输入错误,页码范围为1--{pages}\n{flag_failed}')global pdf_in, pdf_out, pdf_out2, entry_out, entry_out2, pdf_pages, button_out, button_splitdef main(root3):global pdf_in, pdf_out, pdf_out2, entry_out, entry_out2, pdf_pages, button_out, button_splitpdf_in = tk.StringVar()pdf_out = tk.StringVar()pdf_out2 = tk.StringVar()pdf_pages = tk.StringVar()pdf_pages.set('③输入要分割的页码:')label_input = tk.Label(root3, text='①选择要分割的PDF文件:')entry_input = tk.Entry(root3, textvariable=pdf_in, width=45)button_input = tk.Button(root3, text='①选择要分割的PDF文件', command=select_pdf)label_out = tk.Label(root3, text='②选择输出文件夹:')entry_out = tk.Entry(root3, textvariable=pdf_out, width=45)button_out = tk.Button(root3, text='②选择保存位置', command=select_out)button_out['state'] = 'disabled'page_out = tk.Label(root3, textvariable=pdf_pages, text='③输入要分割的页码:')page_out_ = tk.Label(root3, text='(可分割为多个PDF,用逗号分隔。例如,1-10,2-17,10,12)')entry_out2 = tk.Entry(root3, textvariable=pdf_out2, width=45)button_split = tk.Button(root3, text='④执行分割', command=pdf_split, width=20, height=3)button_split['state'] = 'disabled'# entry_out2.bind('<Key>', jc)# button_split.configure(text=pdf_out2.get())label_input.place(x=10, y=10)entry_input.place(x=10, y=35)button_input.place(x=350, y=32)label_out.place(x=10, y=80)entry_out.place(x=10, y=105)button_out.place(x=350, y=97)page_out.place(x=10, y=150)page_out_.place(x=10, y=175)entry_out2.place(x=10, y=200)button_split.place(x=220, y=240)root2 = tk.Tk()
# 窗口尺寸
# root.geometry('400x300')
# 窗口居中
sw = root2.winfo_screenwidth()
sh = root2.winfo_screenheight()
c = (sw - 400) / 2
d = (sh - 300) / 2
# print(a,b,c,d)
root2.geometry('605x500+%d+%d' % (c, d))
# 软件标题
root2.title('PDF分割软件')
# 软件左上角图标
root2.iconbitmap('2.ico')
# 窗口大小不可调
root2.resizable(width=False, height=False)root = tk.Frame(root2, width=605, height=500)
root.place(x=0, y=0)
main(root)root2.mainloop()

20220529 使用python分割pdf文件相关推荐

  1. 利用Python提取PDF文件中的文本信息

    如何利用Python提取PDF文件中的文本信息 日常工作中我们经常会用到pdf格式的文件,大多数情况下是浏览或者编辑pdf信息,但有时候需要提取pdf中的文本,如果是单个文件的话还可以通过复制粘贴来直 ...

  2. python分割_Python文件合并与分割操作方法工具

    玩蛇网Python之家,之前的文章中有为大家介绍过如何使用python对文件进行分割或是合并的操作方法,今天再次为大家示例了同样功能,但操作方法却不相同.利用Python对PDF文件进行分割也是可以的 ...

  3. python 操作PDF文件 之 A3页面转A4

    python 操作PDF文件 A3页面转A4页面 文章目录 1. 需求概述 2. 代码实现 1. 需求概述 最近接到一份PDF资料需要打印,奈何页面是如图所示的A3格式的,奈何目前条件只支持打印A4. ...

  4. Python绘制PDF文件~超简单的小程序

    Python绘制PDF文件 项目简介 这次项目很简单,本次项目课,代码不超过40行,主要是使用 urllib和reportlab模块,来生成一个pdf文件. reportlab官方文档 http:// ...

  5. gnuradio上怎么使用python文件_使用Python从PDF文件中提取数据

    前言 数据是数据科学中任何分析的关键,大多数分析中最常用的数据集类型是存储在逗号分隔值(csv)表中的干净数据.然而,由于可移植文档格式(pdf)文件是最常用的文件格式之一,因此每个数据科学家都应该了 ...

  6. pdf exe如何提取pdf文件_python应用:如何用python提取pdf文件中的文字

    从pdf中提取文字,相信很多人都干过这事,怎么在python中实现呢,今天带大家看看. 第一步导入库 import PyPDF2 第二步导入pdf文件 pdf_file =open('dataset/ ...

  7. python数据生成pdf,Python生成pdf文件的方法

    摘要:这篇Python开发技术栏目下的"Python生成pdf文件的方法",介绍的技术点是"python生成pdf文件.python生成pdf.生成pdf文件.Pytho ...

  8. 使用Python从PDF文件中提取数据

    前言 数据是数据科学中任何分析的关键,大多数分析中最常用的数据集类型是存储在逗号分隔值(csv)表中的干净数据.然而,由于可移植文档格式(pdf)文件是最常用的文件格式之一,因此每个数据科学家都应该了 ...

  9. python分割合并文件

    python分割合并文件 python分割文件 将notebook.txt文件分割放到yyy文件夹中: python合并文件 将yyy文件夹中的文件合并到以日期开头的日志文件中: 运用案例:仿真出问题 ...

  10. Python:PDF文件转图像

    Python:PDF文件转图像 什么是PyMuPDF? Python环境下想要将PDF文件转图像,可以使用PyMuPDF库. PyMuPDF是MuPDF的Python绑定-"轻量级PDF和X ...

最新文章

  1. 点点看   只有想不到没有看不到
  2. 在NodeJS中操作文件常见的API
  3. Hibernate 性能优化技巧
  4. mongdb开始标记
  5. myeclipse转maven项目
  6. IOS初级:UIScrollView UIPageControl
  7. 点对点 客户端-服务器 聊天程序
  8. LinQ学习之旅(1)
  9. mysql maximum idle_MySQL的MaxIdleConns不合理,会变成短连接的原因
  10. PaddleClas模型训练/评估:数据准备
  11. Spring之控制反转(IOC)
  12. 计算机软件处理化学数据,化学中的常用计算机软件与资源程功臻武汉大学化学系计算机作为一.pdf...
  13. 使用ffmpeg合并.h264文件
  14. DnsJumper下载
  15. 【竞赛篇-申报平台】浙江省国创(大创)平台里导出的word显示不出图片、右边界溢出页面,图片空间不足的解决办法
  16. “燕云十六将”之三弟王静
  17. Java实现IP库归属地查询
  18. MSDC 4.3 接口规范(19)
  19. 解决:测试HDFS读写性能时出现错误
  20. 知识付费-windows+宝塔安装教程

热门文章

  1. 怎么求中位数和分位数 概率密度函数_数理统计第四讲(次序统计量续,伽马分布)...
  2. IEEE Fellow、AAAS Fellow 同日公布,清华唐杰、京东郑宇等数十位华人入选
  3. C++ 相关职位的要求
  4. EMC VMAX存储的内存布局
  5. mysql数据库木马查杀_服务器木马后门怎么查杀
  6. Netty(四十一) - 心跳(heartbeat)源码剖析
  7. ddos源码 ntp_DDOS攻击之NTP放大攻击
  8. matlab消除多重共线性,多重共线性问题的几种解决方法-解决多重共线性的方法...
  9. web绿色服务器单文件,Web个人临时共享服务器
  10. lbs与gis的计算机存储模式,什么是LBS、GIS