本記事では、題目を成すための方法について、「PyPDF2」「pdfminer.six」「fitz」「PyMuPDF」の4つのライブラリのインストール方法とコード例を載せました。
1. PDFファイルをページ毎に分割して.pdfで保存する「PyPDF2」
pip install PyPDF2
2. 日本語テキストを抽出して.txtで保存する「pdfminer.six」
pip install pdfminer.six
3. 画像を抽出して.pngで保存する「fitz」と「PyMuPDF」
pip install fitz
fitzを動かすためには、下記のようにPyMuPDFもインストする必要がある。
pip install PyMuPDF
■本プログラム
from PyPDF2 import PdfFileReader
from PyPDF2 import PdfFileWriter
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
import fitz
def my_split_pdf(input_pdf):
file_name_list = []
with open(input_pdf, 'rb') as f1:
input = PdfFileReader(f1)
pgnum = input.getNumPages()
for i in range(pgnum):
file_name = str(i) + "page.pdf"
output = PdfFileWriter()
output.addPage(input.getPage(i))
outputfile = open(file_name, 'wb')
output.write(outputfile)
outputfile.close()
file_name_list.append(file_name)
return file_name_list
def my_pdf2txt(my_pdf):
out_txtfile = my_pdf[:-4] + '.txt'
print(out_txtfile)
manager = PDFResourceManager()
with open(out_txtfile, "wb") as wf:
with open(my_pdf, 'rb') as rf:
with TextConverter(manager, wf, codec='utf-8', laparams=LAParams()) as conv:
interpreter = PDFPageInterpreter(manager, conv)
for page in PDFPage.get_pages(rf):
interpreter.process_page(page)
def my_save_img(my_pdf):
file_name = my_pdf[:-4]
doc = fitz.open(my_pdf)
for i in range(len(doc)):
for img in doc.getPageImageList(i):
xref = img[0]
pix = fitz.Pixmap(doc, xref)
if pix.n < 5:
pix.writePNG(file_name + "p%s-%s.png" % (i, xref))
else:
pix = fitz.Pixmap(fitz.csRGB, pix)
pix.writePNG(file_name + "p%s-%s.png" % (i, xref))
pix = None
if __name__ == '__main__':
input_pdf = 'PDFファイル名.pdf'
file_name_list = my_split_pdf(input_pdf)
for file_name in file_name_list:
my_pdf2txt(file_name)
my_save_img(file_name)
●備考
ModuleNotFoundError: No module named 'frontend'
のエラーが出た場合は、「PyMuPDF」をpip install PyMuPDFでインストールして下さい。
以上
<広告>
リンク