機械系エンジニアの備忘録

20代独身社会人。仕事では機械・機構の研究開発を行っているエンジニアが、自分の専門分野ではないpythonを扱って楽しむブログです。

MENU

【python】【tkinter】【PyPDF2】PyPDF2を用いてPDFを抽出する簡単なアプリを作る

tkinterとPyPDF2を組み合わせてGUIからPDFを選択し、選択したPDFから指定のページを抽出する

■はじめに

前回、複数のPDFをGUIから選んで結合するアプリを作りました。

stjun.hatenablog.com

 今回そのアプリに任意のPDFから指定のページだけを抽出する機能を追加したいと思います。

■コード

import PyPDF2 as pdf2

import tkinter.filedialog as fl 

import tkinter as tk

import tkinter.messagebox as mb



root=tk.Tk()

root.title('PDF結合ソフト')

frame1=tk.LabelFrame(root,text="結合",foreground="green")

frame1.grid(row=0,sticky="we")



frame2=tk.LabelFrame(root,text="抽出",foreground="green")

frame2.grid(row=1,sticky="we")



entry_title=tk.Entry(frame1,width=40)

entry_title.insert(tk.END,"保存するファイル名を記入してください")

entry_title.grid(row=0,column=1,padx=5)



entry_page=tk.Entry(frame2,width=10)

entry_page.insert(tk.END,"ページNo.")

entry_page.grid(row=0,column=1,padx=5)



entry_separate_title=tk.Entry(frame2,width=30)

entry_separate_title.insert(tk.END,"保存ファイル名")

entry_separate_title.grid(row=0,column=2,padx=5)



def select():

    sub_pdf=pdf2.PdfFileMerger()

    filetype=[("all file","*")]

    path=fl.askopenfilenames(initialdir="C:/Users/ユーザー名",filetypes=filetype,title="select file")

    file_title=entry_title.get()

    for i in path:

        sub_pdf.append(i)

    sub_pdf.write('C:/Users/ユーザー名/'+file_title+'.pdf')

    sub_pdf.close()

    mb.showinfo("確認","PDFの結合に成功しました")

    

def separate(*args):

    try:

        filetype=[("all file","*")]

        path=fl.askopenfilename(initialdir="C:/Users/ユーザー名",filetypes=filetype,title="select file")

        source=pdf2.PdfFileReader(path)

        sepa_pdf= pdf2.PdfFileWriter()

        sepa_pdf.addPage(source.getPage(int(entry_page.get())))

        out_pdf = open(entry_separate_title.get()+'.pdf', 'wb')

        sepa_pdf.write(out_pdf)

        out_pdf.close()

        mb.showinfo("確認","PDFの抽出に成功しました")

    except:

        mb.showinfo("エラー","エラー。設定を確認してください")

    



button_select=tk.Button(frame1,text="選ぶ&結合",width=10,command=select)

button_select.grid(row=0,column=0)



button_separate=tk.Button(frame2,text="選ぶ&抽出",width=10,command=separate)

button_separate.grid(row=0,column=0)



root.mainloop()

(※コード内の「ユーザー名」の部分にお使いのPCの名前を入れて下さい)

実行すると以下の画面が現れます。

f:id:stjun:20191107232200p:plain

ページNo.の欄に抽出したいページ数(0始まり)を、保存ファイル名の欄にファイル名を入力し、左の「選ぶ&抽出」ボタンを押すと、pdfから指定のページ数が抽出されます。

f:id:stjun:20191107232427p:plain

f:id:stjun:20191107232509p:plain

■買って良かったもの紹介

 今回紹介したmatplotlib以外にもpandasやBokehなどのモジュールの使い方が書かれている本です。

公式リファレンス等もありますし、ネットで探せばいくらでもモジュールの使い方・書き方は見つかりますが、一冊くらいこのような本を手元に持っておくと便利です。

 

pythonを初めて触ろうとした時に読んだ本を紹介します。

 

 この本は、初心者に最適だと思います。確か亀を動かすゲームのようなコードが載っていたと思います。pythonをこれから始めようと思っている人は読んでみて下さい。

また下の入門python3も良い本だと思いますが、分厚いので中々根気が必要です。個人的には最小限必要なことが書いてある薄い本を読み、必要になってからちょっとずつ知識を増やしていくのが良いと思います。

また何度も紹介しますが、以下のニューラルネットワーク自作入門は非常に良い本です、pythonの書き方から記載されているのでいきなり読んでも大丈夫だと思います。

 とりあえず基本的なコードの書き方さえ分かってしまえば、後はネットで知りたい情報にアクセスする方が早いと思います。

 

■おわりに

いかがだったでしょうか。次回も更に機能を追加していきます。