LoginSignup
14
17

More than 3 years have passed since last update.

PythonのPDF処理まとめ(結合・分割, 画像変換, パスワード解除)

Last updated at Posted at 2019-07-10

はじめに

PythonでPDFを扱う方法を目的別にまとめます。
シンプルなファイル読み書き、画像への変換やパスワードロック解除等について記載します。

PDFファイル読み書き

基本的な読み書きについてはPyPDF2というライブラリを使う事で実装可能です。

pip install PyPDF2

以下は、複数のPDFファイルをひとつのPDFに結合する関数の参考例です。

def integratePdf(fileList):
    merger = PyPDF2.PdfFileMerger()
    for file in fileList:
        merger.append(file)
    OUTPUT_DIR = os.path.dirname(fileList[0])
    merger.write(OUTPUT_DIR + '/output.pdf')
    merger.close()

mergerでPyPDF2のPdfFileMergerクラスのインスタンスを生成し、そこにPDFファイルのパスを渡しています。
merger.write()関数により結合後のPDFファイルを出力します。
もし特定のページを追加したいのであれば以下のとおり書けば良いです。

merger.append(file, pages=(0,2))

この場合、1ページ目から3ページ目までを、mergerに追加しています。

PDF同士の結合のパターンを紹介しましたが、シンプルなRead&Writeにも対応しています。
しかしながら、PDFをPDFのまま扱う場合の処理というのは、結合・分割にほぼ限られるのかな、と思います。

画像への変換

pdf2imageというライブラリで非常にシンプルに書けます。
※pillowとpopplerというライブラリに依存

pip install pdf2image
pip install pillow
pip install poppler

これでインストールして

from pdf2image import convert_from_path

でライブラリをインポートし

imgs = convert_from_path(pdf_filepath)
for img in imgs:
    img.save('output.png','png')

例えばこんな感じで、pngファイルとして保存する事ができます。非常にかんたん。

パスワードロックの解除

PyPDF2もパスワードによる読み込み機能はありますが、こちらで説明したとおり古いバージョンのPDFにしか対応していません。という事で、pikepdfというライブラリを使います。Documantationを読む限り、qpdfのラッパーです。
※既知のパスワードのロックを解除するコード例です

GitHub/pikepdf

pip install pikepdf
from pikepdf import Pdf

でPdfクラスをインポート

以下は「(パスワードの文字列).pdf」を読み込んで、パスワードロックを解除した別ファイル「decrypted.pdf」として保存する関数の参考例です。

def unlockPdf(filepath):
    PSWD = os.path.basename(filepath)[0:-4]
    pdffile = Pdf.open(filepath, password=PSWD)
    newPdf = Pdf.new()
    newPdf.pages.extend(pdffile.pages)
    OUTPUT_DIR = os.path.dirname(filepath)
    newPdf.save(OUTPUT_DIR + '/decrypted.pdf')

パスワードは既知である必要があり、パスワードのわからないPDFファイルのロックを解除するものではありません。

pdffile = Pdf.open(filepath, password=PSWD)

この行で、パスワードロックされたPDFを、そのパスワードを用いて読み込んでいます。
そして以下の行で新たなPDFファイルとして出力しています。
とてもシンプルに書けますね。

ちなみに、Windows32bit環境で動作する実行ファイルを作ってあります。
GitHub - Kanahiro/PdfUnlocker

終わりに

以上、実装したい処理別にライブラリを紹介しました。
他には、PDFファイルからのデータマイニング(OCR機能を用いてPDFファイルからテキストデータへの変換)なんかも需要があるようです。
今後紹介できればと考えています。
さて本記事は結局、PDFを○○したいときにはどのライブラリを使うべきか、という記事になっております。
先人が、「こういう機能があれば便利」と思って書いてくれたライブラリ、活用しない手はありません。
でもいつかはそういったライブラリを提供する側に回りたいなと思うこの頃です。

14
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
17