0
3

PythonでPDFから表を抽出する

Last updated at Posted at 2024-06-14

PDFの表データを抽出することで、表の情報をExcelなどの編集可能なスプレッドシート形式に変換することができます。これにより、データ分析、比較、統計、その他の操作が容易になり、ユーザがデータをより良く理解し、利用できるようになります。
この記事では、Pythonを使用してPDFの表をTXTまたはExcelに抽出する方法を示します。
• PythonでPDFからTXTに表を抽出する
• PythonでPDFからExcelに表を抽出する

使用するPythonライブラリ

:one: Spire.PDF for Python: このPython PDFライブラリは、PDFテーブルからデータを抽出するために使用されます。

:two: Spire.XLS for Python: このPython ExcelライブラリはPDFテーブルデータをExcelファイルにエクスポートします。

コードに入る前に、以下のpipコマンドを使用して2つのPythonライブラリをインストールすることができます。
pip install Spire.PDF
pip install Spire.XLS

PythonでPDFの表を抽出し、TXTファイルにエクスポートする

タスクを完了するには、以下の主なステップを使用することができます:

  1. PdfDocument クラスの LoadFromFile() メソッドでPDFファイルをロードする。
  2. PdfTableExtractor クラスの ExtractTable() メソッドを使用して、PDFファイル内のページを繰り返し、そこからテーブルを抽出します。
  3. 抽出された表とその中の各行と各列を繰り返し処理し、PdfTable クラスの GetText(rowIndex, columnIndex) メソッドを使用してセルデータを取得します。
  4. PDFテーブルデータをtxtファイルに書き込みます。

Pythonコード例:

from spire.pdf.common import *
from spire.pdf import *

# PDFファイルを読み込む
pdf = PdfDocument()
pdf.LoadFromFile("Table.pdf")

# 抽出したデータを保存するリストを作成する
builder = []

# PdfTableExtractorオブジェクトの作成
extractor = PdfTableExtractor(pdf)

# テーブルを抽出するためにページをループする
for page in range(pdf.Pages.Count):
    tableList = extractor.ExtractTable(page)

    # テーブルをループする
    if tableList is not None and len(tableList) > 0:
        for table in tableList:
            # テーブルの行数と列数を取得する
            row = table.GetRowCount()
            column = table.GetColumnCount()

            # 行と列をループする
            for i in range(row):
                for j in range(column):
                    # 特定の表セルからテキストを取得する
                    text = table.GetText(i, j)

                    # テキストをリストに追加する
                    builder.append(text + " ")
                builder.append("\n")
            builder.append("\n")

# TXTテキストファイルに書き込む
with open("Table.txt", "w", encoding="utf-8") as file:
    file.write("".join(builder))

結果:

ExtractPdfTableToTxt.png

PythonでPDFの表を抽出し、Excelファイルにエクスポートする

このタスクには、Spire.XLS for PythonライブラリとともにSpire.PDF for Pythonライブラリが必要です。PDFの表データをExcelファイルにエクスポートすることで、Excelの高度な機能を使ってさらに分析を行うことができます。

PDFテーブルからデータを抽出する主な手順は、上記のサンプルと同じです。異なる点は、上記のコードではPDFテーブルのデータを直接TXTファイルに書き込んでいますが、この例では以下のようにする必要があります:

  1. Excelワークブックを作成し、ワークシートを追加します。
  2. PDFテーブルのセルから取得したテキストを、 Worksheet.Range[rowIndex, columnIndex].Value プロパティを通してワークシート内の特定のセルに書き込みます。
  3. Workbook クラスの SaveToFile() メソッドを使用してExcelファイルを保存します。

Pythonコード例:

from spire.pdf import *
from spire.xls import *

# PDFファイルを読み込む
pdf = PdfDocument()
pdf.LoadFromFile("Table.pdf")

# Workbookオブジェクトの作成
workbook = Workbook()

# デフォルトのワークシートを消去する
workbook.Worksheets.Clear()

# PdfTableExtractorオブジェクトの作成
extractor = PdfTableExtractor(pdf)

sheetNumber = 1

# テーブルを抽出するためにページをループする
for page in range(pdf.Pages.Count):
    tableList = extractor.ExtractTable(page)

    # テーブルをループする
    if tableList is not None and len(tableList) > 0:
        for table in tableList:
            # ワークシートを追加する
            sheet = workbook.Worksheets.Add(f"sheet{sheetNumber}")

            # テーブルの行数と列数を取得する
            row = table.GetRowCount()
            column = table.GetColumnCount()

            # 行と列をループする
            for i in range(row):
                for j in range(column):
                    # 特定の表セルからテキストを取得する
                    text = table.GetText(i, j)

                    # ワークシートのセルにテキストを書き込む
                    sheet.Range[i + 1, j + 1].Value = text

            # オートフィット・カラム
            sheet.AllocatedRange.AutoFitColumns()

            sheetNumber += 1

# エクセルファイルの保存
workbook.SaveToFile("PDFtable.xlsx", ExcelVersion.Version2016)

結果:
ExtractPdfTableToExcel.png

結論

PythonでPDFの表データを抽出することは、ユーザーの生産性を向上させ、データ処理を自動化するのに役立ちます。これは、大量のデータを定期的に扱うユーザーや組織にとって特に有用です。


関連記事:

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3