PythonでPDFから表を抽出する

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


## 使用するPythonライブラリ
:one: [**Spire.PDF for Python**](https://www.e-iceblue.com/Introduce/pdf-for-python.html)： このPython PDFライブラリは、PDFテーブルからデータを抽出するために使用されます。

:two: [**Spire.XLS for Python**](https://www.e-iceblue.com/Introduce/xls-for-python.html)： この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コード例:**
```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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/20ee4d44-f93b-75d4-f2aa-87e0565855dc.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コード例:**
```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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/465cac2b-2a05-4921-79b7-d6a89abfa3c8.png)



## 結論
PythonでPDFの表データを抽出することは、ユーザーの生産性を向上させ、データ処理を自動化するのに役立ちます。これは、大量のデータを定期的に扱うユーザーや組織にとって特に有用です。
* * *
**関連記事：**
* [PythonでPDFをExcelに変換する](https://www.e-iceblue.com/Tutorials/Python/Spire.PDF-for-Python/Program-Guide/Conversion/Python-Convert-PDF-to-Excel.html)
* [PythonでPDFからテキストと画像を抽出する](https://www.e-iceblue.com/Tutorials/Python/Spire.PDF-for-Python/Program-Guide/Extract/Read/Python-Extract-Text-and-Images-from-PDF-Documents.html)
* [PythonでExcelをCSVに変換する](https://www.e-iceblue.com/Tutorials/Python/Spire.XLS-for-Python/Program-Guide/Conversion/Python-Convert-Excel-to-CSV-and-Vice-Versa.html)