1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonでPDFの表を自動抽出してWord表に書き込む方法

Posted at

日常の業務やデータ処理の現場では、PDF ファイル内に含まれる表をそのまま Word にコピーできないケースがよくあります。特に表の構造が複雑であったり、ページをまたいだり、不規則なレイアウトを含んでいる場合、手動でのコピーは時間がかかるだけでなく、位置ズレや改行の乱れ、書式崩れが起きやすくなります。

オンラインツールやデスクトップ変換ソフトを試すユーザーも多いものの、大量文書の処理・構造化された抽出・Word 表への正確な書き込みといった要件を満たすには、自動化による処理が最も効率的かつ信頼性の高い方法です。

本記事では Python を用いて PDF ファイルから表を抽出し、そのデータを構造化された Word 文書の表として書き込む方法 を解説します。この処理はすべて自動化でき、財務報表のアーカイブ、契約書中の表抽出、データガバナンス、外部 PDF 報表の変換など、幅広い業務シナリオで活用できます。

本記事では Free Spire.PDF for PythonFree Spire.Doc for Python を使用します。pip でインストール可能です:

pip install spire.pdf.free, spire.doc.free

1. PDF を読み込み、Word 文書を準備する

PDF を処理する前に、まずは元ファイルの読み込みと Word 文書の初期化を行います。

from spire.pdf import PdfDocument, PdfTableExtractor
from spire.doc import Document, FileFormat, DefaultTableStyle, AutoFitBehaviorType, BreakType

input_pdf = "sample.pdf"
output_docx = "output/pdf_table_to_docx.docx"

# PDF 文書を読み込む
pdf = PdfDocument()
pdf.LoadFromFile(input_pdf)

# Word 文書を作成
doc = Document()
section = doc.AddSection()

説明:

  • PdfDocument() は PDF ファイルの読み込みを行い、表抽出の基盤となります。
  • Document() は Word 文書オブジェクトを生成し、表はこのセクション内に追加されます。
  • 出力パスを事前に設定しておくことで、プログラムは編集可能な .docx を直接生成できます。

この段階は、変換処理全体の「基礎フレーム」を用意する工程です。


2. PDF の表を抽出し、Word の表として作成する

続いて、この記事の核心である PDF 表の抽出 → Word 表の生成 を行います。

# PDF の表データを抽出し、Word 文書に書き込む
table_extractor = PdfTableExtractor(pdf)
for i in range(pdf.Pages.Count):
    tables = table_extractor.ExtractTable(i)
    if tables is not None and len(tables) > 0:
        for i in range(len(tables)):
            table = tables[i]
            # Word 表を作成
            word_table = section.AddTable()
            word_table.ApplyStyle(DefaultTableStyle.ColorfulGridAccent4)
            word_table.ResetCells(table.GetRowCount(), table.GetColumnCount())
            for j in range(table.GetRowCount()):
                for k in range(table.GetColumnCount()):
                    cell_text = table.GetText(j, k).replace("\n", " ")
                    tr = word_table.Rows[j].Cells[k].AddParagraph().AppendText(cell_text)
                    tr.CharacterFormat.FontName = "メイリオ"
                    tr.CharacterFormat.FontSize = 11
            word_table.AutoFit(AutoFitBehaviorType.AutoFitToWindow)
            section.AddParagraph().AppendBreak(BreakType.LineBreak)

重要ポイント解説

(1)PDF をページ単位で読み取り、表を抽出

ExtractTable(i) はページ内の表を解析して返します。

PDF には Word のような「表構造」が存在しないため、線・文字配置・間隔 などを手掛かりに表を推定します。この工程は、正確な表抽出の成否を左右する非常に重要なステップです。

(2)Word 文書に表を動的生成

word_table = section.AddTable()
word_table.ResetCells(row_count, column_count)

抽出した行・列数に基づき、Word 内に同じ構造の表を生成します。

  • ResetCells は指定行列で空の表を作成します。
  • 表スタイルには ColorfulGridAccent4 を使用し、視認性を高めています。

(3)セル内容の整形と書き込み

cell_text = table.GetText(j, k).replace("\n", " ")

PDF ではセル内に不要な改行が含まれることが多いため、Word に書き込む前に整形します。

さらに、読みやすさのため基本的なフォント設定を行います:

tr.CharacterFormat.FontName = "メイリオ"
tr.CharacterFormat.FontSize = 11

これにより、生成された Word 文書は統一された見た目になり、表の可読性も向上します。

(4)表幅の自動調整

word_table.AutoFit(AutoFitBehaviorType.AutoFitToWindow)

テーブルが Word のページ幅に自動調整され、レイアウトの一貫性が保たれます。


3. Word 文書の保存

最後に Word 文書として保存します。

doc.SaveToFile(output_docx, FileFormat.Docx)

これで Word ファイルが生成され、すぐに開いて確認したり、編集作業やレポートへの組み込みが可能になります。

出力結果サンプル

PythonでPDF表を抽出してWord文書に書き込み


使用した主要クラス・メソッド一覧

一覧として整理したものが以下です:

クラス / メソッド 説明
PdfDocument PDF 文書を表すオブジェクト
PdfTableExtractor PDF から表を解析するためのクラス
ExtractTable(page_index) 指定ページの表集合を返す
Document Word 文書オブジェクト
AddSection() セクション追加(表・段落の挿入に使用)
section.AddTable() Word に表を作成
ResetCells(row, col) Word 表の行列を初期化
AppendText() セルへ文字を書き込む
DefaultTableStyle Word 表のスタイル設定
AutoFitToWindow 表の幅をページ幅に自動調整

まとめ

本記事では、Python を使って PDF の表を自動抽出し、Word の表として書き込む方法 を解説しました。

PDF 表の解析・行列構造の取得・Word 表の作成と書き込みまで、すべての処理を自動化できるため、大量処理や業務システムとの連携に最適 です。

手動コピーによる書式崩れ、オンラインツールの制限、デスクトップソフトの非効率性といった課題に対し、コードによる自動処理は柔軟性・精度・拡張性の面で圧倒的に優れています。

さらに応用として、大量バッチ処理、内容のクリーニング、テンプレート組み込み、OCR と併用した高度抽出 などにも展開可能です。

大量の PDF 表処理や長期的な文書自動化のニーズがある場合、Python ベースのこの方法は業務効率を大きく向上させる強力なソリューションとなるでしょう。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?