こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
【Python】PDFファイルを暗号化する手順
Pythonには、PyPDF2
というPDF文書から自由にデータを抽出したり、PDFファイル自体に直接操作を加えられるモジュールがあります。本記事ではPyPDF2を用いてPDFを暗号化(パスワード設定)する方法について解説します。
PDFを暗号化する際の手順を上図に示します。後述ではこの手順に従ったPDF暗号化方法を紹介していきます。
PyPDF2モジュール
PDFの操作をPythonで可能にするために、PyPDF2
モジュールを事前にインストールする必要があります。
コマンドラインから下記を実行し、インストールしておきましょう。
pip install PyPDF2
【参考】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とは?・実現できること
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら