チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル»Java»Spire.PDF for Java»変換»JavaでPDFをCSVに変換する方法(PDF表の簡単抽出)
2025-08-29

JavaでPDFをCSVに変換する方法(PDF表の簡単抽出)

JavaでPDFをCSVに変換 – 表を抽出してCSVとして保存

レポートや請求書、PDF形式で保存されたデータセットを扱う際、開発者はしばしばその表データをスプレッドシートやデータベース、分析ツールで再利用する必要があります。一般的な解決策は JavaでPDFをCSVに変換すること です。CSVは軽量で構造化され、ほぼすべてのプラットフォームで扱えるため非常に便利です。

テキストや画像の書き出しと異なり、PDFからCSVへの変換の本質は PDFから表を抽出しCSVとして保存すること です。Spire.PDF for Java を使えば、PDF内の表構造を検出して数行のコードでプログラム的にCSVとして出力できます。

この記事では、環境構築から表抽出、さらに複数ページや1ページ内の複数表など複雑なケースへの対応まで、JavaでのPDFからCSVへの変換手順 をステップごとに解説します。

本チュートリアルの内容

JavaでPDFをCSVに変換するための環境構築

JavaでPDFをCSVに変換する前に、開発環境を整える必要があります。適切なライブラリを選び、プロジェクトに追加しましょう。

Spire.PDF for Javaを選ぶ理由

PDFファイルにはCSV形式でのエクスポート機能が備わっていないため、プログラムによる表抽出が現実的なアプローチです。Spire.PDF for Java は、PDF内の表構造を検出し、直接CSVに保存できるAPIを提供しており、シンプルかつ効率的に変換を行えます。

Spire.PDF for Javaのインストール

Mavenを利用する場合は以下を追加します。

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependency>
    <groupId>e-iceblue</groupId>
    <artifactId>spire.pdf</artifactId>
    <version>11.8.3</version>
</dependency>

Mavenを使わない場合は、Spire.PDF for Javaパッケージをダウンロードし、JARファイルをプロジェクトのクラスパスに追加してください。

PDFから表を抽出してCSVに保存する

PDFをCSVに変換する最も実用的な方法は表の抽出です。Spire.PDF for Javaを使えば以下のステップで実現できます。

  1. PDFを読み込む
  2. PdfTableExtractor で各ページから表を検出
  3. 行ごとにセルの値を取得
  4. CSVファイルに出力

以下にJavaコードのサンプルを示します。

Javaコード例:PDFからCSVへの変換

import com.spire.pdf.*;
import com.spire.pdf.utilities.*;

import java.io.*;

public class PdfToCsvExample {
    public static void main(String[] args) throws Exception {
        // PDFドキュメントを読み込み
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("Sample.pdf");

        // 抽出したテキストを格納するStringBuilder
        StringBuilder sb = new StringBuilder();

        // ページごとに処理
        for (int i = 0; i < pdf.getPages().getCount(); i++) {
            PdfTableExtractor extractor = new PdfTableExtractor(pdf);
            PdfTable[] tableLists = extractor.extractTable(i);

            if (tableLists != null) {
                for (PdfTable table : tableLists) {
                    for (int row = 0; row < table.getRowCount(); row++) {
                        for (int col = 0; col < table.getColumnCount(); col++) {
                            // CSVフィールドを安全にエスケープ
                            String cellText = escapeCsvField(table.getText(row, col));
                            sb.append(cellText);

                            if (col < table.getColumnCount() - 1) {
                                sb.append(",");
                            }
                        }
                        sb.append("\n");
                    }
                }
            }
        }

        // CSVファイルに出力
        FileWriter writer = new FileWriter("output/PDFTable.csv");
        writer.write(sb.toString());
        writer.close();

        pdf.close();
        System.out.println("PDF内の表をCSVに正常にエクスポートしました。");
    }

    // CSVフィールドをエスケープするユーティリティメソッド
    private static String escapeCsvField(String text) {
        if (text == null) return "";

        // 改行を削除
        text = text.replaceAll("[\\n\\r]", "");

        // 特殊文字を含む場合はエスケープ
        if (text.contains(",") || text.contains(";") || text.contains("\"") || text.contains("\n")) {
            text = text.replace("\"", "\"\"");  // ダブルクォートをエスケープ
            text = "\"" + text + "\"";          // クォートで囲む
        }

        return text;
    }
}

コード解説

  • PdfDocument:PDFファイルをメモリに読み込む
  • PdfTableExtractor:ページごとの表を検出
  • PdfTable:行・列にアクセス可能
  • escapeCsvField():改行を削除し、特殊文字をエスケープ
  • StringBuilder:セルテキストをカンマ区切りで格納
  • 出力結果は「Output.csv」として保存され、Excelや任意のエディタで開けます

