Extrair Conteúdo Marcado de PDF

Neste artigo, você aprenderá como extrair conteúdo marcado de um documento PDF usando C#.

O trecho de código a seguir também funciona com a biblioteca Aspose.PDF.Drawing.

Obtendo Conteúdo de PDF Marcado

Para obter o conteúdo de um Documento PDF com Texto Marcado, Aspose.PDF oferece a propriedade TaggedContent da classe Document.

O seguinte trecho de código mostra como obter o conteúdo de um documento PDF com Texto Marcado:

// Para exemplos completos e arquivos de dados, por favor, vá para https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// O caminho para o diretório de documentos.
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();

// Criar Documento Pdf
Document document = new Document();

// Obter Conteúdo para trabalhar com TaggedPdf
ITaggedContent taggedContent = document.TaggedContent;

//
// Trabalhar com conteúdo de Pdf marcado
//

// Definir Título e Idioma para o Documento
taggedContent.SetTitle("Documento Pdf Marcado Simples");
taggedContent.SetLanguage("en-US");

// Salvar Documento Pdf Marcado
document.Save(dataDir + "TaggedPDFContent.pdf");

Obtendo a Estrutura Raiz

Para obter a estrutura raiz de um Documento PDF Tagged, o Aspose.PDF oferece a propriedade StructTreeRootElement da interface ITaggedContent e StructureElement. O seguinte trecho de código mostra como obter a estrutura raiz de um Documento PDF Tagged:

// Para exemplos completos e arquivos de dados, por favor, vá para https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// O caminho para o diretório de documentos.
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();

// Criar Documento Pdf
Document document = new Document();

// Obter Conteúdo para trabalhar com TaggedPdf
ITaggedContent taggedContent = document.TaggedContent;

// Definir Título e Idioma para o Documento
taggedContent.SetTitle("Documento PDF Tagged");
taggedContent.SetLanguage("en-US");

// As propriedades StructTreeRootElement e RootElement são usadas para acesso ao
// objeto StructTreeRoot do documento pdf e ao elemento de estrutura raiz (elemento de estrutura do Documento).
StructTreeRootElement structTreeRootElement = taggedContent.StructTreeRootElement;
StructureElement rootElement = taggedContent.RootElement;

Acessando Elementos Filhos

Para acessar elementos filhos de um Documento PDF Marcado, Aspose.PDF oferece a classe ElementList. O trecho de código a seguir mostra como acessar elementos filhos de um Documento PDF Marcado:

// Para exemplos completos e arquivos de dados, por favor, vá para https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// O caminho para o diretório de documentos.
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();

// Abrir Documento Pdf
Document document = new Document(dataDir + "StructureElementsTree.pdf");

// Obter Conteúdo para trabalhar com TaggedPdf
ITaggedContent taggedContent = document.TaggedContent;

// Acesso ao(s) elemento(s) raiz
ElementList elementList = taggedContent.StructTreeRootElement.ChildElements;
foreach (Element element in elementList)
{
    if (element is StructureElement)
    {
        StructureElement structureElement = element as StructureElement;

        // Obter propriedades
        string title = structureElement.Title;
        string language = structureElement.Language;
        string actualText = structureElement.ActualText;
        string expansionText = structureElement.ExpansionText;
        string alternativeText = structureElement.AlternativeText;
    }
}

// Acesso aos elementos filhos do primeiro elemento na raiz
elementList = taggedContent.RootElement.ChildElements[1].ChildElements;
foreach (Element element in elementList)
{
    if (element is StructureElement)
    {
        StructureElement structureElement = element as StructureElement;

        // Definir propriedades
        structureElement.Title = "title";
        structureElement.Language = "fr-FR";
        structureElement.ActualText = "actual text";
        structureElement.ExpansionText = "exp";
        structureElement.AlternativeText = "alt";
    }
}

// Salvar Documento PDF Marcado
document.Save(dataDir + "AccessChildElements.pdf");

Marcação de Imagens em PDF Existente

Para marcar imagens em um documento PDF existente, o Aspose.PDF oferece o método FindElements da classe StructureElement. Você pode adicionar texto alternativo para figuras usando a propriedade AlternativeText da classe FigureElement.

O seguinte trecho de código mostra como marcar imagens em um documento PDF existente:

