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

当ページには広告が含まれています。

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

こんな方におすすめ!
  • PythonでPDFファイルを暗号化(パスワード設定)、暗号解除(パスワードロック)できるようにしたい!
目次

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

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

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

PyPDF2モジュール

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

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

pip3 install PyPDF2 pycryptodome

【参考】PDFタスク自動化の学習におすすめの教材

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

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

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

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

まず、暗号化したいPDFファイルをPdfReader()メソッドに渡してオブジェクトを生成します。

from PyPDF2 import PdfReader, PdfWriter
import os

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

# PDFファイル読込
pdf_file_reader = PdfReader(filename)

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

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

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

# PdfWriterオブジェクト
pdf_writer = PdfWriter()

# PdfReaderオブジェクトからPdfWriterオブジェクトにページをコピー
for page in pdf_file_reader.pages:
    pdf_writer.add_page(page)

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暗号化用のプログラムを関数形式にまとめて紹介します。

from PyPDF2 import PdfReader, PdfWriter
import os

# 読み込むPDFファイル名を記載
filename = "ファイル名.pdf"
password = "password"

# =============================================
# 関数
# =============================================
def pdf_encrypt(filename, password):
    # PDFファイル読込
    pdf_file_reader = PdfReader(filename)

    # PdfWriterオブジェクト
    pdf_writer = PdfWriter()
    
    # PdfReaderオブジェクトからPdfWriterオブジェクトにページをコピー
    for page in pdf_file_reader.pages:
        pdf_writer.add_page(page)
            
    # 暗号化
    pdf_writer.encrypt(password)

    # 暗号化前のファイル情報削除
    os.remove(os.path.abspath(filename))
    
    # 暗号化したファイル出力
    output = open(filename,"wb")
    pdf_writer.write(output)
    output.close()

    print("complete")

# =============================================
# 関数実行
# =============================================

if __name__ == "__main__":
    pdf_encrypt(filename, password)

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

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

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

from PyPDF2 import PdfReader, PdfWriter
import os

# 読み込むPDFファイル名を記載
filename = "ファイル名.pdf"
password = "password"

# =============================================
# 関数
# =============================================
def pdf_decrypt(filename, password):
    # PDFファイル読込
    pdf_file_reader = PdfReader(filename)

    # パスワード解除
    pdf_file_reader.decrypt(password)

    # PdfWriterオブジェクト
    pdf_writer = PdfWriter()
    
    # PdfReaderオブジェクトからPdfWriterオブジェクトにページをコピー
    for page in pdf_file_reader.pages:
        pdf_writer.add_page(page)

    # 暗号化前のファイル情報削除
    os.remove(os.path.abspath(filename))
    
    # 暗号化したファイル出力
    output = open(filename,"wb")
    pdf_writer.write(output)
    output.close()

    print("complete")

# =============================================
# 関数実行
# =============================================

if __name__ == "__main__":
    pdf_decrypt(filename, password)

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

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

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

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

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




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

最後に

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

本記事をシェア!
目次