🔥

PyPDF2?いやPyMuPDFでしょ

2022/12/10に公開

PyPDF2だと読み書きのときにエラーをはかれる。

ことがある。うちの扱ってるPDFだと結構あるので問題になった。

 (<class 'PyPDF2.utils.PdfReadError'>, PdfReadError('Illeagal character in Name Object',) <traceback object at 0x0123456789ABCDEF

PyMuPDFなら大丈夫!問題ない!

日本語だとPyPDF2の資料がそこそこあるんですが、PyMuPDFは英語ばっかり。
なので自分が使ったメソッドとか書いていきます。
Wand+ImageMagickも使えそうなのですが、インストールに躓きました。

PyPDF2での実装

PyPDF2での実装
    import PyPDF2

    # 一部のページのみ抜き出す処理の例
    # pdf_pathはpathlibのPath形式を想定しています。
    reader = PdfFileReader(str(pdf_path))
    writer = PdfFileWriter()
    page = 1234567890
    writer.addPage(reader.getPage(page))

    save_path = hogepiyo.pdf
        with open(save_path, 'wb') as f:
            writer.write(f)

    # ページ数を取得する例
    with open(pdf_path, mode='rb') as f:
        reader = PdfFileReader(f, strict=True)
        _pages = reader.getNumPages()

PyMuPDFでの実装

まずはインストール

pip install –upgrade pymupdf

PyMuPDFでの実装
    # インポートは"fitz"。名前はPyMuPDFであるが歴史ある故にこのように呼び出す。
    import fitz

    # 一部のページのみ抜き出す処理の例
    # pdf_pathはpathlibのPath形式を想定しています。
    reader = fitz.open(str(pdf_path)
    writer = fitz.open()
    page = 1234567890
    writer.insertPDF(reader, from_page=page, to_page=page)

    save_path = hogepiyo.pdf
    writer.save(save_path)

    # ページ数を取得する例
    _pages = fitz.open(pdf_path).pageCount

他、参考になりそうなところ

http://hk29.hatenablog.jp/entry/2020/02/08/235809
https://cloud.tencent.com/developer/article/1483545

Discussion