从 PDF 中提取表格数据
Contents
[
Hide
]
以编程方式从 PDF 中提取表格
从 PDF 中提取表格并非一件轻松的任务,因为表格的创建方式多种多样。
Aspose.PDF for Android via Java 提供了一个工具,使检索表格变得简便。要提取表格数据,您应执行以下步骤:
- 打开文档 - 实例化一个 文档 对象;
- 创建一个 TableAbsorber 对象。
- 确定要分析并应用的页面 访问 到所需页面。表格数据将被扫描,结果将以列表形式保存 AbsorbedTable. 我们可以通过以下方式获取此列表 getTableList 方法。
- 要获取数据,请遍历
TableList并处理列表 已吸收的行 以及已吸收的单元格列表。我们可以通过调用来访问第一个列表 getTableList 方法,第二个则通过调用 getCellList. - 每个 AbsorbedCell 包含 TextFragmentCollections. 您可以将其用于自己的目的。
以下示例展示了从所有页面中提取表格:
public void extractTable () {
// Open document
try {
document=new Document(inputStream);
} catch (Exception e) {
resultMessage.setText(e.getMessage());
return;
}
com.aspose.pdf.TableAbsorber absorber=new com.aspose.pdf.TableAbsorber();
File file=new File(fileStorage, "extracted-text.txt");
FileOutputStream fileOutputStream;
try {
fileOutputStream=new FileOutputStream(file);
} catch (FileNotFoundException e) {
resultMessage.setText(e.getMessage());
return;
}
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(fileOutputStream));
// Scan pages
for (Page page : (Iterable<? extends Page>) document.getPages()) {
absorber.visit(page);
for (com.aspose.pdf.AbsorbedTable table : absorber.getTableList()) {
try {
bw.write("Table");
bw.newLine();
// Iterate through list of rows
for (com.aspose.pdf.AbsorbedRow row : table.getRowList()) {
// Iterate through list of cell
for (com.aspose.pdf.AbsorbedCell cell : row.getCellList()) {
for (com.aspose.pdf.TextFragment fragment : cell.getTextFragments()) {
StringBuilder sb=new StringBuilder();
for (TextSegment seg :
(Iterable<? extends TextSegment>) fragment.getSegments())
sb.append(seg.getText());
bw.write(sb.toString() + "|");
}
}
bw.newLine();
}
} catch (IOException e) {
resultMessage.setText(e.getMessage());
return;
}
}
}
try {
bw.close();
} catch (IOException e) {
resultMessage.setText(e.getMessage());
return;
}
resultMessage.setText(R.string.success_message);
}
在 PDF 页面特定区域提取表格
每个被吸收的表格都有 矩形 描述表格在页面上位置的属性。
因此,如果您需要提取位于特定区域的表格,必须使用特定的坐标。
以下示例展示了如何提取使用方形注释标记的表格:
public void extractMarkedTable () {
// Open document
try {
document=new Document(inputStream);
} catch (Exception e) {
resultMessage.setText(e.getMessage());
return;
}
com.aspose.pdf.Page page=document.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()));
List list=annotationSelector.getSelected();
if (list.size() == 0) {
resultMessage.setText("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) {
File file=new File(fileStorage, "extracted-text.txt");
FileOutputStream fileOutputStream;
try {
fileOutputStream=new FileOutputStream(file);
} catch (FileNotFoundException e) {
resultMessage.setText(e.getMessage());
return;
}
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(fileOutputStream));
try {
//Parse 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()) {
bw.write(fragment.getText());
}
bw.write("|");
}
bw.newLine();
}
}
bw.close();
// -------------
} catch (IOException e) {
resultMessage.setText(e.getMessage());
return;
}
resultMessage.setText(R.string.success_message);
}
}
}
}
从 PDF 中提取表格数据并存储为 CSV 文件
以下示例展示了如何提取表格并将其存储为 CSV 文件。 要了解如何将 PDF 转换为 Excel 电子表格,请参阅 将 PDF 转换为 Excel 文章。
public void extractTableSaveCSV () {
// Open document
try {
document=new Document(inputStream);
} catch (Exception e) {
resultMessage.setText(e.getMessage());
return;
}
File file=new File(fileStorage, "PDFToXLS_out.csv");
// Instantiate ExcelSave Option object
com.aspose.pdf.ExcelSaveOptions excelSave=new com.aspose.pdf.ExcelSaveOptions();
excelSave.setFormat(com.aspose.pdf.ExcelSaveOptions.ExcelFormat.CSV);
try {
document.save(file.toString(), excelSave);
} catch (Exception e) {
resultMessage.setText(e.getMessage());
return;
}
resultMessage.setText(R.string.success_message);
}