python脚本分割pdf文件
生活随笔
收集整理的這篇文章主要介紹了
python脚本分割pdf文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
show me your code:
# 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('tubiao.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()運行:
?操作:
1.選擇待分割文件
2.選擇保存位置
3.輸入要分割的頁碼,單頁或者頁碼范圍
?
總結
以上是生活随笔為你收集整理的python脚本分割pdf文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP字符串函数stripslashes
- 下一篇: 全加器——Verilog HDL语言