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

投稿日:2020-06-13



ナカジ(@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("何かキーを押すと終了します")

よろしければご活用ください。

Python書籍&情報





おすすめのクリエイティブ・コーディング関連カテゴリー


筆者プライベートで本気の愛用品