Skip to content

PDF 주석 달기

Potato의 pdf 디스플레이 타입으로 PDF에 주석을 답니다. 스팬 하이라이트, 페이지 위 바운딩 박스, 페이지 간 연결, 스캔 파일용 OCR을 다룹니다.

pdf 디스플레이는 PDF.js로 브라우저에서 PDF를 렌더링하고, 주석 표면을 미리 추출한 텍스트가 아니라 렌더링된 페이지 위에 올립니다. 작업자는 단, 표, 그림, 페이지 나눔이 그대로 살아 있는 실제 문서를 보고 그 자리에서 레이블을 답니다. 이 디스플레이가 요구하는 키는 PDF 경로나 URL을 담은 필드 하나뿐이며, 나머지는 모두 디스플레이 옵션입니다.

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

view_mode는 scroll, paginated, side-by-side를 받습니다. 연속 스크롤은 모든 페이지를 한 컨테이너에 쌓으므로, 주석이 페이지 나눔을 가로질러야 할 때 중요합니다. 페이지 단위 보기는 탐색 컨트롤과 함께 한 번에 한 페이지씩 보여 주며, 작업자가 페이지별로 작업하는 긴 문서에 맞습니다.

세 가지 주석 모드

annotation_mode는 작업자가 무엇을 그릴 수 있는지 결정하며, 겉모습이 아니라 작업 자체를 바꾸는 옵션입니다. 기본값은 span입니다.

모드작업자가 하는 일앵커 대상
span텍스트를 선택하고 레이블을 적용PDF.js 텍스트 레이어
bounding_box페이지 어디에나 상자를 그림페이지 좌표
link앵커를 표시한 뒤 서로 연결텍스트 스팬과 페이지 영역

스팬 모드는 PDF에 텍스트 레이어가 있어야 동작합니다. 워드 프로세서나 조판 시스템에서 생성한 PDF에는 있고, 스캔본에는 없습니다. 바운딩 박스 모드는 텍스트 레이어에 의존하지 않으므로, 스캔한 페이지도 텍스트 추출 없이 영역 단위로 레이블을 달 수 있습니다.

pdf 디스플레이는 다른 디스플레이가 쓰는 .text-content 래퍼 대신 PDF.js 텍스트 레이어를 통해 스팬을 앵커하므로 span_target 플래그를 받지 않습니다. 스팬 주석 자체는 PDF 자체의 텍스트 레이어를 통해 그대로 동작합니다.

페이지 간 연결

링크 모드는 2쪽의 주장이 9쪽의 그림에 근거하는 경우처럼 여러 페이지에 걸친 관계를 위한 것입니다. 작업자는 먼저 앵커를 표시한 다음 그 사이에 유형이 지정된 링크를 그리며, Potato는 앵커와 링크를 서로 다른 스키마 이름으로 기록합니다.

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와 allowed_target_labels는 한 링크 유형이 어떤 앵커를 이을 수 있는지 제한합니다. 이렇게 하면 지침이 작업자가 외워야 할 것이 아니라 인터페이스가 강제하는 것이 됩니다. 위와 같이 설정한 refers_to 링크는 claim에서만 시작할 수 있고 figure에서만 끝날 수 있으므로, 그림에서 주장 쪽으로 그린 링크는 거부됩니다. same_as 같은 대칭 관계에는 directed: false를 설정하십시오.

앵커는 두 종류이며 각각 따로 끌 수 있습니다. enable_text_anchors는 텍스트 스팬 하이라이트를, enable_region_anchors는 영역 상자 그리기를 허용하며, 후자는 그림이나 표에 필요합니다. 완전한 실습 예제가 업스트림의 examples/advanced/pdf-link-scroll/에 함께 제공됩니다.

스캔 문서와 OCR

ocr는 기본적으로 꺼져 있으며, Potato는 이 옵션을 링크 모드에서만 읽습니다. 설정하면 단어를 서버 쪽에서 추출해 클라이언트 텍스트 레이어를 만들기 때문에, 내장 텍스트가 없는 스캔본도 텍스트 앵커를 가질 수 있습니다. 이 옵션은 false, true, auto를 받으며, Potato는 그 밖의 값을 거부합니다.

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

세 설정은 처리가 언제 실행되는지에서 갈립니다. false는 내장 텍스트 레이어만 사용하고, true는 항상 OCR을 실행하며, auto는 내장 텍스트 레이어가 비어서 돌아올 때에만 OCR로 넘어갑니다. OCR은 느리고 Tesseract 설치가 필요하므로 혼합 코퍼스에서는 auto를 택하십시오. ocr_dpi는 OCR이 읽기 전에 각 페이지를 래스터화하는 해상도를 제어하며, 값을 올리면 모든 페이지에서 시간이 더 듭니다. ocr_lang은 Tesseract 언어 코드를 받고 기본값은 eng입니다.

디스플레이 옵션

옵션기본값효과
view_modescrollscroll, paginated, side-by-side
max_height700컨테이너 높이(픽셀)
max_width없음컨테이너 너비
text_layertrue텍스트 선택을 활성화
show_page_controlstrue페이지 탐색 컨트롤
initial_page1처음 표시되는 페이지
zoomautoauto, page-fit, page-width 또는 백분율
annotation_modespanspan, bounding_box, link
bbox_min_size10허용되는 가장 작은 상자(픽셀)
bbox_colors없음레이블별 상자 색
show_bbox_labelstrue상자 위에 레이블을 그림
thumbnail_sidebartrue페이지 단위 보기의 페이지 썸네일
enable_text_anchorstrue텍스트 스팬을 링크 앵커로 사용 가능
enable_region_anchorstrue영역 상자를 링크 앵커로 사용 가능
anchor_schemapdf_anchors앵커에 기록되는 스키마
link_schemapdf_links링크에 기록되는 스키마
ocrfalsefalse, true, auto
ocr_dpi200OCR 렌더링 해상도
ocr_langengTesseract 언어 코드

Word 및 Markdown 파일

DOCX나 Markdown 파일은 대신 document 디스플레이를 사용합니다. 이 디스플레이는 문서의 제목과 문단 구조를 유지하고 span_target도 받습니다. annotation_mode는 span 또는 bounding_box로 읽으며, show_outline은 본문의 제목에서 목차를 만듭니다. Potato는 렌더링된 마크업을 작업자에게 전달하기 전에 허용 목록을 통과시키므로, 실행 가능한 태그를 담은 코퍼스 필드는 실행되지 않고 제거됩니다.

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

더 읽어보기