この記事の内容
PythonからPDFを操作する方法を紹介します。
PythonでPDF操作をすることで、大量のファイルに対しての操作を自動化することができますのでオススメです。
ここでは、pyPDF2というライブラリを使用して、各種PDFの操作をしていきます。
PDFを操作する
pyPDF2のインストール
まずは、以下のコマンドで、pyPDF2をインストールします。
pip install PyPDF2
PDFの情報を表示する
PDFを読込み、タイトルやページ数などの情報を表示するコードを紹介します。
# pdf_info_reading.py
from PyPDF2 import PdfFileReader
def show_pdf_information(pdf_path):
with open(pdf_path, 'rb') as f:
pdf = PdfFileReader(f)
document_info = pdf.getDocumentInfo()
number_of_pages = pdf.getNumPages()
pdf_infomation_text = f"""
PDFファイルパス:{pdf_path}:
タイトル:{document_info.title}
サブタイトル:{document_info.subject}
著者:{document_info.author}
ページ数:{number_of_pages}
"""
print(pdf_infomation_text)
if __name__ == '__main__':
pdf_path = 'sample.pdf'
show_pdf_information(pdf_path)
PDFファイルパス:sample.pdf:
タイトル:sample
サブタイトル:subtitle
著者:ReMIX
ページ数:3
PDFの回転・書き込み
PDFをページを回転して、書き込むコードを紹介します。
以下の内容で、sample.pdfからrotate_pages.pdfを生成しています。
- 1ページ目に右に90度回転したページ
- 2ページ目に左に90度回転したページ
- 3ページ目はそのままのページ
# pdf_rotate_pages.py
from PyPDF2 import PdfFileReader, PdfFileWriter
def rotate_pages(pdf_path):
pdf_file_writer = PdfFileWriter()
pdf_file_reader = PdfFileReader(pdf_path)
# 1ページ目を読み込み、右に90度回転したページを取得
page_1 = pdf_file_reader.getPage(0).rotateClockwise(90)
# 回転した1ページ目をページ追加
pdf_file_writer.addPage(page_1)
# 2ページ目を読み込み、左に90度回転したページを取得
page_2 = pdf_file_reader.getPage(1).rotateCounterClockwise(90)
# 回転した2ページ目をページ追加
pdf_file_writer.addPage(page_2)
# 3ページ目を読み込み、そのまま追加
pdf_file_writer.addPage(pdf_file_reader.getPage(2))
# PDFの出力
with open('rotate_pages.pdf', 'wb') as f:
pdf_file_writer.write(f)
if __name__ == '__main__':
pdf_path = 'sample.pdf'
rotate_pages(pdf_path)
PDFの結合
PDFを結合して、生成するコードを紹介します。
ここでは、sample1.pdfとsample2.pdfを結合して、merged.pdfを生成しています。
# pdf_merging.py
from PyPDF2 import PdfFileReader, PdfFileWriter
def merge_pdfs(paths, output_path):
pdf_writer = PdfFileWriter()
for path in paths:
pdf_reader = PdfFileReader(path)
for page in range(pdf_reader.getNumPages()):
pdf_writer.addPage(pdf_reader.getPage(page))
# Write out the merged PDF
with open(output_path, 'wb') as f:
pdf_writer.write(f)
if __name__ == '__main__':
paths = ['sample1.pdf', 'sample2.pdf']
merge_pdfs(paths, 'merged.pdf')
PDFのページ分割
PDFを分割して、PDFファイルを生成するコードを紹介します。
ここではsample.pdfを1ページずつ分割して、split_pdf_page1~3.pdfを生成しています。
# pdf_splitting.py
from PyPDF2 import PdfFileReader, PdfFileWriter
def split_pdf(path, split_file_name_base):
pdf_file_reader = PdfFileReader(path)
for page in range(pdf_file_reader.getNumPages()):
pdf_writer = PdfFileWriter()
pdf_writer.addPage(pdf_file_reader.getPage(page))
output_file_name = f'{split_file_name_base}_page_{page+1}.pdf'
with open(output_file_name, 'wb') as f:
pdf_writer.write(f)
if __name__ == '__main__':
path = 'sample.pdf'
split_pdf(path, 'split_pdf')
透かしを入れる
PDFファイルに透かしを入れていきます。
watermark.pdfが透かしとなるファイルで、この透かしを、sample.pdfの各ページに追加していく形となっています。
# pdf_watermarker.py
from PyPDF2 import PdfFileWriter, PdfFileReader
def create_watermark(input_pdf, output_pdf, watermark_pdf):
watermark_pdf_file = PdfFileReader(watermark_pdf)
watermark_page = watermark_pdf_file.getPage(0)
pdf_file_reader = PdfFileReader(input_pdf)
pdf_file_writer = PdfFileWriter()
# 全てのページに透かしを設定する
for page in range(pdf_file_reader.getNumPages()):
page = pdf_file_reader.getPage(page)
page.mergePage(watermark_page)
pdf_file_writer.addPage(page)
with open(output_pdf, 'wb') as f:
pdf_file_writer.write(f)
if __name__ == '__main__':
create_watermark(
input_pdf='sample.pdf',
output_pdf='added_watermark_file.pdf',
watermark_pdf='watermark.pdf')
パスワードを設定する
PDFファイルにパスワードを設定します。
sample.pdfにパスワード=passwordを設定した、sample_encrypted.pdfを生成する処理となっています。
# pdf_encryption.py
from PyPDF2 import PdfFileWriter, PdfFileReader
def encrypt_pdf(input_pdf, output_pdf, password):
pdf_file_reader = PdfFileReader(input_pdf)
pdf_file_writer = PdfFileWriter()
for page in range(pdf_file_reader.getNumPages()):
pdf_file_writer.addPage(pdf_file_reader.getPage(page))
pdf_file_writer.encrypt(user_pwd=password, owner_pwd=None, use_128bit=True)
with open(output_pdf, 'wb') as f:
pdf_file_writer.write(f)
if __name__ == '__main__':
encrypt_pdf( input_pdf='sample.pdf',
output_pdf='sample_encrypted.pdf',
password='password')
まとめ
この記事では、以下のPDF操作について触れました。
- PDFファイルの情報取得
- PDFのページを回転する方法
- PDFのマージおよび分割方法
- 透かしの設定方法
- パスワードの設定方法
PDFは、様々な場面で使用することがあると思いますので、是非操作方法を学んでおくとよいと思います。


コメント