// Para exemplos completos e arquivos de dados, por favor, vá para https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// O caminho para o diretório de documentos.
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();
string inFile = dataDir + "TH.pdf";
string outFile = dataDir + "TH_out.pdf";
string logFile = dataDir + "TH_out.xml";

// Abrir documento
Document document = new Document(inFile);

// Obtém o conteúdo marcado e o elemento de estrutura raiz
ITaggedContent taggedContent = document.TaggedContent;
StructureElement rootElement = taggedContent.RootElement;

// Define título para o documento PDF marcado
taggedContent.SetTitle("Documento com imagens");

foreach (FigureElement figureElement in rootElement.FindElements<FigureElement>(true))
{
    // Define o Texto Alternativo para a Figura
    figureElement.AlternativeText = "Texto alternativo da figura (técnica 2)";


    // Criar e Definir Atributo BBox
    StructureAttribute bboxAttribute = new StructureAttribute(AttributeKey.BBox);
    bboxAttribute.SetRectangleValue(new Rectangle(0.0, 0.0, 100.0, 100.0));

    StructureAttributes figureLayoutAttributes = figureElement.Attributes.GetAttributes(AttributeOwnerStandard.Layout);
    figureLayoutAttributes.SetAttribute(bboxAttribute);
}

// Mover Elemento Span para Parágrafo (encontrar span errado e parágrafo no primeiro TD)
TableElement tableElement = rootElement.FindElements<TableElement>(true)[0];
SpanElement spanElement = tableElement.FindElements<SpanElement>(true)[0];
TableTDElement firstTdElement = tableElement.FindElements<TableTDElement>(true)[0];
ParagraphElement paragraph = firstTdElement.FindElements<ParagraphElement>(true)[0];

// Mover Elemento Span para Parágrafo
spanElement.ChangeParentElement(paragraph);


// Salvar documento
document.Save(outFile);



// Verificando conformidade com PDF/UA para documento de saída
document = new Document(outFile);

bool isPdfUaCompliance = document.Validate(logFile, PdfFormat.PDF_UA_1);
Console.WriteLine(String.Format("Conformidade com PDF/UA: {0}", isPdfUaCompliance));
<script type="application/ld+json">
{
    "@context": "http://schema.org",
    "@type": "SoftwareApplication",
    "name": "Aspose.PDF for .NET Library",
    "image": "https://www.aspose.cloud/templates/aspose/img/products/pdf/aspose_pdf-for-net.svg",
    "url": "https://www.aspose.com/",
    "publisher": {
        "@type": "Organization",
        "name": "Aspose.PDF",
        "url": "https://products.aspose.com/pdf",
        "logo": "https://www.aspose.cloud/templates/aspose/img/products/pdf/aspose_pdf-for-net.svg",
        "alternateName": "Aspose",
        "sameAs": [
            "https://facebook.com/aspose.pdf/",
            "https://twitter.com/asposepdf",
            "https://www.youtube.com/channel/UCmV9sEg_QWYPi6BJJs7ELOg/featured",
            "https://www.linkedin.com/company/aspose",
            "https://stackoverflow.com/questions/tagged/aspose",
            "https://aspose.quora.com/",
            "https://aspose.github.io/"
        ],
        "contactPoint": [
            {
                "@type": "ContactPoint",
                "telephone": "+1 903 306 1676",
                "tipo de contato": "vendas",
                "área servida": "US",
                "idioma disponível": "en"
            },
            {
                "@type": "ContactPoint",
                "telephone": "+44 141 628 8900",
                "tipo de contato": "vendas",
                "área servida": "GB",
                "idioma disponível": "en"
            },
            {
                "@type": "ContactPoint",
                "telephone": "+61 2 8006 6987",
                "tipo de contato": "vendas",
                "área servida": "AU",
                "idioma disponível": "en"
            }
        ]
    },
    "offers": {
        "@type": "Offer",
        "price": "1199",
        "moeda do preço": "USD"
    },
    "categoria da aplicação": "Biblioteca de Manipulação de PDF para .NET",
    "downloadUrl": "https://www.nuget.org/packages/Aspose.PDF/",
    "sistema operacional": "Windows, MacOS, Linux",
    "screenshot": "https://docs.aspose.com/pdf/net/create-pdf-document/screenshot.png",
    "versão do software": "2022.1",
    "avaliação agregada": {
        "@type": "AggregateRating",
        "valor da avaliação": "5",
        "contagem de avaliações": "16"
    }
}
</script>