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。
- 提取页面的 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.PDF for Java,而不受评估限制。
结论
在本文中,您学习了如何使用 Java 从 PDF 中的表中提取数据。此外,本文还介绍了如何从 PDF 页面的特定区域提取表格。此外,您可以使用 documentation 了解有关 Aspose.PDF for Java 的更多信息。此外,您可以通过我们的 论坛 提问。