PDF 是當今的裁決文件格式之一。它支持文本、圖形、表格、註釋和一系列其他元素。在某些情況下,您可能需要從 PDF 文檔(例如發票)中的表格中提取數據。為了以編程方式實現這一點,本文介紹瞭如何使用 Java 從 PDF 中的表格中提取數據。
從 PDF 表格中提取數據 - Java API
Aspose.PDF for Java 是一個功能豐富的 API,用於創建和操作 PDF 文檔。我們將使用此 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。
- 提取頁面的方形註釋。
- 在每次迭代中,初始化 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.PDF for Java 而沒有使用臨時許可的評估限制。
結論
在本文中,您學習瞭如何使用 Java 從 PDF 中的表格中提取數據。此外,本文還介紹瞭如何從 PDF 頁面的特定區域提取表格。此外,您可以使用 文檔 了解更多關於 Aspose.PDF for Java 的信息。此外,您可以通過我們的 論壇 提問。