Skip to content

estimate_pages: 외부 실문서 3종의 중첩 표·페이지 경계 배치 지원 #307

Description

@airmang

외부 실문서 3개에서 hwpx.experimental.estimate_pages()가 복잡한 표 배치를 계산하지 못하고 pages=None을 반환합니다. SDK의 쪽 배치 지원 확대를 위한 재현 사례로 등록합니다. 현재 명시된 미지원 동작이며, 표 읽기·셀 편집·저장 실패로 분류하지 않습니다.

검사 대상

  • GitHub main: 97670eb2462e106134633acd78a8097d96db0fdd (2026-09-30 검사).
  • Python 3.13.13 / macOS / 독립 clone 및 가상환경.
  • 당시 최신 공개 release는 v6.6.0이나, 검사한 main에는 이후 미발행 변경이 포함됩니다. PyPI wheel에서 재현했다고 주장하지 않습니다.

재현

해당 커밋의 repository root에서 실행합니다. 입력은 이미 저장소에 포함되어 있어 별도 다운로드가 필요 없습니다.

uv run --extra test python - <<'PY'
from hwpx.experimental import estimate_pages

paths = (
    "tests/fixtures/m2_corpus/form_002.hwpx",
    "tests/fixtures/m105_evalplan/blank_form_3hak.hwpx",
    "tests/fixtures/hwpxlib_corpus/error__20230818__test.hwpx",
)
for path in paths:
    result = estimate_pages(path)
    print(path, "pages=", result.pages, "unsupported=", result.unsupported)
PY

실측 결과(3건 모두 pages=None):

입력 unsupported 미지원 배치
m2_corpus/form_002.hwpx section 0: a page break in a flowing table row holding a table 중첩 표를 품은, 본문과 함께 흐르는 표 행의 페이지 분할
m105_evalplan/blank_form_3hak.hwpx section 0: a page break or another object beside a top-and-bottom table's band 위아래 배치 표 영역 주변의 페이지 분할 또는 다른 개체
hwpxlib_corpus/error__20230818__test.hwpx section 0: a nested table 해당 문서의 중첩 표

입력 SHA-256

form_002.hwpx                5ab8f7c368e02538f75f1cd2bd82bbd8de2f925a54ba7b38ec9395b2cdb804d4
blank_form_3hak.hwpx         2288ef6e1501f3a88aabcfe6c4ac8af0001af68e909afba810d0be5e042580cc
error__20230818__test.hwpx    a18a83005f1956366d48493d34cfeb93775ab9fd37084a37f84af6c712eb7997

외부 입력 출처는 tests/fixtures/m2_corpus/NOTICE.md 및 tests/fixtures/hwpxlib_corpus/manifest.json에서 확인할 수 있습니다.

처리 요청과 완료 기준

  1. 각 입력에서 거부되는 정확한 표·행·문단 배치를 확인하고, 지원 가능한 단위로 나누어 처리해 주세요.
  2. 해당 배치를 지원한 뒤에는 원본과 대표 셀 편집본의 페이지 수·줄 위치를 실제 한컴으로 관찰하고 회귀검사를 추가해 주세요. 원본의 줄 캐시에만 의존하는 지원인지, 편집으로 캐시가 무효화되어도 지원되는지 구분해 주세요.
  3. 지원하기 어려운 배치는 pages=None과 구체적인 이유를 유지하고, 지원 범위·남은 제한을 문서에 남겨 주세요. 미지원 이유를 없애는 것만으로 완료하지 않습니다.

기존 관련 회귀 자산은 tests/test_layout_page_estimate.py입니다. 한컴 저장본과 캐시 제거본을 비교하는 테스트 및 한 페이지보다 큰 병합 행·중첩 표 행 분할의 미지원 테스트가 있습니다.

함께 확인한 검증 범위

  • 표·FormFit·쪽 배치·셀 병합/분할·여백/테두리 관련 기존 테스트: 543 passed / 2 skipped. 건너뛴 항목은 실한컴 opt-in smoke와 confident font shrink 대상 부재입니다.
  • 외부 fixture 중 표가 있는 17문서: 표 387개, 병합 셀 1,213개, 중첩 표 25개.
  • 17문서 모두 무편집 저장 및 문서당 셀 하나에 같은 값 다시 쓰기에서 ZIP member payload가 동일했습니다.
  • 문서당 셀 하나의 새 값 쓰기·저장·재열기는 17/17 구조 검사 통과: 표/병합 셀/중첩 표 개수 유지, 새 값 1회 존재, 재열기 확인. 변경 member는 해당 section XML뿐입니다.
  • 17개 중 14개는 쪽 수를 반환했고 위 3개는 미지원입니다. 14개의 반환값을 실한컴 정답으로 채점한 것은 아닙니다.

이번 새 편집 출력은 실한컴으로 새로 렌더하지 않았습니다. 따라서 글자 가림·잘림 및 모든 복잡한 표의 시각적 정확성을 검증한 결과가 아닙니다. 셀 쓰기의 split_paragraphs=True가 내부 표를 포함한 기존 문단을 재작성하는 동작은 문서화된 계약이므로 이 이슈의 결함으로 포함하지 않습니다.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions