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ファイルを読み込みます。
- StringBuilder と PdfTableExtractor オブジェクトを作成します。
- 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から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);
}
}
無料のSpire.PDF for Javaは、PDFデータ処理に関する様々な機能をユーザーに提供します。PDFファイルの処理方法については、Spire.PDF for Javaチュートリアルをご覧ください。