pythonでPDFを操作するためのライブラリ「PyMuPDF」を使ってみる。
PyMuPDFは、PDFファイルの読み込み、編集、テキスト抽出などの機能があるらしい。
仕事でPDF見る事はよくあるので、一通りの操作方法覚えたい。
まずは、PyMuPDFをインストールする。
py -m pip install PyMuPDF
インストールが完了したら、PDFファイルを読み込んでみる。
PyMuPDFのインポートなのですがなぜか「fitz」という名前でインポートします。
import fitz # PyMuPDF
fitzの意味は、元のMuPDFのライブラリの名前が「fitz」だったので、そのままimportにはfitzを使うことになったらしい。
すごく紛らわしく覚えにくい。。
●pdfの指定ページを表示してみる
まずはpdfを読み込んでprintで表示してみます。
練習用にネットに置いてあるサンプルPDFは以下を使います。
https://www.fujitsu.com/jp/group/frontech/imagesgig5/_demoPDF_1MB.pdf
これをsample.pdfとして保存
import fitz # PyMuPDF
doc = fitz.open(“./sample.pdf”)
page = doc.load_page(0)
text = page.get_text()
print(text)
すると
と、PDFのテキストが表示された!!
●PDFの全ページのテキストを表示
import fitz # PyMuPDF
doc = fitz.open(“./sample.pdf”)
for page in doc:
text = page.get_text()
print(text)
これで、PDFの全ページのテキストが表示される
●PDFのページ数を取得してみる
PDFの全ページ数を取得してみる。
import fitz # PyMuPDF
doc = fitz.open(“./sample.pdf”)
print(doc.page_count)
すると「49」と表示された!!
●PDFの全ページを画像として保存する
import fitz # PyMuPDF
doc = fitz.open(“./sample.pdf”)
for page in doc:
pix = page.get_pixmap()
pix.save(f”page_{page.number}.png”)
このPDFは49ページあるので、page_0.pngからpage_48.pngまでの画像が保存される!!
これすごい便利だ
PDFを画像にしたい事よくあるので。
●PDFの指定ページを画像にする
import fitz # PyMuPDF
doc = fitz.open(“./sample.pdf”)
page = doc.load_page(0) #1ページ目を指定
pix = page.get_pixmap()
pix.save(f”page_sample.png”)
1ページ目を画像として保存出来た。
指定ページを画像にするのも簡単にできる!!
すごいんだけど。
●PDFのページを削除してみる。
import fitz # PyMuPDF
doc = fitz.open(“./sample.pdf”)
doc.delete_page(0) #1ページ目を削除
doc.save(“sample_delete.pdf”)
これで1ページ目を削除した、新しいPDFとしてファイルが保存された!!
●PDFのページを挿入してみる。
import fitz # PyMuPDF
doc = fitz.open(“./sample.pdf”)
new_page = doc.new_page()
new_page.insert_text((72, 72), “NEW PAGE!!!”, fontsize=20, color=(1, 0, 0))
doc.save(“sample_new.pdf”)
これでPDFを開いてみると
最後のページに赤字で「NEW PAGE!!!」と表示された新しいページが挿入されている!!
●PDFのページを回転してみる。
import fitz # PyMuPDF
doc = fitz.open(“./sample.pdf”)
page = doc[0]
page.set_rotation(90)
doc.save(“sample_kaiten.pdf”)
これで1ページだけ90度横向いたPDFが保存されたww
●PDFのページを結合してみる。
import fitz # PyMuPDF
doc = fitz.open(“./sample.pdf”)
doc2 = fitz.open(“sample2.pdf”)
doc.insert_pdf(doc2)
doc.save(“merged.pdf”)
これで、sample.pdfの後ろにsample2.pdfの内容が結合された新しいPDFファイルが保存された!!
簡単ー
●PDFのページを分割してみる。
import fitz # PyMuPDF
doc = fitz.open(“sample2.pdf”)
doc1 = fitz.open()
doc2 = fitz.open()
for page in doc:
if page.number < 1:
doc1.insert_pdf(doc, from_page=page.number, to_page=page.number)
else:
doc2.insert_pdf(doc, from_page=page.number, to_page=page.number)
doc1.save(“part1.pdf”)
doc2.save(“part2.pdf”)
これで元々2ページだったPDFを1ページづつ別のPDFに出来た!!!
●PDFのページを暗号化してみる。
import fitz # PyMuPDF
doc = fitz.open(“sample2.pdf”)
doc.save(“encrypted.pdf”, encryption=fitz.PDF_ENCRYPT_AES_256, owner_pw=”ownerpassword”, user_pw=”userpassword”)
これでPDFを開こうとすると、パスワードの入力を求められるようになった!!
「userpassword」を入力すると、PDFを閲覧できるようになる。
「ownerpassword」を入力すると、PDFを閲覧できるだけでなく、編集や印刷もできるようになる!!
●PDFのページを復号化してみる。
import fitz # PyMuPDF
doc = fitz.open(“encrypted.pdf”)
doc.authenticate(“userpassword”)
doc.save(“decrypted.pdf”)
これで、encrypted.pdfが復号化されて、暗号が無い普通の「decrypted.pdf」が保存された!!
以上が、PyMuPDFを使ってPDFを操作する基本的な方法です。
PyMuPDFは、さらに多くの機能があるので、公式ドキュメントを参照してみてください。
https://pymupdf.readthedocs.io/en/latest/

コメント