【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("何かキーを押すと終了します")
よろしければご活用ください。