🐍
【Python】PDFをいじる
Summary
pip install PyPDF2
バージョンは3.0.1(2023/02/22現在)
❯ python -c "import PyPDF2; print(PyPDF2.__version__)"
3.0.1
2つのPDFファイルを結合する
import PyPDF2
file1 = "hoge.pdf"
file2 = "foo.pdf"
merger = PyPDF2.PdfMerger()
merger.append(file1)
merger.append(file2)
merger.write("hogefoo.pdf")
merger.close()
ページ途中に挿入する
base.pdf
の5ページ目にinsert.pdf
を挿入したいとき
import PyPDF2
base_pdf = "base.pdf"
insert_pdf = "insert.pdf"
merger = PyPDF2.PdfMerger()
merger.append(base_pdf)
merger.merge(5, insert_pdf) # 5ページ目にinsert.pdfを挿入
merger.write("inserted.pdf")
merger.close()
特定のページを削除する
merger.pages
はPDFページのList
型になっているので、これをいじって並び替えたり、pop
で取り除くことで特定のページを削除できる
import PyPDF2
base_pdf = "base.pdf"
merger = PyPDF2.PdfMerger()
merger.append(base_pdf)
merger.pages.pop(5) # 6ページ目を削除(`pages`は0始まりであることに注意)
merger.write("removed.pdf")
merger.close()
Reference
リンク先ではPdfFileMerger
を使っているが、PyPDF2
のバージョンが3.0.0
以上だとDeprecationError
が出るため、PdfMerger
を使う
merger = PyPDF2.PdfFileMerger()
---------------------------------------------------------------------------
DeprecationError Traceback (most recent call last)
Cell In[4], line 1
----> 1 PyPDF2.PdfFileMerger()
File D:\10001176326\work_space\tutorials\py_sample\.venv\lib\site-packages\PyPDF2\_merger.py:817, in PdfFileMerger.__init__(self, *args, **kwargs)
816 def __init__(self, *args: Any, **kwargs: Any) -> None:
--> 817 deprecation_with_replacement("PdfFileMerger", "PdfMerger", "3.0.0")
819 if "strict" not in kwargs and len(args) < 1:
820 kwargs["strict"] = True # maintain the default
File D:\10001176326\work_space\tutorials\py_sample\.venv\lib\site-packages\PyPDF2\_utils.py:369, in deprecation_with_replacement(old_name, new_name, removed_in)
363 def deprecation_with_replacement(
364 old_name: str, new_name: str, removed_in: str = "3.0.0"
365 ) -> None:
366 """
367 Raise an exception that a feature was already removed, but has a replacement.
368 """
--> 369 deprecation(DEPR_MSG_HAPPENED.format(old_name, removed_in, new_name))
File D:\10001176326\work_space\tutorials\py_sample\.venv\lib\site-packages\PyPDF2\_utils.py:351, in deprecation(msg)
350 def deprecation(msg: str) -> None:
--> 351 raise DeprecationError(msg)
DeprecationError: PdfFileMerger is deprecated and was removed in PyPDF2 3.0.0. Use PdfMerger instead.
Behind
冊子になっている紙データをスキャンしたあと、不要なページを消したり結合したりしたかった
Macだとプレビューから簡単にできるのに…
Discussion