PDFからテーブルデータを抽出する
Contents
[
Hide
]
プログラムでPDFからテーブルを抽出する
PDFからテーブルを抽出することは、テーブルがさまざまな方法で作成されている可能性があるため、簡単な作業ではありません。
Aspose.PDF for PHP via Javaには、テーブルを簡単に取得するためのツールがあります。テーブルデータを抽出するには、次の手順を実行する必要があります。
-
PDFドキュメントを開く - Documentオブジェクトをインスタンス化します。
-
ドキュメントからテーブルを抽出するために、TableAbsorber TableAbsorberオブジェクトを作成します。
-
ドキュメントの各ページを反復処理します。
-
分析するページを決定し、目的のページにvisitを適用します。表形式のデータがスキャンされ、結果はAbsorbedTableのリストに保存されます。このリストはgetTableListメソッドを通じて取得できます。
-
データを取得するには、
TableList
を反復処理し、absorbed rowsのリストと吸収されたセルのリストを処理します。最初のリストにはgetTableListメソッドを呼び出すことでアクセスでき、2番目にはgetCellListメソッドを呼び出すことでアクセスできます。 -
各AbsorbedCellにはTextFragmentCollectionsが含まれています。それを自分の目的に応じて処理することができます。
以下の例は、すべてのページからのテーブル抽出を示しています:
$document = new Document($inputFile);
$tableAbsorber = new TableAbsorber();
for ($pageIndex = 1; $pageIndex <= java_values($pages->size()); $pageIndex++) {
$page = $pages->get_Item($pageIndex);
$tableAbsorber->visit($page);
$tableList = $tableAbsorber->getTableList();
$tableIterator = $tableList->iterator();
while (java_values($tableIterator->hasNext())) {
$table = $tableIterator->next();
$tableRowList = $table->getRowList();
$tableRowListIterator = $tableRowList->iterator();
while (java_values($tableRowListIterator->hasNext())) {
$row = $tableRowListIterator->next();
$cellList = $row->getCellList();
$cellListIterator = $cellList->iterator();
// 行内の各セルを反復処理します。
while (java_values($cellListIterator->hasNext())) {
$cell = $cellListIterator->next();
$fragmentList = $cell->getTextFragments();
// セル内の各テキストフラグメントを反復処理します。
for ($fragmentIndex = 1; $fragmentIndex <= java_values($fragmentList->size()); $fragmentIndex++) {
$fragment = $fragmentList->get_Item($fragmentIndex);
$segments = $fragment->getSegments();
// テキストフラグメント内の各セグメントを反復処理します。
for ($segmentIndex = 1; $segmentIndex <= java_values($segments->size()); $segmentIndex++) {
$segment = $segments->get_Item($segmentIndex);
$responseData .= $segment->getText();
}
}
$responseData .= "|";
}
$responseData .= PHP_EOL;
}
}
}
// テーブルデータを出力ファイルに保存します。
file_put_contents($outputFile, $responseData);
// PDFドキュメントを閉じます。
$document->close();
PDFからテーブルデータを抽出してCSVファイルに保存
次の例は、テーブルを抽出してCSVファイルとして保存する方法を示しています。 PDFをExcelスプレッドシートに変換する方法については、PDFをExcelに変換の記事を参照してください。
// Documentクラスを使用して入力PDFドキュメントを読み込みます。
$document = new Document($inputFile);
// 保存オプションを指定するためにExcelSaveOptionsクラスのインスタンスを作成します。
$saveOption = new ExcelSaveOptions();
// 出力形式をCSVに設定します。
$saveOption->setFormat(ExcelSaveOptions_ExcelFormat::$CSV);
// 指定された保存オプションを使用して、PDFドキュメントをExcelファイルとして保存します。
$document->save($outputFile, $saveOption);