0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

JavaでPDFの表からデータを抽出

Posted at

PDF 表は、PDF ページの主な機能の 1 つで、分析、レポート、またはデータ入力など、さまざまな用途のデータを含んでいます。財務報告書を扱う場合、通常、PDFテーブルからデータを抽出する必要があります。無料のFree Spire.PDF for Javaは、PDFファイルから表データを抽出し、データをTXTやExcelなどの他のファイル形式に変換し、データを簡単に分析できるようにサポートします。この記事では、無料のFree Spire.PDF for Javaを使用して、PDF表からデータを抽出する方法について説明します。

【依存関係の追加】

この方法は、無料のFree Spire.PDF for Javaが必要ですので、先にjarファイルをインポートしてください。

1. Maven

Maven を使用している場合、プロジェクトの pom.xml ファイルに以下のコードを追加することで、簡単にアプリケーションに JAR ファイルをインポートすることができます。

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

2. 公式サイトよりJarファイルをダウンロード

まず、Free Spire.PDF for Javaの公式サイトよりzipファイルをダウンロードします。zipファイルを解凍し、libフォルダの下にあるSpire.Pdf.jarファイルを依存関係としてプロジェクトにインポートしてください。

PDFの表からデータを抽出し、TXTファイルへ書き出す

Free Spire.PDF for javaは、PDFの表からすべてのテキストを取得する PdfTable.GetText() メソッドを提供しています。ここでは、PDFの表からデータを抽出する手順を説明します。

  • PdfDocument のインスタンスを作成します。
  • PdfDocument.loadFromFile() メソッドを使用してPDFファイルを読み込みます。
  • StringBuilderPdfTableExtractor オブジェクトを作成します。
  • PDFファイル内のすべてのページをループして、そのページ上のすべてのテーブルを取得し、それらを PdfTable[] 配列に格納します。
  • すべての表をループし、次に表のセルをループし、PdfTable.GetText() メソッドを使用してセル内のテキストデータを取得します。
  • 抽出したデータを Writer.write() メソッドを使用してtxtファイルに書き出す。

Java

import com.spire.pdf.PdfDocument;
import com.spire.pdf.utilities.PdfTable;
import com.spire.pdf.utilities.PdfTableExtractor;

import java.io.FileWriter;
import java.io.IOException;

public class PDFTableToTXT {
    public static void main(String[] args) throws IOException {

        //PdfDocumentのオブジェクトを作成する
        PdfDocument pdf = new PdfDocument();

        //PDFファイルを読み込む
        pdf.loadFromFile("C:/貸借対照表.pdf");

        //StringBuilderのインスタンスを作成する
        StringBuilder builder = new StringBuilder();

        //PdfTableExtractorのオブジェクトを作成する
        PdfTableExtractor extractor = new PdfTableExtractor(pdf);

        //PDFの各ページをループする
        for (int page = 0; page < pdf.getPages().getCount(); page++)
        {
            //PDFページから表を抽出し、PdfTable[]配列に格納する
            PdfTable[] tableLists = extractor.extractTable(page);
            if (tableLists != null && tableLists.length > 0)
            {
                //すべての表をループする
                for (PdfTable table : tableLists)
                {
                    //表の行を取得する
                    int row = table.getRowCount();
                    //表の列を取得する
                    int column = table.getColumnCount();
                    for (int i = 0; i < row; i++)
                    {
                        for (int j = 0; j < column; j++)
                        {
                            //セルからテキストを取得する
                            String text = table.getText(i, j);

                            //取得したテキストをStringBuilderコンテナに書き込む
                            builder.append(text+" ");
                        }
                        builder.append("\r\n");
                    }
                }
            }
        }

        //txtファイルに書き込む
        FileWriter fileWriter = new FileWriter("抽出された表.txt");
        fileWriter.write(builder.toString());
        fileWriter.flush();
        fileWriter.close();
    }
}

PDFの表からデータを抽出し、TXTファイルへ書き出す

PDFからExcelワークシートに表データを抽出

あるページからすべての表を抽出し、それぞれを個別のワークシートとしてExcelファイルに保存するための主な手順は次のとおりです。

  • PdfDocument のインスタンスを作成します。
  • PdfDocument.loadFromFile() メソッドを使用して PDF ファイルを読み込みます。
  • PdfTableExtractor のオブジェクトを作成し、extactTable() メソッドを呼び出して、最初のページのすべての表を抽出します。
  • Workbook のインスタンスを作成します。
  • PdfTable[] 配列の表をループし、インデックスで特定の表を取得します。
  • Workbook.getWorksheets.add() メソッドを使用して、ワークシートをワークブックに追加します。
  • PDF表のセルをループし、PdfTable.getText() メソッドを使用して特定のセルの値を取得します。次に、Worksheet.get().setText() メソッドを使用して、その値をワークシートに挿入します。
    Workbook.saveToFile()* メソッドを使用して、ワークブックを保存します。

Java

import com.spire.pdf.PdfDocument;
import com.spire.pdf.utilities.PdfTable;
import com.spire.pdf.utilities.PdfTableExtractor;
import com.spire.xls.ExcelVersion;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;

public class PDFTableToExcel {
    public static void main(String[] args) {

        //PdfDocumentのインスタンスを作成する
        PdfDocument pdf = new PdfDocument();

        //PDFドキュメントを読み込む
        pdf.loadFromFile("C:/貸借対照表.pdf");

        //PdfTableExtractorのインスタンスを作成する
        PdfTableExtractor extractor = new PdfTableExtractor(pdf);

        //PDFの1ページ目から表を抽出する
        PdfTable[] pdfTables  = extractor.extractTable(0);

        //Workbookのオブジェクトを作成し、デフォルトのワークシートを削除する
        Workbook wb = new Workbook();
        wb.getWorksheets().clear();

        //表が見つかった場合
        if (pdfTables != null && pdfTables.length > 0) {

            //表をループする
            for (int tableNum = 0; tableNum < pdfTables.length; tableNum++) {
                //ワークブックにワークシートを追加する
                String sheetName = String.format("表 - %d", tableNum + 1);
                Worksheet sheet = wb.getWorksheets().add(sheetName);
                //現在の表の行をループする
                for (int rowNum = 0; rowNum < pdfTables[tableNum].getRowCount(); rowNum++) {
                    //現在の表の列をループする
                    for (int colNum = 0; colNum < pdfTables[tableNum].getColumnCount(); colNum++) {
                        //現在の表のセルからデータを抽出する
                        String text = pdfTables[tableNum].getText(rowNum, colNum);
                        //特定のセルにデータを挿入する
                        sheet.get(rowNum + 1, colNum + 1).setText(text);
                    }
                }
                //列の幅を自動調整する
                for (int sheetColNum = 0; sheetColNum < sheet.getColumns().length; sheetColNum++) {
                    sheet.autoFitColumn(sheetColNum + 1);
                }
            }
        }
        //ワークブックを保存する
        wb.saveToFile("PDFの表をExcelに書き出す.xlsx", ExcelVersion.Version2016);
    }
}

PDFからExcelワークシートに表データを抽出

無料のSpire.PDF for Javaは、PDFデータ処理に関する様々な機能をユーザーに提供します。PDFファイルの処理方法については、Spire.PDF for Javaチュートリアルをご覧ください。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?