PythonはPDFの指定内容を抽出し、新しいファイルを生成する。
前のPythonオフィスオートメーションのテーマでは、どのようにいくつかのページを抽出して統合するかを紹介しました。
しかし、多くの場合、抽出したいページ番号を予知するのではなく、指定された内容を含むページを新たなPDFとして抽出したいと考えています。本稿では、2つの実際のニーズを例に説明します。
01デマンド説明
データは286ページの上場会社の公開年報PDFです。大体次の通りです。
今はPythonを利用して、次の二つの需要を完成します。
「
要求の一:戦略二文字を含むすべてのページを抽出し、新しいPDFを合併する。
需要二:写真を含むすべてのページを抽出し、それぞれPDFファイルに保存する。
」
02前知識とロジックを整理する
2.1 として理解できる。 として理解できる。リーダーはすべてのpdfを一回読みます。 リーダーは、読み出した内容をライタ に渡す。ライタは、新しいpdf に統一的に出力されます。
暗黙の知識点:リーダーは読み取った内容を一ページずつライタに渡すことしかできません。
2.2ページの取得と追加
前のツイートでこの二つのコードを紹介しましたが、復習として以下のように書きます。 を取得する。 を追加します。
2.3ピクチャと文字の処理
本文の需要を実現するには、重要な判断が必要です。ページに含まれる文字や画像があるかどうかを確認します。
特定の文字が含まれているかどうかを判断するのは簡単です。各ページを巡回する時に含まれるテキストを抽出して、文字列レベルの判断をすればいいです。コードの考え方:は、 を開く。は指定されたページを取得したり、ページを巡回したりします。 は、 を抽出する。は、「戦略」が抽出された文字の中にあるかどうかを判断する。
写真が含まれているかどうかを判断します。考え方は上と似ていますが、方法は違います。図は、正規の方法で識別することを考慮し、
03コード実現
3.1需要一の実現
まず需要の一つのタスクを完了します。必要なライブラリを導入します。PDFファイルに書き込まれた
完全なコードが必要です。興味のある読者は自分で研究できます。
次に需要二の任務を完成します。まず必要なライブラリをインポートします。
ここでPythonについてPDFの指定内容を抽出し、新しいファイルを作成する文章を紹介します。より多くの関連PythonはPDFの指定内容を抽出します。以前の文章を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。
しかし、多くの場合、抽出したいページ番号を予知するのではなく、指定された内容を含むページを新たなPDFとして抽出したいと考えています。本稿では、2つの実際のニーズを例に説明します。
01デマンド説明
データは286ページの上場会社の公開年報PDFです。大体次の通りです。
今はPythonを利用して、次の二つの需要を完成します。
「
要求の一:戦略二文字を含むすべてのページを抽出し、新しいPDFを合併する。
需要二:写真を含むすべてのページを抽出し、それぞれPDFファイルに保存する。
」
02前知識とロジックを整理する
2.1
PyPDF2
モジュールの統合実現PyPDF2
導入モジュールのコードは、しばしば以下の通りである。
from PyPDF2 import PdfFileReader, PdfFileWriter
ここには二つの方法が導入されています。PdfFileReader
は、リーダPdfFileWriter
は、ライタPyPDF2
を利用して、合併運用の一次ロジックを実現する。暗黙の知識点:リーダーは読み取った内容を一ページずつライタに渡すことしかできません。
2.2ページの取得と追加
前のツイートでこの二つのコードを紹介しましたが、復習として以下のように書きます。
.getPage
は、特定ページ.addPage
特定ページ2.3ピクチャと文字の処理
本文の需要を実現するには、重要な判断が必要です。ページに含まれる文字や画像があるかどうかを確認します。
特定の文字が含まれているかどうかを判断するのは簡単です。各ページを巡回する時に含まれるテキストを抽出して、文字列レベルの判断をすればいいです。コードの考え方:
pdfplumber
を用いてPDFファイル.extract_text()
方法を用いて、現在のページの文字写真が含まれているかどうかを判断します。考え方は上と似ていますが、方法は違います。図は、正規の方法で識別することを考慮し、
fitz
およびre
で協力し、特に以下のコードを参照してください。03コード実現
3.1需要一の実現
まず需要の一つのタスクを完了します。必要なライブラリを導入します。PDFファイルに書き込まれた
PyPDF2
とテキストを抽出するpdfplumber
を読みます。
from PyPDF2 import PdfFileReader, PdfFileWriter
import pdfplumber
ファイルのパスを指定し、書き込みを初期化して、ファイルをリーダに渡す:
path = r'C:\xxxxxx'
pdf_writer = PdfFileWriter()
pdf_reader = PdfFileReader(path + r'\ .PDF')
文脈マネージャ形式でpdfplumber
によってファイルを開き、同時に.getNumPages
でリーダの最大ページを取得することは、各ページを巡回することに有利である。
with pdfplumber.open(path + r'\ .PDF') as pdf:
for i in range(pdf_reader.getNumPages()):
page = pdf.pages[i]
print(page.extract_text())
テキストを抽出する目的は、必要に応じたページ番号をリーダ.getPage
のパラメータとして決定し、最後に.addPage
でライタに渡すことである。
with pdfplumber.open(path + r'\ .PDF') as pdf:
for i in range(pdf_reader.getNumPages()):
page = pdf.pages[i]
print(page.extract_text())
if ' ' in page.extract_text():
pdf_writer.addPage(pdf_reader.getPage(i))
print(i + 1, page.extract_text())
識別が完了したら書き込み器に必要なファイル名を出力させます。
with open(path + r'
ew_ .pdf', 'wb') as out:
pdf_writer.write(out)
これで特定のテキストコンテンツページを含む抽出を完了し、PDFに統合しました。すべてのページには「戦略」という二文字が含まれています。完全なコードが必要です。興味のある読者は自分で研究できます。
from PyPDF2 import PdfFileReader, PdfFileWriter
import pdfplumber
path = r'C:\xxx'
pdf_writer = PdfFileWriter()
pdf_reader = PdfFileReader(path + r'\ .PDF')
with pdfplumber.open(path + r'\ .PDF') as pdf:
for i in range(pdf_reader.getNumPages()):
page = pdf.pages[i]
print(page.extract_text())
if ' ' in page.extract_text():
pdf_writer.addPage(pdf_reader.getPage(i))
print(i + 1, page.extract_text())
with open(path + r'
ew_ 1.pdf', 'wb') as out:
pdf_writer.write(out)
3.2需要二の実現次に需要二の任務を完成します。まず必要なライブラリをインポートします。
from PyPDF2 import PdfFileReader, PdfFileWriter
import fitz
import re
import os
ファイルの場所を指定するパス:
path = r'C:\xxxxxx'
正則は画像の部分を識別して詳しく説明しないで、前のツイートはもう紹介しました。コードを直接見ます。
page_lst = []
checkImg = r"/Subtype(?= */Image)"
pdf = fitz.open(path + r'\ .PDF')
lenXREF = pdf._getXrefLength()
for i in range(lenXREF):
text = pdf._getXrefString(i)
isImage = re.search(checkImg, text)
if isImage:
page_lst.append(i)
print(page_lst)
写真を含むすべてのページを取得してから、リーダとライタの組み合わせを組み合わせると、新しいPDFの発生が完了します。注意本需要はすべてのピクチャを個別に出力するので、ページを取得したら、ライタに渡して直接ファイルに出力します。
pdf_reader = PdfFileReader(path + r'\ .PDF')
for page in page_lst:
pdf_writer = PdfFileWriter()
pdf_writer.addPage(pdf_reader.getPage(page))
with open(path + r'\ _{}.pdf'.format(page + 1), 'wb') as out:
pdf_writer.write(out)
これで第二の需要も完成しました。説明が必要なのは、PDFピクチャを完璧に抽出する方法がないことであり、この事例で紹介された方法は画像を識別することも不安定である。読者は自分のデータを利用して多くの試みをすることができます。完全コードは以下の通りです。
from PyPDF2 import PdfFileReader, PdfFileWriter
import fitz
import re
import os
path = r'C:\xxx'
page_lst = []
checkImg = r"/Subtype(?= */Image)"
pdf = fitz.open(path + r'\ .PDF')
lenXREF = pdf._getXrefLength()
for i in range(lenXREF):
text = pdf._getXrefString(i)
isImage = re.search(checkImg, text)
if isImage:
page_lst.append(i)
print(page_lst)
pdf_reader = PdfFileReader(path + r'\ .PDF')
for page in page_lst:
pdf_writer = PdfFileWriter()
pdf_writer.addPage(pdf_reader.getPage(page))
with open(path + r'\ _{}.pdf'.format(page + 1), 'wb') as out:
pdf_writer.write(out)
この二つの単一の需要を実現すれば、関連コードをカプセル化して、オスなどのモジュールを結合して大量操作を実現し、両手を解放することができます。ここでPythonについてPDFの指定内容を抽出し、新しいファイルを作成する文章を紹介します。より多くの関連PythonはPDFの指定内容を抽出します。以前の文章を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。