PyPDF2

Python PyPDF2

PyPDF2とは

PythonでPDFファイルの分割・結合・合成が出来るライブラリ。

ファイルの保存、バイナリストリームの出力も可能。

※ PDFへの文字・画像の”直接追加”は出来ない(PDF同士の合成は可能な為「reportlab」などと組み合わせる事で可能)

PyPIバージョン最新リリース日
PyPDF23.0.12022年12月31日

2023/03/13時点 Google検索結果数
2023/03/13時点 Google検索結果数

全世界での1年間の検索動向(検索数は増えてきていますね)

同期間の日本の動向(ばらつきはありますが少しずつ右肩上がりでしょうか)

【公式サイト】

https://pypdf2.readthedocs.io/en/3.0.0/index.html

PDFファイルの読み込み

【API リファレンス】
https://pypdf2.readthedocs.io/en/3.0.0/modules/PdfReader.html

構文
PdfReader(stream=object, strict=Bool, password=None/str/bytes)

stream:ファイルオブジェクト(基本PDFファイルの絶対パス)
strict:エラー警告(デフォルトFalse)
password:パスワードが掛かっているPDFファイルの復号化
サンプル
from PyPDF2 import PdfReader

template_pdf = PdfReader('D:\\python\\outpust.jp\\project\\application\\z_laboratory_pdf\\static\\test_pdf\\template01.pdf')

PDFドキュメント情報 取得

https://pypdf2.readthedocs.io/en/3.0.0/modules/PdfReader.html#PyPDF2.PdfReader.metadata

meta = template_pdf.metadata
print(meta.title)
print(meta.author)
print(meta.subject)
print(meta['/Keywords'])
print(meta.creation_date)
print(meta.modification_date)
print(meta.creator)
print(meta.producer)

-- 結果 --
タイトル
outpust.jp
サブタイトル
キーワード
2023-03-13 01:02:08+09:00
None
https://outpust.jp
https://outpust.jp

ページ数 取得

https://pypdf2.readthedocs.io/en/3.0.0/modules/PdfReader.html#PyPDF2.PdfReader.getNumPages

template_pdf_page_cnt = len(template_pdf.pages)
print(template_pdf_page_cnt)

-- 結果 --
2

ページサイズ 取得

https://pypdf2.readthedocs.io/en/3.0.0/modules/PageObject.html#PyPDF2._page.PageObject.mediabox

1枚目(A4-縦)
2枚目(A4-横)

for memory_layer_01 in template_pdf.pages:
		print(memory_layer_01.mediabox.width)
		print(memory_layer_01.mediabox.height)

-- 結果(pixel 72dpi) --
595.32001
841.92004
841.92004
595.32001

各ページサイズ情報ページ

https://pypdf2.readthedocs.io/en/3.0.0/modules/PaperSize.html

PDFファイルの保存(結合)

【API リファレンス】
https://pypdf2.readthedocs.io/en/3.0.0/modules/PdfWriter.html

構文
output = PdfWriter()
output.append()
output.write()
output.close()
サンプル
import os
from PyPDF2 import PdfWriter

pdf_write_path = os.path.join(os.path.dirname(__file__), 'pdf_write')

# インスタンスを生成
output = PdfWriter()

# 結合するPDFファイルを取得
pdf1 = open(os.path.join(pdf_write_path, "横A4.pdf"), "rb")
pdf2 = open(os.path.join(pdf_write_path, "縦A4.pdf"), "rb")

# オブジェクトにPDFを追加
output.append(pdf1)
output.append(pdf2)

# オブジェクトに追加されたページをPDFファイルに保存
output.write(os.path.join(pdf_write_path, "結合結果.pdf"))

# 終了
output.close()

PDFファイルにメタ情報を追記する

https://pypdf2.readthedocs.io/en/3.0.0/modules/PdfWriter.html#PyPDF2.PdfWriter.add_metadata

import os
from PyPDF2 import PdfWriter
from datetime import datetime

pdf_write_path = os.path.join(os.path.dirname(__file__), 'pdf_write')

# インスタンスを生成
output = PdfWriter()

# メタ情報追加
output.add_metadata(
    {
        "/Title": "タイトル",
        "/Author": "outpust.jp",
        "/Subject": "サブタイトル",
        "/Keywords": "キーワード",
        "/CreationDate": f"D:{datetime.now().strftime('%Y%m%d%H%M%S')}+09'00'",
        "/Creator": "https://outpust.jp",
        "/Producer": "https://outpust.jp",
    }
)

# 結合するPDFファイルを取得
pdf1 = open(os.path.join(pdf_write_path, "横A4.pdf"), "rb")
pdf2 = open(os.path.join(pdf_write_path, "縦A4.pdf"), "rb")

# オブジェクトにPDFを追加
output.append(pdf1)
output.append(pdf2)

# オブジェクトに追加されたページをPDFファイルに保存
output.write(os.path.join(pdf_write_path, "結合結果.pdf"))

# 終了
output.close()
プロフィール背景画像 プロフィール画像
名前:田中寛之
今まで約20年間、出版社、マスコミ、化粧品会社、システム会社・病院・クリニックにてシステムエンジニアとして勤務。現在、個人事業主「ONLINE-WORLD」として活動し、42歳からPythonを始めました!
プロフィール背景画像 プロフィール画像
名前:田中寛之
今まで約20年間、出版社、マスコミ、化粧品会社、システム会社・病院・クリニックにてシステムエンジニアとして勤務。現在、個人事業主「ONLINE-WORLD」として活動し、42歳からPythonを始めました!