PDFは、最近の支配的な文書形式の1つです。テキスト、グラフィック、表、注釈、およびその他のさまざまな要素をサポートします。場合によっては、請求書などのPDFドキュメントのテーブルからデータを抽出する必要があります。これをプログラムで実現するために、この記事では、Javaを使用してPDFのテーブルからデータを抽出する方法について説明します。
PDF形式のテーブルからデータを抽出-JavaAPI
Aspose.PDF for Javaは、PDFドキュメントを作成および操作するための機能豊富なAPIです。このAPIを使用して、PDFドキュメントのテーブルからデータを抽出します。 APIのJARをダウンロードするか、次のMaven構成を使用してJavaアプリケーション内にインストールできます。
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>https://repository.aspose.com/repo/</url>
</repository>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-pdf</artifactId>
<version>21.9</version>
</dependency>
JavaのPDF形式のテーブルからのデータ抽出
以下は、Javaを使用してPDFのテーブルからデータを抽出する手順です。
- まず、Documentクラスを使用してPDFドキュメントをロードします。
- Document.getPages()コレクションを使用して、PDFのページをループします。
- 各反復で、TableAbsorberオブジェクトを初期化し、TableAbsorber.visit(Page)メソッドを使用して選択したページにアクセスします。
- ネストされたループで、TableAbsorber.getTableList()コレクション内のテーブルのリストを反復処理します。
- コレクション内のAbsorbedTableごとに、AbsorbedTable.getRowList()からの行のコレクションを反復処理します。
- コレクション内のAbsorbedRowごとに、AbsorbedRow.getCellList()からのセルのコレクションを反復処理します。
- 最後に、各AbsorbedCellのTextFragmentコレクションをループして、テキストを出力します。
次のコードサンプルは、Javaを使用してPDFのテーブルからテキストを抽出する方法を示しています。
// ソースPDFドキュメントをロード
com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document("sample.pdf");
// テーブルアブソーバーを作成する
com.aspose.pdf.TableAbsorber absorber = new com.aspose.pdf.TableAbsorber();
// ページをスキャンする
for (com.aspose.pdf.Page page : pdfDocument.getPages()) {
// ビストページ
absorber.visit(page);
// テーブルを反復処理します
for (com.aspose.pdf.AbsorbedTable table : absorber.getTableList()) {
System.out.println("Table");
// 行のリストを反復処理します
for (com.aspose.pdf.AbsorbedRow row : table.getRowList()) {
// セルのリストを反復処理します
for (com.aspose.pdf.AbsorbedCell cell : row.getCellList()) {
// テキストフラグメントを反復処理します
for (com.aspose.pdf.TextFragment fragment : cell.getTextFragments()) {
StringBuilder sb = new StringBuilder();
for (com.aspose.pdf.TextSegment seg : fragment.getSegments())
sb.append(seg.getText());
System.out.print(sb.toString() + "|");
}
}
System.out.println();
}
}
}
Java:PDFページの特定の領域からテーブルデータを抽出する
以下は、Javaを使用してPDFのページの特定の部分からテーブルを抽出する手順です。
- まず、Documentクラスを使用してPDFドキュメントをロードします。
- 次に、Document.getPages()コレクションから目的のPageを選択します。
- ページのSquareアノテーションを抽出します。
- 各反復で、TableAbsorberオブジェクトを初期化し、TableAbsorber.visit(Page)メソッドを使用して選択したページにアクセスします。
- ネストされたループで、TableAbsorber.getTableList()コレクション内のテーブルのリストを反復処理します。
- 吸収されたテーブルが目的のページ領域にあるかどうかを確認します。
- コレクション内のAbsorbedTableごとに、AbsorbedTable.getRowList()を使用して行のコレクションを反復処理します。
- コレクション内のAbsorbedRowごとに、AbsorbedRow.getCellList()を使用してセルのコレクションを反復処理します。
- 最後に、各AbsorbedCellのTextFragmentコレクションをループして、テキストを出力します。
次のコードサンプルは、PDFページの特定の領域からテーブルを抽出する方法を示しています。
// ソースPDFドキュメントをロード
com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document("sample.pdf");
// 目的のページの参照を取得します
com.aspose.pdf.Page page = pdfDocument.getPages().get_Item(1);
// 注釈セレクターを作成する
com.aspose.pdf.AnnotationSelector annotationSelector = new com.aspose.pdf.AnnotationSelector(
new com.aspose.pdf.SquareAnnotation(page, com.aspose.pdf.Rectangle.getTrivial()));
// 注釈のリストを取得する
java.util.List<com.aspose.pdf.Annotation> list = annotationSelector.getSelected();
if (list.size() == 0) {
System.out.println("Marked tables not found..");
return;
}
// 正方形の注釈を作成する
com.aspose.pdf.SquareAnnotation squareAnnotation = (com.aspose.pdf.SquareAnnotation) list.get(0);
// テーブルアブソーバーを作成してページにアクセス
com.aspose.pdf.TableAbsorber absorber = new com.aspose.pdf.TableAbsorber();
absorber.visit(page);
// テーブルを反復処理します
for (com.aspose.pdf.AbsorbedTable table : absorber.getTableList()) {
{
// テーブルが存在することを確認してください
boolean isInRegion = (squareAnnotation.getRect().getLLX() < table.getRectangle().getLLX())
&& (squareAnnotation.getRect().getLLY() < table.getRectangle().getLLY())
&& (squareAnnotation.getRect().getURX() > table.getRectangle().getURX())
&& (squareAnnotation.getRect().getURY() > table.getRectangle().getURY());
if (isInRegion) {
for (com.aspose.pdf.AbsorbedRow row : table.getRowList()) {
{
for (com.aspose.pdf.AbsorbedCell cell : row.getCellList()) {
for (com.aspose.pdf.TextFragment fragment : cell.getTextFragments()) {
StringBuilder sb = new StringBuilder();
for (com.aspose.pdf.TextSegment seg : fragment.getSegments())
sb.append(seg.getText());
System.out.print(sb.toString() + "|");
}
}
System.out.println();
}
}
}
}
}
無料ライセンスを取得する
一時ライセンスを使用すると、評価の制限なしにAspose.PDFforJavaを使用できます。
結論
この記事では、Javaを使用してPDFのテーブルからデータを抽出する方法を学習しました。さらに、この記事では、PDFのページの特定の領域からテーブルを抽出する方法について説明しました。さらに、ドキュメントを使用して、Aspose.PDFforJavaの詳細を学ぶことができます。また、フォーラムから質問することもできます。