Extractar Contenido Etiquetado de PDF
En este artículo aprenderás cómo extraer contenido etiquetado de un documento PDF usando C#.
El siguiente fragmento de código también funciona con la biblioteca Aspose.PDF.Drawing.
Obtención de Contenido PDF Etiquetado
Para obtener el contenido de un Documento PDF con Texto Etiquetado, Aspose.PDF ofrece la propiedad TaggedContent de la clase Document.
El siguiente fragmento de código muestra cómo obtener el contenido de un documento PDF con Texto Etiquetado:
// Para ejemplos completos y archivos de datos, por favor visite https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// La ruta al directorio de documentos.
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();
// Crear Documento Pdf
Document document = new Document();
// Obtener Contenido para trabajar con TaggedPdf
ITaggedContent taggedContent = document.TaggedContent;
//
// Trabajar con el contenido de Pdf etiquetado
//
// Establecer Título e Idioma para el Documento
taggedContent.SetTitle("Documento PDF Etiquetado Simple");
taggedContent.SetLanguage("en-US");
// Guardar Documento PDF Etiquetado
document.Save(dataDir + "TaggedPDFContent.pdf");
Obtener la Estructura Raíz
Para obtener la estructura raíz de un Documento PDF etiquetado, Aspose.PDF ofrece la propiedad StructTreeRootElement de la interfaz ITaggedContent y StructureElement. El siguiente fragmento de código muestra cómo obtener la estructura raíz de un Documento PDF etiquetado:
// Para ejemplos completos y archivos de datos, por favor vaya a https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// La ruta al directorio de documentos.
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();
// Crear Documento Pdf
Document document = new Document();
// Obtener Contenido para trabajar con TaggedPdf
ITaggedContent taggedContent = document.TaggedContent;
// Establecer Título e Idioma para el Documento
taggedContent.SetTitle("Documento PDF Etiquetado");
taggedContent.SetLanguage("en-US");
// Las propiedades StructTreeRootElement y RootElement se utilizan para acceder a
// objeto StructTreeRoot del documento pdf y al elemento de estructura raíz (elemento de estructura del Documento).
StructTreeRootElement structTreeRootElement = taggedContent.StructTreeRootElement;
StructureElement rootElement = taggedContent.RootElement;
Accediendo a Elementos Hijos
Para acceder a elementos hijos de un Documento PDF Etiquetado, Aspose.PDF ofrece la clase ElementList. El siguiente fragmento de código muestra cómo acceder a elementos hijos de un Documento PDF Etiquetado:
// Para ejemplos completos y archivos de datos, por favor visite https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// La ruta al directorio de documentos.
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();
// Abrir Documento Pdf
Document document = new Document(dataDir + "StructureElementsTree.pdf");
// Obtener Contenido para trabajar con TaggedPdf
ITaggedContent taggedContent = document.TaggedContent;
// Acceso al(los) elemento(s) raíz
ElementList elementList = taggedContent.StructTreeRootElement.ChildElements;
foreach (Element element in elementList)
{
if (element is StructureElement)
{
StructureElement structureElement = element as StructureElement;
// Obtener propiedades
string title = structureElement.Title;
string language = structureElement.Language;
string actualText = structureElement.ActualText;
string expansionText = structureElement.ExpansionText;
string alternativeText = structureElement.AlternativeText;
}
}
// Acceso a elementos hijos del primer elemento en el elemento raíz
elementList = taggedContent.RootElement.ChildElements[1].ChildElements;
foreach (Element element in elementList)
{
if (element is StructureElement)
{
StructureElement structureElement = element as StructureElement;
// Establecer propiedades
structureElement.Title = "title";
structureElement.Language = "fr-FR";
structureElement.ActualText = "actual text";
structureElement.ExpansionText = "exp";
structureElement.AlternativeText = "alt";
}
}
// Guardar Documento PDF Etiquetado
document.Save(dataDir + "AccessChildElements.pdf");
Etiquetado de Imágenes en PDF Existentes
Para etiquetar imágenes en un documento PDF existente, Aspose.PDF ofrece el método FindElements de la clase StructureElement. Puedes añadir texto alternativo para figuras usando la propiedad AlternativeText de la clase FigureElement.
El siguiente fragmento de código muestra cómo etiquetar imágenes en un documento PDF existente:
// Para ejemplos completos y archivos de datos, por favor ve a https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// La ruta al directorio 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);
// Obtiene el contenido etiquetado y el elemento de estructura raíz
ITaggedContent taggedContent = document.TaggedContent;
StructureElement rootElement = taggedContent.RootElement;
// Establece título para el documento PDF etiquetado
taggedContent.SetTitle("Documento con imágenes");
foreach (FigureElement figureElement in rootElement.FindElements<FigureElement>(true))
{
// Establece Texto Alternativo para la Figura
figureElement.AlternativeText = "Texto alternativo de la figura (técnica 2)";
// Crea y Establece el 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 a Párrafo (encuentra span y párrafo incorrectos en primer 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 a Párrafo
spanElement.ChangeParentElement(paragraph);
// Guardar documento
document.Save(outFile);
// Verificación de Cumplimiento PDF/UA para el documento de salida
document = new Document(outFile);
bool isPdfUaCompliance = document.Validate(logFile, PdfFormat.PDF_UA_1);
Console.WriteLine(String.Format("Cumplimiento PDF/UA: {0}", isPdfUaCompliance));