Extrair Dados de Tabela em PDF com Python
Contents
[
Hide
]
Extrair Tabelas de PDF programaticamente
Usar TableAbsorber para detectar tabelas em cada página de um Document. Depois de visitar uma página, percorra table_list, então percorra cada linha e célula para reconstruir o conteúdo da tabela em um formato de texto legível.
- Abra o PDF como um
Document. - Iterar pelas páginas em
document.pages. - Criar um
TableAbsorberpara cada página e chamarvisit(page). - Percorra as tabelas, linhas e células detectadas.
- Leia fragmentos de texto de cada célula e monte a saída da linha extraída.
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))
Extrair tabela em área específica da página PDF
Se precisar extrair apenas tabelas localizadas dentro de uma região marcada, combine TableAbsorber com um SquareAnnotation. Neste exemplo, o retângulo da anotação é usado como limite, e somente tabelas totalmente contidas dentro dessa região são processadas.
- Abra o PDF como um
Document. - Selecione a página de destino.
- Encontre a anotação quadrada que marca a região de interesse.
- Criar um
TableAbsorbere visite a página. - Compare cada retângulo de tabela detectado com o retângulo da anotação.
- Processar apenas as tabelas que se situam completamente dentro da área marcada.
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))
Exportar Dados da Tabela de PDF para CSV
Quando você precisar dos dados extraídos em um formato amigável a planilhas, salve o PDF usando ExcelSaveOptions e defina o formato de saída como CSV. O arquivo resultante pode ser aberto no Excel, Google Sheets, ou importado em fluxos de trabalho analíticos.
- Abra o PDF de origem como um Document.
- Criar um
ExcelSaveOptionsinstância. - Conjunto
excel_save.formatparaExcelSaveOptions.ExcelFormat.CSV. - Salve o documento no caminho CSV de destino.
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)