【python】pythonでPDFを操作する【PyMuPDF】

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/

コメント