PythonとPDF(PyPDF2編 ファイル操作)
PythonでPDFを操作してみます。まずはPyPDF2を使ってみます。
PDFを読み込む
以下のようにしてPDFファイルを読み込みます。
import PyPDF2
#PyPDF2で読み込める形でPDFファイルの読み込み
#2行でファイルを読み込む
file=open("ICHGCP_R3.pdf","rb")#Binary fileをreadするという意味
reader=PyPDF2.PdfFileReader(file)
ページ数を見てみます。
reader.numPages
99と出ました。99ページです。
7ページ目の内容を表示してみようと思います。例によって0始まりです。
reader.getPage(6)
するとなんだかわからないOutputが出てきましたが、とりあえず読み込めているようです。
ファイルの分割
7ページ目だけを取り出してPDF保存してます。
まずは、7ページ目.pdfという空のPDFを書き込みができるファイルを作ります。
次にPdfFileWriter()を使って、reader.getPage(6)の内容を書き込んでいきます。
extract_page=open("7ページ目.pdf","wb")#writeできる形で開く
writer=PyPDF2.PdfFileWriter()
writer.addPage(reader.getPage(6))#writerにページ追加
writer.write(extract_page)
そうすると、新しい7ページ目.pdfができるのですが、以下をしないと開きません。
#closeしないとファイルが開けない
extract_page.close()
確かに6ページ目だけのPDFが出来上がりました。
99ページのPDFを一気に1ページずつのファイルにします。これを手作業でやろうとすると何時間かかるのでしょうね。
先ほどのreader.numPagesを使ってLoopをかけています。
import PyPDF2
#PyPDF2で読み込める形でPDFファイルの読み込み
file=open("ICHGCP_R3.pdf","rb")#Binary fileをreadするという意味
reader=PyPDF2.PdfFileReader(file)
for i in range(reader.numPages):
extract_page=open("{}ページ目.pdf".format(i+1),"wb")#writeできる形で開く
writer=PyPDF2.PdfFileWriter()
writer.addPage(reader.getPage(i))#writerにページ追加
writer.write(extract_page)
extract_page.close()
file.close()
大量のPDFが一瞬で発生しました。
PDFの結合
先ほどバラバラにしたPDFをまた1つにしてみます。
手順としては、フォルダ内にある*ページ目.pdfというファイルをglobを使ってリスト化して、それをLoopさせながら結合します。
ただし、普通に結合するとページ数が10,11,1,2,3・・・のような順番になってしまうので、natsortというライブラリを利用して、見た目に自然な並びにしています。
import PyPDF2
from glob import glob
import natsort
merger=PyPDF2.PdfFileMerger()
files=glob("*ページ目.pdf")
files=natsort.natsorted(files)
for i in files:
merger.append(i)
merge_file=open("再結合.pdf","wb")
merger.write(merge_file)
merge_file.close()
これですべてが結合した1つのPDFファイルを作ることができました。
PDFの回転
せっかく取り込んだPDFの方向が違った、ということもよくあります。これもPythonを使えばあっという間に直せます。サンプルとして7ページ目を回転させてみました。
import PyPDF2
#PyPDF2で読み込める形でPDFファイルの読み込み
file=open("ICHGCP_R3.pdf","rb")#Binary fileをreadするという意味
reader=PyPDF2.PdfFileReader(file)
rotate=open("1ページ目_右90度.pdf","wb")#writeできる形で開く
writer=PyPDF2.PdfFileWriter()
writer.addPage(reader.getPage(6).rotateClockwise(90))#writerにページ追加
writer.write(rotate)
rotate.close()
テキスト抽出
自然言語処理をするときなんかは、テキストを取り出さないといけません。
その時はずばりextract_textを使います。
from pdfminer.high_level import extract_text
text=extract_text("ICHGCP_R3.pdf")
print(text)
テキストが取り出せました。
これをテキストファイルで保存しておきます。
f = open("ICHGCP_R3.txt", "w", encoding="utf-8")
f.write(text)
f.close()
今回はPDFファイルの分割や結合、中身の取り出しといったことをやってみました。
この記事が気に入ったらサポートをしてみませんか?