Skip to content

Anotação de PDF

Anote PDFs no Potato com o tipo de exibição pdf, com destaque de spans, caixas delimitadoras sobre a página, ligações entre páginas e OCR para arquivos digitalizados.

A exibição pdf renderiza um PDF no navegador com o PDF.js e coloca a superfície de anotação sobre a página renderizada, e não sobre texto extraído de antemão. Quem anota vê o documento real, com suas colunas, tabelas, figuras e quebras de página intactas, e o rotula ali mesmo. A exibição exige uma única chave, o campo que contém o caminho ou a URL do PDF, e todo o resto é opção de exibição.

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

view_mode aceita scroll, paginated ou side-by-side. A rolagem contínua empilha todas as páginas em um só contêiner, o que importa quando uma anotação precisa atravessar uma quebra de página. A visualização paginada mostra uma página por vez com controles de navegação e serve para documentos longos, em que se trabalha página a página.

Três modos de anotação

annotation_mode decide o que quem anota pode desenhar, e é a opção que muda a tarefa em si, não a aparência dela. O padrão é span.

ModoO que quem anota fazAncorado em
spanSeleciona texto e aplica um rótuloA camada de texto do PDF.js
bounding_boxDesenha uma caixa em qualquer ponto da páginaCoordenadas da página
linkMarca âncoras e depois as conectaSpans de texto e regiões da página

O modo span depende de o PDF trazer uma camada de texto, o que vale para qualquer PDF gerado por um processador de texto ou um sistema de composição tipográfica e não vale para uma digitalização. O modo de caixa delimitadora não depende dela, então uma página digitalizada ainda pode ser rotulada por região sem nenhuma extração de texto.

Como a exibição pdf ancora spans pela camada de texto do PDF.js e não pelo invólucro .text-content que as outras exibições usam, ela não aceita a flag span_target. A anotação de spans continua funcionando, pela camada de texto do próprio PDF.

Ligações entre páginas

O modo de ligação serve para relações que atravessam páginas, como uma afirmação na página 2 que se apoia em uma figura na página 9. Quem anota marca primeiro as âncoras e depois traça ligações tipadas entre elas, e o Potato registra as âncoras e as ligações sob nomes de esquema separados.

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 e allowed_target_labels restringem quais âncoras um tipo de ligação pode unir, e é assim que uma diretriz passa a ser algo imposto pela interface em vez de algo que quem anota precisa lembrar. Uma ligação refers_to configurada como acima só pode começar em um claim e só pode terminar em um figure, portanto uma ligação traçada de uma figura de volta a uma afirmação é recusada. Defina directed: false para uma relação simétrica como same_as.

Há dois tipos de âncora e ambos podem ser desligados de forma independente. enable_text_anchors permite destacar um span de texto e enable_region_anchors permite desenhar uma caixa de região, que é o que uma figura ou uma tabela exige. Um exemplo completo e trabalhado vem no repositório de origem em examples/advanced/pdf-link-scroll/.

Documentos digitalizados e OCR

ocr vem desligado por padrão, e o Potato só lê essa opção no modo de ligação. Quando está definida, as palavras são extraídas no servidor e usadas para construir uma camada de texto no cliente, de modo que uma digitalização sem texto incorporado também pode receber âncoras de texto. A opção aceita false, true ou auto, e o Potato rejeita qualquer outro valor.

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

As três configurações diferem no momento em que a passagem é executada. false usa apenas a camada de texto incorporada, true sempre executa OCR e auto recorre ao OCR somente quando a camada de texto incorporada volta vazia. Prefira auto em um corpus misto, porque o OCR é lento e exige o Tesseract instalado. ocr_dpi controla a resolução com que cada página é rasterizada antes de o OCR lê-la, e aumentá-la custa tempo em todas as páginas. ocr_lang aceita um código de idioma do Tesseract e tem eng como padrão.

Opções de exibição

OpçãoPadrãoEfeito
view_modescrollscroll, paginated ou side-by-side
max_height700Altura do contêiner em pixels
max_widthnenhumaLargura do contêiner
text_layertrueHabilita a seleção de texto
show_page_controlstrueControles de navegação entre páginas
initial_page1Página mostrada primeiro
zoomautoauto, page-fit, page-width ou uma porcentagem
annotation_modespanspan, bounding_box ou link
bbox_min_size10Menor caixa aceita, em pixels
bbox_colorsnenhumaCores de caixa por rótulo
show_bbox_labelstrueDesenha os rótulos sobre as caixas
thumbnail_sidebartrueMiniaturas de página na visualização paginada
enable_text_anchorstrueSpans de texto utilizáveis como âncoras de ligação
enable_region_anchorstrueCaixas de região utilizáveis como âncoras de ligação
anchor_schemapdf_anchorsEsquema registrado nas âncoras
link_schemapdf_linksEsquema registrado nas ligações
ocrfalsefalse, true ou auto
ocr_dpi200Resolução de renderização para o OCR
ocr_langengCódigo de idioma do Tesseract

Arquivos Word e Markdown

Um arquivo DOCX ou Markdown usa a exibição document, que preserva a estrutura de títulos e parágrafos do documento e aceita span_target. Ela lê annotation_mode com span ou bounding_box, e show_outline monta um sumário a partir dos títulos no corpo. O Potato passa a marcação renderizada por uma lista de permissões antes que ela chegue a quem anota, então um campo do corpus que traga uma tag executável é removido em vez de executado.

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

Leitura adicional