こんにちは、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とは?・実現できること
最後に

お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら