【Python】PDF上にPDFを貼る(合成・マージ)アプリ作成(PyPDF2、mergePage)
2020.11.01 /
仕事においてPDFを扱うことは非常に多いですよね。
PDF操作を簡単にできるようになれば、仕事の効率は良くなるはずです。
PythonでPDFファイルを操作する場合、PyPDF2を使用することが多いです。
本記事では、PDF上にPDFを貼り付ける(合成・マージ)方法を解説いたします。
そこまでこの方法を必要とする人は少ないかもしれません。
ですが少なくとも少数はいるはずです。
というのも、私の会社ではPDF(特定の書類)の上に、とあるPDF(エクセルをPDFに変換した、文字のみが記入されているPDF)を貼り付ける作業がありました。
今まではPDFを印刷し、さらにその印刷したPDFにとあるPDFを印刷するという作業を行っていました。
今回紹介するアプリを作成してから、わざわざ紙を印刷する必要がなくなりました。
ぜひ今回紹介する方法をマスターしていただき、仕事の効率化や紙の削減を進めていただければと思います。
今回使用するPyPDF2モジュールの使い方を紹介した記事は他にもありますので、仕事に合う記事をぜひ見つけて参考にしてください。
【Python】PyPDF2を使ってPDFからテキスト文字を読み取り・抽出する
【Python】PyPDF2でPDF内容を読み取りファイル名を変更するアプリ開発
アプリの概要
今回作成するアプリケーションの概要を説明します。
アプリはGUIアプリケーションであり、GUI画面の作成にはTkinterを使用します。
作成されるGUIウィンドウは以下になります。
TkinterでGUI画面を表示する
貼り付けられるPDFを選択する
貼り付けるPDFを選択する
出力フォルダを選択する
上記の流れで動作する、PDF上にPDFを貼り付けるアプリを作成していきます。
アプリのソースコード紹介
上記で紹介したアプリのソースコードを以下に記します。
コピペして、実際にどのように動くのか確かめてみてください。
import tkinter as tk
import tkinter.ttk as ttk
import tkinter.font as f
import tkinter.filedialog,tkinter.messagebox
import os, sys
import PyPDF2
def set_from():
entry_from.delete(0,tk.END)
fTyp = [("", ".pdf")]
iDir = os.path.abspath(os.path.dirname(sys.argv[0]))
pdfFrom = tkinter.filedialog.askopenfilename(filetypes=fTyp, initialdir=iDir)
if pdfFrom == '':
return ""
entry_from.insert(tk.END,pdfFrom)
def set_to():
entry_to.delete(0,tk.END)
fTyp = [("", ".pdf")]
iDir = os.path.abspath(os.path.dirname(sys.argv[0]))
pdfTo = tkinter.filedialog.askopenfilename(filetypes=fTyp, initialdir=iDir)
if pdfTo == '':
return ""
entry_to.insert(tk.END,pdfTo)
def set_output():
entry_output.delete(0,tk.END)
iDir = os.path.abspath(os.path.dirname(sys.argv[0]))
dirOut = tkinter.filedialog.askdirectory(initialdir=iDir)
if dirOut == '':
return ""
entry_output.insert(tk.END,dirOut)
def merge():
pdfFrom = entry_from.get()
pdfTo = entry_to.get()
pdfOut = entry_output.get() + "/merge.pdf"
with open(pdfFrom, mode='rb') as f, open(pdfTo, mode='rb') as t, open(pdfOut, mode='wb') as o:
# マージするConfidential
read_t = PyPDF2.PdfFileReader(t)
page_t = read_t.getPage(0)
# マージ対象のファイル
read_f = PyPDF2.PdfFileReader(f)
page_f = read_f.getPage(0)
page_f.mergePage(page_t)
writer = PyPDF2.PdfFileWriter()
writer.addPage(page_f)
# ファイルへの書き込み
writer.write(o)
tkinter.messagebox.showinfo('完了', "合成したファイルを作成しました")
if __name__ == '__main__':
root = tk.Tk()
root.title("Merge App")
root.geometry("550x150")
font1 = f.Font(family="MSゴシック", size=12)
# メインフレームの作成と設置
frame = tk.Frame(root)
frame.pack(fill = tk.BOTH, pady=10, padx=10)
# 各種ウィジェットの作成
label_from = ttk.Label(frame, text="Select PDF 1 :")
entry_from = ttk.Entry(frame, width=50)
button_from = ttk.Button(frame, text="参照", command=set_from)
label_to = ttk.Label(frame, text="Select PDF 2 :")
entry_to = ttk.Entry(frame, width=50)
button_to = ttk.Button(frame, text="参照", command=set_to)
label_output = ttk.Label(frame, text="Output Folder :")
entry_output = ttk.Entry(frame, width=50)
button_output = ttk.Button(frame, text="参照", command=set_output)
label_from["font"] = font1
label_to["font"] = font1
label_output["font"] = font1
button = ttk.Button(frame, text="実行", command=merge)
label_from.grid(row=0, column=0)
entry_from.grid(row=0, column=1)
button_from.grid(row=0, column=2, padx=5)
label_to.grid(row=1, column=0)
entry_to.grid(row=1, column=1)
button_to.grid(row=1, column=2, padx=5)
label_output.grid(row=2, column=0)
entry_output.grid(row=2, column=1)
button_output.grid(row=2, column=2, padx=5)
button.grid(row=3, column=1, pady=5)
root.mainloop()
GUIの作成
本アプリケーションは、PythonのTkinterでGUIウィンドウを作成しています。
Tkinterの使い方は以下記事を参考にしてください。
【Python】tkinterを使ったGUIアプリケーションの作成方法
PDFの貼り付け(合成・マージ)
PDF上にPDFを貼り付けるにはmergePageメソッドを使います。
page_f.mergePage(page_t)
ここではpage_f上にpage_tを貼り付けています。
この方法を応用すれば、例えば対象のPDF群に会社ロゴの透かしを入れる等できるようになります。
この場合は透かしをpage_t、透かしを入れるPDFをpage_fにします。
透かしではなく、ページ番号を入れたいという方は、今回紹介しているmergePageでも実現できますが、reportlabでページ番号を記載した方が簡単です。
【Python】PDFを新規作成・文字の書き込み・図形の描画をする方法(reportlab)
mergePageで貼り付けた後は必ず対象のPDFを保存してください。
writer = PyPDF2.PdfFileWriter()
writer.addPage(page_f)
# ファイルへの書き込み
writer.write(o)
まとめ
PDF上にPDFを貼る(合成・マージ)アプリ作成はいかがでしたでしょうか。
仕事でPDF上にPDFを貼る必要がある人は、コピペで使えるようにソースコードを公開しているので、どんどん使ってください。
またexeファイルにして、誰でもこのアプリを使えるようにしたい場合は、pyinstallerを使ってexeファイルにしてみてください。
【Python】pyinstallerでpyファイルを配布用にEXE化する方法
当サイトOffice54では、仕事に使えるアプリケーション作成方法をたくさん載せているので、他の記事もぜひ確認してくださいね。