【Windows】PythonでPDFの回転と結合ができるツールを作ってみたのでソースとEXEを共有します。

ナカジ(@cp_nakajun)です。
Windows環境の時にたまにある不便。
「横向きのPDF」を受け取ること
書類をスキャンして送ってもらったりすると操作に不慣れなのか、そんなPDFを送ってくれる人が僕の環境にはいます。
Macなら「プレビュー」で回せるのでいいのですが、僕のWindows環境では困ります。
みんなはどうしてるんだろう??
なんとなく…聞けないでいる自分がいます。
オンラインサービスもたくさんあるので、ソレかなぁ~
普通にAcrobat Proか!
書類の内容によってはオンラインサービスは避けておいた方がいいかなって思うこともあり
Pythonで作ってみました。
まったくもってたいそうなものではありませんが、誰かに同様のニーズがあれば幸いです。
Python PDF Rotate & Marge Tool
EXEのダウンロードは以下です。
・PDF-Rotate_Marge-tool.zip
【機能】
- 90°ずつの回転
- 2つのPDFファイルを結合
【使い方】
1.PDF-Tools.exeを起動
2.プロンプト画面が表示されるのでモードを選択。 [回転:r] [結合:m][回転モード]
3.「ファイルを選択(ファイルパス) →」と表示されたらプロンプト画面にPDFをドロップ
4.回転する角度を「90,180,270」から選び、数値を入力[結合モード]
3.「ファイル1を選択」と表示されたらプロンプト画面にPDFをドロップ
4.「ファイル2を選択」と表示されたらプロンプト画面にPDFをドロップ5.「ファイル名が出力されました」と表示されたあと、何かキーを押すと終了します。
※ファイルはPDF-Tools.exeと同じディレクトリに出力されます。
【注意】
マイクロソフトオフィスから作成されたPDFなどがエラーになることがあります。
Acrobat Readerで「別名保存」することで当ツールが使える場合があります。
ソースコード
上記でダウンロードできるようにしたEXEのソースコードです。
import os
import PyPDF2
import datetime
############# 実行DirをPythonプログラムファイルのある場所に移動 #############
os.chdir(os.path.dirname(os.path.abspath(__file__))) #pythonの実行Dirを移動する
############# 出力ファイル名を時間で指定
date = datetime.datetime.now()
############# コンソール表示
print("")
print("========== PDFツール Ver.202006 ==========")
print("")
pdf_function = input("PDFモード選択 [回転:r] [結合:m] → ") #PDFモード選択
############# PDF 回転関数 #############
def pdf_rotater(PDF,angle):
File = open(PDF, "rb")
Reader = PyPDF2.PdfFileReader(File)
Writer = PyPDF2.PdfFileWriter()
for page in range(Reader.numPages):
obj = Reader.getPage(page)
obj.rotateClockwise(angle)
Writer.addPage(obj)
Output = open(OutputName, "wb")
Writer.write(Output)
Output.close()
File.close()
return
############# PDF 結合関数 #############
def pdf_marge(PDF1,PDF2):
File1 = open(PDF1, "rb")
File2 = open(PDF2, "rb")
Reader1 = PyPDF2.PdfFileReader(File1)
Reader2 = PyPDF2.PdfFileReader(File2)
Writer = PyPDF2.PdfFileWriter()
for page in range(Reader1.numPages):
Obj = Reader1.getPage(page)
Writer.addPage(Obj)
for page in range(Reader2.numPages):
Obj = Reader2.getPage(page)
Writer.addPage(Obj)
OutputFile = open(OutputName, "wb")
Writer.write(OutputFile)
OutputFile.close()
File1.close()
File2.close()
return
############# メインプログラム #############
if pdf_function == "r":
PDF = input("ファイルを選択(ファイルパス) → ") #入力ファイル名
angle = int(input("回転する角度を入力してください(90,180,270) → ")) #回転角度
OutputName = "Rotate-" + str(date.year) + str(date.month) + str(date.day) + str(date.hour) + str(date.minute) + str(date.second) + ".pdf" #出力ファイル名
pdf_rotater(PDF,angle)
if pdf_function == "m":
PDF1 = input("ファイル1を選択(ファイルパス) → ") #入力ファイル1
PDF2 = input("ファイル2を選択(ファイルパス) → ") #入力ファイル2
OutputName = "Marge-" + str(date.year) + str(date.month) + str(date.day) + str(date.hour) + str(date.minute) + str(date.second) + ".pdf" #出力ファイル名
pdf_marge(PDF1,PDF2)
print("")
print(str(OutputName) + "が出力されました")
print("")
input("何かキーを押すと終了します")
よろしければご活用ください。




