单独提取PDF某一页的内容,或者把PDF文件批量拆成一页的
from tkinter import *
import tkinter.messagebox
import PyPDF2
import os
import tkinter as tk
from tkinter import filedialog
import time
G = 0
def root():
global entry1
global entry2
global G
global text1
global path
wind=Tk()
wind.title("PDF单独提取某页")
wind.geometry('500x120+700+250')
wind.minsize(700,120)
wind.maxsize(700,120)
mainmenu = Menu(wind)
mainmenu.add_command(label="退出",command=Q)
wind.config(menu = mainmenu)
label1 = Label(wind,text="请输入PDF文件路径:")
label1.grid(row=1,column=2)
entry1=Entry(wind,font=("微软雅黑",20),width=32)
entry1.grid(row=1,column=15)
label2 = Label(wind,text="请输入提取页码:")
label2.grid(row=2,column=2)
entry2=Entry(wind,font=("微软雅黑",20),state = "disabled",width=32)
entry2.grid(row=2,column=15)
button3=Button(wind,text="浏览",command=liulan)
button3.grid(row=1,column=16)
text1 = Listbox(wind,font = ("微软雅黑",12),width = 4,height = 1)
text1.grid(row=2 ,column=16)
button2=Button(wind,text="开始执行",command=start)
button2.grid(row=3,column=15)
button3=Button(wind,text="取消",command=qx)
button3.grid(row=3,column=16)
button4=Button(wind,text="批量拆分",command=cai)
button4.grid(row=3,column=2)
wind.mainloop()
def start():
global path
P = entry1.get()
O = entry2.get()
W = int(O)-1
T = W+1
if P != "":
path = P
else:
pass
try:
pdf_file = open(path, 'rb')
pdf_reader = PyPDF2.PdfFileReader(pdf_file) # 创建 PDF 对象
source_name = pdf_file.name # 获",取源文件名称,包含绝对路径
pdf_writer = PyPDF2.PdfFileWriter() # 创建一个空白 PDF 对象
#for page_num in range(pdf_reader.numPages): # 将每页内容分别写入一个新文件
page_obj = pdf_reader.getPage(W)
pdf_writer.addPage(page_obj) # 向空白 PDF 对象中添加要复制的 PDF页面
new_name = source_name[:-4] + "第" + str(T) + "页" + ".pdf"
pdf_new_file = open(new_name, 'wb') # 创建一个新文件
pdf_writer.write(pdf_new_file) # 将添加了内容的空白 PDF 对象,写入到新建文件中
pdf_new_file.close()
#pdf_writer.__init__() # 将 PDF 对象初始化
pdf_file.close()
except(AttributeError):
start()
except:
tkinter.messagebox.showerror("涛:","出错了,请联系制作者,即将提示错误信息,请谨记!")
tkinter.messagebox.showerror("涛:",sys.exc_info())
else:
tkinter.messagebox.showinfo("涛:","提取成功")
def Q():
if tkinter.messagebox.askokcancel("涛:","确定退出?"):
os._exit(0)
def liulan():
global path
global G
G=G+1
entry1['state'] = 'normal'
root = tk.Tk()
root.title("涛涛正在选取文件,别打扰")
root.withdraw()
path = filedialog.askopenfilename() #获得选择好的文件
print(path)
if entry1.get() == '':
if path != "":
text1.insert(END,"OK")
text1.see(END)
else:
text1.insert(END,"NG")
text1.see(END)
else:
text1.insert(END,"NG")
text1.see(END)
entry1.delete(0,END)
entry1.insert(0,str(path))
entry1['state'] = 'disabled'
entry2['state'] = 'normal'
def qx():
global path
global text1
path = 0
entry1['state'] = 'normal'
entry2['state'] = 'disabled'
text1.see(END)
text1.delete(0,END)
text1.see(END)
def cai():
global path
tkinter.messagebox.showinfo("涛:","程序无响应属于正常现象,说明正在拆分生成文件,请稍等!!")
X=0
P = entry1.get()
while True:
try:
O=X+1
if P != "":
path = P
else:
pass
try:
pdf_file = open(path, 'rb')
pdf_reader = PyPDF2.PdfFileReader(pdf_file) # 创建 PDF 对象
source_name = pdf_file.name # 获取源文件名称,包含绝对路径
pdf_writer = PyPDF2.PdfFileWriter() # 创建一个空白 PDF 对象
#for page_num in range(pdf_reader.numPages): # 将每页内容分别写入一个新文件
page_obj = pdf_reader.getPage(X)
pdf_writer.addPage(page_obj) # 向空白 PDF 对象中添加要复制的 PDF页面
new_name = source_name[:-4] + "第" + str(O) + "页" + ".pdf"
pdf_new_file = open(new_name, 'wb') # 创建一个新文件
pdf_writer.write(pdf_new_file) # 将添加了内容的空白 PDF 对象,写入到新建文件中
pdf_new_file.close()
pdf_file.close()
X=X+1
except(AttributeError):
start()
except(IndexError):
break
tkinter.messagebox.showinfo("涛:","分割成功")
root()