PDFから抽出した表をCSVに変換した例:

JavaでPDF表をCSVに変換した出力例

複雑なPDFからCSV変換のケースを処理する

実際のPDFには複数表、複数ページ、または不規則な表構造が含まれることが多いです。ここではそれらへの対応方法を紹介します。

1. 1ページに複数の表がある場合

extractTable(i) が返す PdfTable[] にはそのページで検出されたすべての表が含まれます。各表を個別のCSVに保存することも可能です。

for (int i = 0; i < pdf.getPages().getCount(); i++) {
    PdfTableExtractor extractor = new PdfTableExtractor(pdf);
    PdfTable[] tableLists = extractor.extractTable(i);

    if (tableLists != null) {
        for (int t = 0; t < tableLists.length; t++) {
            PdfTable table = tableLists[t];
            StringBuilder tableContent = new StringBuilder();

            for (int row = 0; row < table.getRowCount(); row++) {
                for (int col = 0; col < table.getColumnCount(); col++) {
                    tableContent.append(escapeCsvField(table.getText(row, col)));
                    if (col < table.getColumnCount() - 1) {
                        tableContent.append(",");
                    }
                }
                tableContent.append("\n");
            }

            FileWriter writer = new FileWriter("Table_Page" + i + "_Index" + t + ".csv");
            writer.write(tableContent.toString());
            writer.close();
        }
    }
}

1ページ内の複数表を個別CSVに保存した例:

Javaで1ページ内の複数表をCSVにエクスポート

2. 複数ページや大きな表の場合

表が複数ページにまたがる場合はページごとに繰り返し処理し、追記していくのがポイント です。

StringBuilder sb = new StringBuilder();

for (int i = 0; i < pdf.getPages().getCount(); i++) {
    PdfTableExtractor extractor = new PdfTableExtractor(pdf);
    PdfTable[] tables = extractor.extractTable(i);

    if (tables != null) {
        for (PdfTable table : tables) {
            for (int row = 0; row < table.getRowCount(); row++) {
                for (int col = 0; col < table.getColumnCount(); col++) {
                    sb.append(escapeCsvField(table.getText(row, col)));
                    if (col < table.getColumnCount() - 1) sb.append(",");
                }
                sb.append("\n");
            }
        }
    }
}

FileWriter writer = new FileWriter("MergedTables.csv");
writer.write(sb.toString());
writer.close();

複数ページにまたがる大きな表を1つのCSVに統合した例:

Javaで複数ページのPDF表をCSVに統合

3. フォーマットに関する制限

CSVはテキストデータのみを保持するため、結合セル・フォント・画像などの情報は失われます。書式を保持したい場合はExcel(.xlsx)にエクスポートする方法が適しています。詳細は JavaでPDF表をExcelにエクスポートする方法 を参照してください。

4. CSVの特殊文字処理

CSVではカンマ、セミコロン、ダブルクォート、改行などの特殊文字がファイル構造を壊す可能性があります。 上記のJava例では escapeCsvField メソッドで改行除去と適切なエスケープ処理を行っています。

さらに高度な処理が必要な場合は Spire.XLS for Java を利用して Excelワークシートにデータを書き込み、その後 CSVとして保存 すれば、特殊文字も自動処理され正しいCSVが得られます。

オープンソースの OpenCSVApache Commons CSV なども同様に特殊文字処理を自動で行える選択肢です。

まとめ

JavaでPDFをCSVに変換するとは、基本的に 表を抽出して構造化データとして保存すること を意味します。CSVは軽量で広くサポートされており、表形式データの保存や分析に最適です。Spire.PDF for Javaを導入し、この記事のコード例に従うことで、このプロセスを自動化でき、時間を節約し手作業を減らせます。

さらに高度な機能を試したい方は、無料評価ライセンスの申請 を行うか、小規模プロジェクトには Free Spire.PDF for Java を利用できます。

FAQ

Q: PDFをCSVファイルに変換できますか? A: はい。画像や装飾されたテキストは変換できませんが、表を抽出してCSVに保存することは可能です。

Q: JavaでPDFからデータを抽出する方法は? A: Spire.PDF for JavaのようなPDFライブラリを使えば、ドキュメント解析や表検出、CSVやExcelへのエクスポートが可能です。

Q: 最適なPDF to CSV変換方法は? A: Java開発者には、Spire.PDF for Javaのようなプログラム的な解決策が、手動ツールより柔軟で効率的です。

Q: JavaコードでPDFをExcelに変換する方法は? A: CSV出力と手順はほぼ同じで、カンマ区切りのテキストではなくExcel形式に保存することで、より多機能な利用が可能です。

Read 34 times