Извлечение данных из таблицы в PDF с помощью Python
Contents
[
Hide
]
Извлеките таблицы из PDF программно
Используйте TableAbsorber, чтобы находить таблицы на каждой странице Document. После обхода страницы переберите table_list, затем последовательно пройдите по строкам и ячейкам, чтобы восстановить содержимое таблицы в удобном текстовом виде.
- Откройте PDF как
Document. - Переберите страницы в
document.pages. - Создайте
TableAbsorberдля каждой страницы и вызовитеvisit(page). - Переберите найденные таблицы, строки и ячейки.
- Прочитайте текстовые фрагменты из каждой ячейки и соберите результат по строкам.
import aspose.pdf as apdf
from os import path
path_infile = path.join(self.dataDir, infile)
# Open PDF document
document = apdf.Document(path_infile)
# Iterate through each page in the document
for page in document.pages:
absorber = apdf.text.TableAbsorber()
absorber.visit(page)
for table in absorber.table_list:
print("Table")
for row in table.row_list:
row_text = []
for cell in row.cell_list:
cell_text = []
for fragment in cell.text_fragments:
cell_text.append("".join(seg.text for seg in fragment.segments))
row_text.append("|".join(cell_text))
print("|".join(row_text))
Извлеките таблицу из определённой области PDF-страницы
Если нужно извлекать только таблицы, расположенные внутри отмеченной области, объедините TableAbsorber с SquareAnnotation. В этом примере прямоугольник аннотации используется как граница, и обрабатываются только таблицы, полностью находящиеся внутри неё.
- Откройте PDF как
Document. - Выберите целевую страницу.
- Найдите квадратную аннотацию, которая отмечает интересующую область.
- Создайте
TableAbsorberи обработайте страницу. - Сравните прямоугольник каждой найденной таблицы с прямоугольником аннотации.
- Обработайте только таблицы, полностью попадающие в отмеченную область.
import aspose.pdf as apdf
from os import path
# The path to the documents directory
path_infile = path.join(self.dataDir, infile)
# Open PDF document
document = apdf.Document(path_infile)
# Get the first page (index starts from 1 in Aspose.PDF)
page = document.pages[1]
# Find the first square annotation
square_annotation = next(
(
ann
for ann in page.annotations
if ann.annotation_type == apdf.annotations.AnnotationType.SQUARE
),
None,
)
if square_annotation is None:
print("No square annotation found.")
return
# Initialize the TableAbsorber
absorber = apdf.text.TableAbsorber()
absorber.visit(page)
# Iterate through tables on the page
for table in absorber.table_list:
table_rect = table.rectangle
annotation_rect = square_annotation.rect
# Check if the table is inside the annotation region
is_in_region = (
annotation_rect.llx < table_rect.llx
and annotation_rect.lly < table_rect.lly
and annotation_rect.urx > table_rect.urx
and annotation_rect.ury > table_rect.ury
)
if is_in_region:
for row in table.row_list:
row_text = []
for cell in row.cell_list:
cell_text = []
for fragment in cell.text_fragments:
cell_text.append("".join(seg.text for seg in fragment.segments))
row_text.append("|".join(cell_text))
print("|".join(row_text))
Экспортируйте табличные данные из PDF в CSV
Если извлечённые данные должны использоваться в табличном формате, сохраните PDF с помощью ExcelSaveOptions и укажите формат вывода CSV. Полученный файл можно открыть в Excel, Google Sheets или импортировать в аналитические процессы.
- Откройте исходный PDF как Document.
- Создайте экземпляр
ExcelSaveOptions. - Установите
excel_save.formatвExcelSaveOptions.ExcelFormat.CSV. - Сохраните документ по целевому пути CSV.
import aspose.pdf as apdf
from os import path
path_infile = path.join(self.dataDir, infile)
path_outfile = path.join(self.dataDir, outfile)
document = apdf.Document(path_infile)
excel_save = apdf.ExcelSaveOptions()
excel_save.format = apdf.ExcelSaveOptions.ExcelFormat.CSV
document.save(path_outfile, excel_save)