PyPDF2
PyPDF2とは
PythonでPDFファイルの分割・結合・合成が出来るライブラリ。
ファイルの保存、バイナリストリームの出力も可能。
※ PDFへの文字・画像の”直接追加”は出来ない(PDF同士の合成は可能な為「reportlab」などと組み合わせる事で可能)
PyPI | バージョン | 最新リリース日 |
---|---|---|
PyPDF2 | 3.0.1 | 2022年12月31日 |

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

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

【公式サイト】
https://pypdf2.readthedocs.io/en/3.0.0/index.html
【移行ガイド】
https://pypdf2.readthedocs.io/en/3.0.0/user/migration-1-to-2.html
ex)PdfFileReader → PdfReader
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()




