ExtractStructuredPage

Texto, extracción, datos estructurados

Descripción

Captura una página PDF y serializa su modelo de texto estructurado como JSON del esquema 2, XHTML semántico o CSV de tablas

El modelo combina el orden y los atributos reales del árbol de estructura con un fallback geométrico explícito, párrafos, segmentos con estilo y tablas con celdas vacías o combinadas

Sintaxis

Delphi

Function TPDFlib.ExtractStructuredPage(Page, Format,
  Options: Integer): WideString;

ActiveX

Function PDFlib::ExtractStructuredPage(Page As Long, Format As Long,
  Options As Long) As String

DLL

const wchar_t* DLExtractStructuredPage(int InstanceID, int Page,
  int Format, int Options);
const char* DLExtractStructuredPageA(int InstanceID, int Page,
  int Format, int Options);

Parámetros

PageEl número de página con base 1
FormatPDF_STRUCTURED_TEXT_JSON (0), PDF_STRUCTURED_TEXT_XHTML (1) o PDF_STRUCTURED_TEXT_CSV (2)
OptionsCero o PDF_STRUCTURED_TEXT_INCLUDE_STYLES (1) para incluir fuente, tamaño, color y alineación vertical en JSON y XHTML

Jerarquía JSON

{
  "version": 2,
  "page": 1,
  "width": 612,
  "height": 792,
  "readingOrderSource": "tagged",
  "structureComplete": true,
  "warnings": [],
  "blocks": [
    {
      "type": "paragraph",
      "nodeId": 3,
      "source": "tagged",
      "confidence": 1,
      "furniture": "none",
      "furnitureSource": "",
      "bbox": [
        40,
        50,
        300,
        70
      ],
      "text": "Example paragraph",
      "lines": [
        {
          "spans": []
        }
      ]
    }
  ],
  "semantics": []
}

Los metadatos de página incluyen readingOrderSource, structureComplete y warnings; las fuentes de lectura son tagged, mixed, geometric o geometric-columns

Los bloques incluyen nodeId, source, confidence, furniture, furnitureSource y bbox; los segmentos conservan originalText, contentEvent, nodeId y artifact junto con el texto de salida

Los metadatos de tabla incluyen logicalTable, logicalTableId, fragment y banderas de continuación; las filas llevan logicalRow y repeatedHeader

Cada celda registra rowSpan, columnSpan, anchorRow, anchorColumn, covered, header, mergeSource y confidence; las celdas etiquetadas vacías se conservan y los límites de celda desconocidos son null

El arreglo semantics conserva los eventos ordenados de begin, content y end del árbol completo, los ID estables de nodo y de padre, los roles resueltos y sin procesar, los espacios de nombres, el idioma, el texto alternativo, la presencia de ActualText, los atributos de celda y las referencias a página, flujo, MCID u objeto

structureComplete describe la cobertura del recorrido y de la vinculación de contenido; no es una certificación de etiquetado ni de accesibilidad

Valores devueltos

JSON y XHTML devuelven documentos independientes completos; el XHTML representa las celdas combinadas con extensiones de tabla y expone los metadatos de origen del bloque

El CSV devuelve solo celdas de tabla y queda vacío cuando la página no tiene tablas; las celdas combinadas ponen el texto en la celda ancla y dejan vacías las celdas cubiertas

Una solicitud no válida o un error de extracción devuelve una cadena vacía

Observaciones

El análisis usa SetStructuredTextOptions de forma independiente de las Options específicas de formato; examine GetLastStructuredTextDiagnostics para conocer las fuentes de lectura y las advertencias de fallback

El orden real del árbol de etiquetas tiene precedencia cuando las vinculaciones de contenido están completas; el contenido sin resolver o ambiguo conserva el texto extraído en el fallback mixed o geometric, y los roles personalizados desconocidos no se adivinan por su nombre

Las vinculaciones de contenido marcado distinguen los flujos de página y las rutas de invocación de Form XObject anidados; las ocurrencias compartidas de Form etiquetado con orden semántico ambiguo se revelan en lugar de asignarles un orden inventado

Los reemplazos de ActualText conservan el texto de origen en los segmentos JSON; las referencias a objetos se retienen como metadatos semánticos, sin extraer de ellas el texto de las anotaciones

La detección geométrica de tablas requiere filas de varias celdas alineadas; la inferencia opcional de combinaciones y la detección de columnas siguen siendo heurísticas

Los cuadros delimitadores usan coordenadas de página con origen en la esquina superior izquierda en puntos PDF; un fragmento puede conservar los límites completos de su pasada de texto de origen

La extracción conserva la página seleccionada y la pila de etiquetas del escritor abiertas; las etiquetas del escritor aún sin guardar se incluyen sin cerrar etiquetas ni finalizar el documento

Los punteros de retorno de DLL siguen siendo válidos hasta la siguiente llamada que devuelva una cadena en la misma instancia

LastErrorCode es 111 para página, formato u opciones no válidos y 515 cuando falla la extracción

Véase también

ExtractStructuredDocument, ExtractPageTextBlocks, GetPageText