【Python】pyPDF2を使用してPDFを操作する方法

python Python

この記事の内容

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はこちらからダウンロードできます。

sample.pdf

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はこちらからダウンロードできます。

sample.pdf

PDFの結合

PDFを結合して、生成するコードを紹介します。

ここでは、sample1.pdfsample2.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はこちらからダウンロードできます。

sample1.pdf

sample2.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はこちらからダウンロードできます。

透かしを入れる

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はこちらからダウンロードできます。

パスワードを設定する

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のマージおよび分割方法
  • 透かしの設定方法
  • パスワードの設定方法

PDFは、様々な場面で使用することがあると思いますので、是非操作方法を学んでおくとよいと思います。

コメント