【Python】PDFを結合・分割・回転する方法

Pythonを使ってPDFを結合・分割・回転する方法について紹介します。


 

 PyPDF2の導入

PyPDF2は以下のように導入できます。

pip install PyPDF2

Anacondaユーザーの方であれば

conda install -c conda-forge pypdf2

としてインストール可能です。

名前に「2」と付いているからといってPython3未対応という訳ではないので安心して使えます。

 

 PDFを結合する

PDFを結合するときは append() メソッドを用います。引数にはファイルのパスを渡します。

ここでは「C:/Users/user/Downloads/」のフォルダ内にあるaaa.pdf、bbb.pdf、ccc.pdfの3つのPDFファイルをこの順番で統合し、unified.pdfという名前で同じフォルダ内に保存します。

import PyPDF2

merger = PyPDF2.PdfFileMerger() # オブジェクトを生成

merger.append('C:/Users/user/Downloads/aaa.pdf') # ファイルを追加
merger.append('C:/Users/user/Downloads/bbb.pdf')
merger.append('C:/Users/user/Downloads/ccc.pdf')

merger.write('C:/Users/user/Downloads/unified.pdf') # 書き出し

merger.close() # 閉じる

上記のスクリプトの場合だと unified.pdf に aaa.pdf、bbb.pdf、ccc.pdf の3ファイルが統合されます。

 

 PDFを分割する

PDFの分割は「特定のページの結合」と考えてページを指定して append() メソッドを利用し、複数回に分けてファイルの生成を行います。元ファイルのパスは変数に格納しておくとスッキリします。

import PyPDF2

targetPDF = 'C:/Users/user/Downloads/large.pdf' # 分割するpdfのパス

merger = PyPDF2.PdfFileMerger() # オブジェクト生成
merger.append(targetPDF, pages=PyPDF2.pagerange.PageRange(':14')) # ページ指定
merger.write('C:/Users/user/Downloads/small_1.pdf') # 書き出し
merger.close() # 閉じる

merger = PyPDF2.PdfFileMerger()
merger.append(targetPDF, pages=PyPDF2.pagerange.PageRange('14:20'))
merger.write('C:/Users/user/Downloads/small_2.pdf')
merger.close()

merger = PyPDF2.PdfFileMerger()
merger.append(targetPDF, pages=PyPDF2.pagerange.PageRange('20:'))
merger.write('C:/Users/user/Downloads/small_3.pdf')
merger.close()

上の例では large.pdf というファイルが small_1.pdf、small_2.pdf、small_3.pdf という3つのファイルに分割されます。ページ指定の部分で「14:20」と書いてありますが、ここで14ページ目は含まれない(15ページ目から出力される)ので注意して下さい。

 

 PDFを回転する

PDFを回転する場合は1ページごとに回転操作を施す必要があるので for 文を利用します。なお回転方向は右回り(時計回り)で、回転角は度数法で指定します。

import PyPDF2

TargetPDF = 'C:/Users/user/Downloads/original.pdf' # 入力ファイル名
OutputName = 'C:/Users/user/Downloads/kaiten.pdf' # 出力ファイル名
angle = 90 # 回転角度

File = open(TargetPDF, '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 に書き込む
Output.close()
File.close()

上記のスクリプトの場合だと original.pdf の各ページを時計回りに90°回転したpdfファイルを kaiten.pdf として出力します。紙媒体をスキャンして作成したpdfなどは所々ひっくり返っていたりして、そのままでは非常に読みにくいのですがPythonを使えば任意のページを自由に回転させて整形することができます。


 

以上はPyPDF2の基本的な使い方です。自前のプログラムでpdfの操作が完結すればオンラインアプリなどに頼る必要もなくなります。これにより外部にデータが漏洩する危険も避けられるので、セキュリティ面から見てもメリットは大きいと言えます。

PyPDF2はとても便利なライブラリなので、是非お好みに書き換えてお使い下さい!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です