Extrair Conteúdo Marcado de PDFs em Python
Neste artigo, você aprenderá como extrair conteúdo marcado de documentos PDF usando Python.
Use esses exemplos quando precisar inspecionar um Tagged PDF, ler a árvore de estrutura lógica ou validar se os Structure Elements foram criados corretamente para fluxos de trabalho de acessibilidade.
Obtendo Conteúdo de Tagged PDF
Para obter o conteúdo de um PDF Document com Tagged Text, Aspose.PDF oferece tagged_content propriedade de Document classe.
Crie um PDF avançado, totalmente marcado, com um índice estruturado e hierárquico Table of Contents (TOC):
- Crie um novo objeto Document.
- Acesse a propriedade tagged_content.
- Defina o título do documento usando ‘set_title()’.
- Defina o idioma do documento usando ‘set_language()’.
- Salve o documento.
import aspose.pdf as ap
from aspose.pycore import cast
import sys
from os import path
# region Extract Tagged Content from PDF
def get_tagged_content(outfile):
# Create PDF Document
with ap.Document() as document:
# Get Content for work with Tagged PDF
tagged_content = document.tagged_content
# Work with Tagged PDF content
# Set Title and Language for Document
tagged_content.set_title("Simple Tagged Pdf Document")
tagged_content.set_language("en-US")
# Save Tagged PDF Document
document.save(outfile)
Obtendo a Estrutura Raiz
Os PDFs Tagged contêm uma árvore de estrutura lógica que define a estrutura semântica do documento. O StructTreeRoot representa a raiz dessa árvore lógica, enquanto o RootElement fornece uma interface para interagir com o elemento de estrutura de nível superior do documento.
O trecho de código a seguir mostra como obter a estrutura raiz de um Tagged PDF Document:
- Crie um novo documento PDF marcado.
- Acesse o conteúdo marcado e defina os metadados.
- Acesse StructTreeRoot e RootElement.
- Salve o PDF marcado.
import aspose.pdf as ap
from aspose.pycore import cast
import sys
from os import path
def get_root_structure(outfile):
# Create PDF Document
with ap.Document() as document:
# Get Content for work with Tagged PDF
tagged_content = document.tagged_content
# Set Title and Language for Document
tagged_content.set_title("Tagged Pdf Document")
tagged_content.set_language("en-US")
# Properties StructTreeRootElement and RootElement are used for access to
# StructTreeRoot object of pdf document and to root structure element (Document structure element).
struct_tree_root_element = tagged_content.struct_tree_root_element
root_element = tagged_content.root_element
print(f"StructTreeRootElement: {struct_tree_root_element}")
print(f"RootElement: {root_element}")
# Save Tagged PDF Document
document.save(outfile)
Acessando Elementos Filhos
Os PDFs Marcados contêm uma árvore de estrutura lógica que define a hierarquia semântica do documento (títulos, parágrafos, formulários, listas, etc.). Acessar e modificar esses elementos de estrutura permite que você:
- Inspecionar metadados como título, idioma, actual_text e propriedades relacionadas à acessibilidade
- Atualizar propriedades para melhorar a acessibilidade ou a localização
- Ajustar programaticamente a estrutura lógica do documento para conformidade PDF/UA
O trecho de código a seguir mostra como acessar os elementos filhos de um Documento Tagged PDF:
import aspose.pdf as ap
from aspose.pycore import cast
import sys
from os import path
def access_child_elements(infile, outfile):
# Open PDF Document
with ap.Document(infile) as document:
# Get Content for work with Tagged PDF
tagged_content = document.tagged_content
# Access to root element(s)
element_list = tagged_content.struct_tree_root_element.child_elements
for element in element_list:
if isinstance(element, ap.logicalstructure.StructureElement):
structure_element = cast(ap.logicalstructure.StructureElement, element)
# Get properties
print(
"StructureElement properties - "
f"title: {structure_element.title}, "
f"language: {structure_element.language}, "
f"actual_text: {structure_element.actual_text}, "
f"expansion_text: {structure_element.expansion_text}, "
f"alternative_text: {structure_element.alternative_text}"
)
# Access to child elements of first element in root element
element_list = tagged_content.root_element.child_elements[1].child_elements
for element in element_list:
if isinstance(element, ap.logicalstructure.StructureElement):
structure_element = element
# Set properties
structure_element.title = "title"
structure_element.language = "fr-FR"
structure_element.actual_text = "actual text"
structure_element.expansion_text = "exp"
structure_element.alternative_text = "alt"
# Save Tagged PDF Document
document.save(outfile)
Tópicos Relacionados ao PDF Marcado
- Criar Tagged PDF para construir documentos marcados acessíveis antes de inspecionar sua estrutura.
- Definindo Propriedades dos Structure Elements para atualizar propriedades semânticas após extrair elementos de estrutura.
- Trabalhando com Tabela em PDFs Marcados para fluxos de trabalho de acessibilidade de tabelas marcadas.