Skip to content

Anotación de PDF

Anota PDF en Potato con el tipo de visualización pdf, con resaltado de spans, cajas delimitadoras sobre la página, enlaces entre páginas y OCR para archivos escaneados.

La visualización pdf renderiza un PDF en el navegador con PDF.js y coloca la superficie de anotación sobre la página renderizada en lugar de sobre texto extraído de antemano. Quien anota ve el documento real, con sus columnas, tablas, figuras y saltos de página intactos, y lo etiqueta ahí mismo. La visualización toma una única clave obligatoria, el campo que contiene la ruta o la URL del PDF, y todo lo demás es una opción de visualización.

yaml
instance_display:
  fields:
    - key: pdf
      type: pdf
      label: "Document"
      display_options:
        view_mode: scroll
        max_height: 760
        zoom: page-width

view_mode toma scroll, paginated o side-by-side. El desplazamiento continuo apila todas las páginas en un mismo contenedor, lo que importa cuando una anotación tiene que cruzar un salto de página. La vista paginada muestra una página cada vez con controles de navegación y encaja con documentos largos, donde se trabaja página a página.

Tres modos de anotación

annotation_mode decide qué puede dibujar quien anota, y es la opción que cambia la tarea en sí, no su apariencia. El valor por defecto es span.

ModoQué hace quien anotaAnclado a
spanSelecciona texto y le aplica una etiquetaLa capa de texto de PDF.js
bounding_boxDibuja una caja en cualquier punto de la páginaCoordenadas de página
linkMarca anclas y luego las conectaSpans de texto y regiones de página

El modo span depende de que el PDF lleve una capa de texto, cosa que ocurre en cualquier PDF generado por un procesador de textos o un sistema de composición tipográfica, y no ocurre en un escaneo. El modo de caja delimitadora no depende de ella, así que una página escaneada todavía se puede etiquetar por regiones sin ninguna extracción de texto.

Como la visualización pdf ancla los spans a través de la capa de texto de PDF.js y no del contenedor .text-content que usan las demás visualizaciones, no acepta la marca span_target. La anotación de spans sigue funcionando, a través de la capa de texto propia del PDF.

Enlaces entre páginas

El modo de enlace sirve para relaciones que abarcan varias páginas, como una afirmación en la página 2 que se apoya en una figura de la página 9. Quien anota marca primero las anclas y después traza enlaces tipados entre ellas; Potato registra las anclas y los enlaces bajo nombres de esquema distintos.

yaml
instance_display:
  fields:
    - key: pdf
      type: pdf
      label: "Document"
      display_options:
        annotation_mode: link
        view_mode: scroll
        enable_text_anchors: true
        enable_region_anchors: true
        anchor_schema: pdf_anchors
        link_schema: pdf_links
        anchor_labels:
          - name: claim
            color: "#dc2626"
          - name: figure
            color: "#2563eb"
        link_types:
          - name: refers_to
            directed: true
            color: "#dc2626"
            allowed_source_labels: [claim]
            allowed_target_labels: [figure]

allowed_source_labels y allowed_target_labels restringen qué anclas puede unir un tipo de enlace, y así una directriz pasa a ser algo que impone la interfaz en vez de algo que quien anota tiene que recordar. Un enlace refers_to configurado como arriba solo puede empezar en un claim y solo puede terminar en un figure, de modo que se rechaza un enlace trazado desde una figura de vuelta a una afirmación. Pon directed: false para una relación simétrica como same_as.

Hay dos clases de anclas y ambas se pueden desactivar por separado. enable_text_anchors permite resaltar un span de texto y enable_region_anchors permite dibujar una caja de región, que es lo que necesita una figura o una tabla. En el repositorio original hay un ejemplo completo y comentado en examples/advanced/pdf-link-scroll/.

Documentos escaneados y OCR

ocr está desactivado por defecto y Potato solo lo lee en el modo de enlace. Cuando se activa, las palabras se extraen en el servidor y se usan para construir una capa de texto en el cliente, de forma que un escaneo sin texto incrustado también puede llevar anclas de texto. La opción toma false, true o auto, y Potato rechaza cualquier otro valor.

yaml
instance_display:
  fields:
    - key: pdf
      type: pdf
      display_options:
        annotation_mode: link
        ocr: auto
        ocr_dpi: 200
        ocr_lang: eng

Los tres ajustes se diferencian en cuándo se ejecuta la pasada. false usa solo la capa de texto incrustada, true ejecuta OCR siempre y auto recurre al OCR únicamente cuando la capa de texto incrustada vuelve vacía. En un corpus mixto conviene auto, porque el OCR es lento y necesita Tesseract instalado. ocr_dpi controla la resolución a la que se rasteriza cada página antes de que el OCR la lea, y subirlo cuesta tiempo en cada página. ocr_lang toma un código de idioma de Tesseract y su valor por defecto es eng.

Opciones de visualización

OpciónPor defectoEfecto
view_modescrollscroll, paginated o side-by-side
max_height700Altura del contenedor en píxeles
max_widthningunoAnchura del contenedor
text_layertrueHabilita la selección de texto
show_page_controlstrueControles de navegación entre páginas
initial_page1Página que se muestra primero
zoomautoauto, page-fit, page-width o un porcentaje
annotation_modespanspan, bounding_box o link
bbox_min_size10Caja más pequeña aceptada, en píxeles
bbox_colorsningunoColores de caja por etiqueta
show_bbox_labelstrueDibuja las etiquetas sobre las cajas
thumbnail_sidebartrueMiniaturas de página en la vista paginada
enable_text_anchorstrueSpans de texto utilizables como anclas de enlace
enable_region_anchorstrueCajas de región utilizables como anclas de enlace
anchor_schemapdf_anchorsEsquema registrado en las anclas
link_schemapdf_linksEsquema registrado en los enlaces
ocrfalsefalse, true o auto
ocr_dpi200Resolución de renderizado para el OCR
ocr_langengCódigo de idioma de Tesseract

Archivos Word y Markdown

Un archivo DOCX o Markdown usa en su lugar la visualización document, que conserva la estructura de encabezados y párrafos del documento y sí acepta span_target. Lee annotation_mode con valor span o bounding_box, y show_outline construye un índice a partir de los encabezados del cuerpo. Potato pasa el marcado renderizado por una lista de permitidos antes de que llegue a quien anota, así que un campo del corpus que lleve una etiqueta ejecutable queda eliminado en vez de ejecutarse.

yaml
instance_display:
  fields:
    - key: report
      type: document
      label: "Report"
      display_options:
        show_outline: true
        max_height: 600

Lecturas adicionales