【Python】PDFファイルの暗号化|パスワード設定(かける・解除する)をPyPDF2で実現

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

PDFファイルをPythonで暗号化(パスワード設定)したり、暗号(パスワードロック)を解除できるようにしたい」本記事ではこの要望に応えます。記事前半では暗号化手順を紹介し、後半では暗号の解除方法を紹介します。

目次

【Python】PDFファイルを暗号化する手順

Pythonには、PyPDF2というPDF文書から自由にデータを抽出したり、PDFファイル自体に直接操作を加えられるモジュールがあります。本記事ではPyPDF2を用いてPDFを暗号化(パスワード設定)する方法について解説します。

PDFを暗号化する際の手順を上図に示します。後述ではこの手順に従ったPDF暗号化方法を紹介していきます。

PyPDF2モジュール

PDFの操作をPythonで可能にするために、PyPDF2モジュールを事前にインストールする必要があります。

コマンドラインから下記を実行し、インストールしておきましょう。

pip install PyPDF2

【参考】PDFソフトで全てのPDFタスクを取り扱う方法

Python言語で構築することに障壁がある方向けに、ノーコードかつ手軽にPDFタスクに対応できるソフトを紹介します。Pythonで構築したPDF機能と上記ソフト機能を比較し、お好みの方法を選択できると良いでしょう。

Pythonを活用してPDFタスクの自動化手法を深く学びたい方向けに、おすすめの教材も併せてご紹介します。

【Python実践】PDFファイルのパスワード設定

それでは実際にPythonを活用してプログラムを記述していきましょう!

PDF読み込み用のオブジェクト生成

まず、暗号化したいPDFファイルをopen()関数に渡して読み込みます。続いて、読み込み内容をPyPDF2.PdfFileReader()メソッドに渡してオブジェクトを生成します。

import PyPDF2
import os

# 読み込むPDFファイル名を記載しましょう
filename = "ファイル名.pdf"

# PDFファイルをバイナリ読み込みモードで開く
pdf_file = open(filename,"rb")

# PyPDF2.PdfFileReader()メソッドに上記を渡してオブジェクト生成
pdf_filereader = PyPDF2.PdfFileReader(pdf_file)

PDF書き込み用のオブジェクト生成

PDFの暗号化処理では、読み込んだPDFファイル情報を新たに作成する書き込み用オブジェクトにコピーした後、書き込み用オブジェクトに暗号化情報を付与します。そして、最終的に書き込み用オブジェクトをPDFとして出力します。

ここでは上記のピンク強調部分を下記で実行します。

# PdfFileWriterオブジェクト
pdf_writer = PyPDF2.PdfFileWriter()

# PdfFileReaderオブジェクトからPdfFileWriterオブジェクトにページをコピー
for num in range(pdf_filereader.numPages):
    pdf_writer.addPage(pdf_filereader.getPage(num))

PDFファイル暗号化

上記で作成した書き込み用のオブジェクトにパスワード情報を付与します。

# パスワードを指定しましょう
password = "password"

# 暗号化
pdf_writer.encrypt(password)

PDFファイル出力

最後に暗号化したPDFファイル出力です。初期に読み込んだPDFファイルはosモジュールを用いて削除し、暗号化されたファイルを同じ名前で作成することとします。

# 暗号化前のファイル情報削除
os.remove(os.path.abspath(filename))

# 暗号化したファイル出力
output = open(filename,"wb")
pdf_writer.write(output)
output.close()

PDF暗号化用のプログラム全量まとめ

本記事で紹介したPDF暗号化用のプログラムを関数形式にまとめて紹介します。

import PyPDF2
import os

# 読み込むPDFファイル名を記載しましょう
filename = "file.pdf"


def pdf_encrypt(filename):
    
    #pasword設定
    password = str(input("パスワードを入力しましょう"))
    
    #PdfFileReaderオブジェクト
    open_pdf = open(filename,"rb")
    pdf_filereader = PyPDF2.PdfFileReader(open_pdf)

    #PdfFileWriterオブジェクト
    pdf_writer = PyPDF2.PdfFileWriter()

    for num in range(pdf_filereader.numPages):
        pdf_writer.addPage(pdf_filereader.getPage(num))
        
    #暗号化
    pdf_writer.encrypt(password)
    
    #元ファイル削除
    os.remove(os.path.abspath(filename))

    #PDFファイル生成
    output = open(filename,"wb")
    pdf_writer.write(output)
    output.close()
    
    return "complete!"

関数名はpdf_encrypt()であり、第一引数に暗号化したいファイル名を指定して実行しましょう。

PDFファイルの暗号を解除する手順・実践

PDFファイルの暗号解除は、暗号化とほぼ同様の手順で実行できます。そのため、全量記載したプログラムとその要点のみ示します。

import PyPDF2

# ファイル名を記載しましょう
filename = "ファイル名.pdf"

def pdf_decrypt(filename):
    
    # pasword設定
    password = str(input("パスワードを入力しましょう"))
    
    #PdfFileReaderオブジェクト
    open_pdf = open(filename,"rb")
    pdf_filereader = PyPDF2.PdfFileReader(open_pdf)
    
    # 暗号解除
    pdf_filereader.decrypt(password)

    # PdfFileWriterオブジェクト
    pdf_writer = PyPDF2.PdfFileWriter()

    for num in range(pdf_filereader.numPages):
        pdf_writer.addPage(pdf_filereader.getPage(num))
    
    # 元ファイル削除
    os.remove(os.path.abspath(filename))

    # PDFファイルを新規生成
    output = open(filename,"wb")
    pdf_writer.write(output)
    output.close()
    
    return "complete!"

関数名はpdf_decrypt()であり、第一引数に暗号解除したいファイル名を指定して実行しましょう。

暗号解除はdecrypt()メソッドにパスワードを渡すことで実現できますPdfFileReadオブジェクトと合わせて下記のように実行します。

pdf_filereader.decrypt("パスワードを入力")

最後にPDFファイルを開き、パスワードロックが解除されているか確認してみましょう!

【参考】Pythonで面倒な作業を自動化!手法一挙公開中!

当サイトでは日々面倒な作業をPythonで自動化する方法を多数配信しております。日々の作業が飛躍的効率化できること間違いなしですので、以下気になった記事があれば併せてご覧ください。

【面倒なタスクをPythonで解決!】作業効率化の人気記事一覧




【参考】Pythonとは?・実現できること

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
目次