Извлечение данных таблицы из PDF
Программное извлечение таблиц из PDF
Извлечение таблиц из PDF - это нетривиальная задача, поскольку таблица может быть создана по-разному.
Aspose.PDF для Java предлагает инструмент, упрощающий извлечение таблиц. Чтобы извлечь данные таблицы, выполните следующие шаги:
-
Откройте документ - создайте объект Document;
-
Создайте объект TableAbsorber.
-
Определите, какие страницы будут анализироваться, и примените visit к нужным страницам. Табличные данные будут сканироваться, и результат будет сохранен в списке AbsorbedTable. Мы можем получить этот список с помощью метода getTableList.
-
Чтобы получить данные, итерируйтесь через
TableList
и обрабатывайте список absorbed rows и список поглощенных ячеек. Мы можем получить доступ к первому списку, вызвав метод getTableList, и ко второму, вызвав метод getCellList. -
Каждый AbsorbedCell содержит TextFragmentCollections. Вы можете обрабатывать его для своих целей.
Следующий пример показывает извлечение таблицы со всех страниц:
public static void Extract_Table() {
// Загрузить исходный PDF документ
String filePath = "/home/aspose/pdf-examples/Samples/sample_table.pdf";
com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document(filePath);
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("Таблица");
// Перебрать список строк
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();
}
}
}
}
Извлечение таблицы в определенной области страницы PDF
Каждая извлеченная таблица имеет свойство Rectangle, которое описывает положение таблицы на странице.
Таким образом, если вам нужно извлечь таблицы, расположенные в определенной области, вам необходимо работать с конкретными координатами.
Следующий пример показывает, как извлечь таблицу, отмеченную квадратной аннотацией:
public static void Extract_Marked_Table() {
// Загрузить исходный PDF документ
String filePath = "<... введите путь к pdf файлу здесь ...>";
com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document(filePath);
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("Отмеченные таблицы не найдены..");
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();
}
}
}
}
}
}
Извлечение данных таблицы из PDF и сохранение их в CSV файл
Следующий пример показывает, как извлечь таблицу и сохранить её как CSV файл. Чтобы узнать, как конвертировать PDF в Excel Spreadsheet, пожалуйста, обратитесь к статье Конвертация PDF в Excel.
public static void Extract_Table_Save_CSV()
{
String filePath = "/home/admin1/pdf-examples/Samples/sample_table.pdf";
// Загрузить PDF документ
com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document(filePath);
// Создать объект ExcelSave Option
com.aspose.pdf.ExcelSaveOptions excelSave = new com.aspose.pdf.ExcelSaveOptions();
excelSave.setFormat(com.aspose.pdf.ExcelSaveOptions.ExcelFormat.CSV);
// Сохранить результат в формате XLS
pdfDocument.save("PDFToXLS_out.xlsx", excelSave);
}