見出し画像

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ファイルの分割や結合、中身の取り出しといったことをやってみました。

この記事が気に入ったらサポートをしてみませんか?