Skip to content

[HWP5/변환] convert/convert_to_editable 경로 그림·페이지 손실 (KTX 27→1쪽; serialize_document 직접은 보존) #1555

Description

@planet6897

배경

Task #1552 게이트 신설 과정에서, convert/convert_to_editable 경로가 일부 HWP5 문서의 그림·페이지를 손실시킴이 확인됐다. 직접 serialize_document(= export_hwp_native)는 같은 문서를 완전 보존하므로, 손실은 변환(editable) 경로에 한정된다. F1(#1554, serialize_document 자체 BinData 드롭)과 별개다.

증거 — KTX.hwp (배포용 아님, 원본 27쪽·BinData 3)

경로 KTX BinData KTX 페이지(한글 2024)
원본 3 27
serialize_document 직접(#1552 게이트) 3 보존 27 = 27 보존
convert(convert_to_editable 경유) 0 (전 소실) 27 → 1 붕괴

convert 저장본은 한글에서 무결성 오류 없이 열리나 1쪽으로 붕괴하고 그림이 모두 사라진다.

재현

rhwp convert samples/basic/KTX.hwp /tmp/ktx.rt.hwp
# 비교: olefile 로 BinData 0 확인, 한글로 열어 1쪽 확인
# 대조: rhwp hwp5-roundtrip samples/basic/KTX.hwp  → PASS (serialize_document 직접은 보존)

의심 지점 (root-cause 필요)

convert CLI(convert_hwp)는 직접 parse_document+serialize_document 가 아니라 다음 경로를 탄다:

  • rhwp::wasm_api::HwpDocument::from_bytes(별도 파서 진입) →
  • convert_to_editable_native()Document::convert_to_editable() (src/model/document.rs:346) →
  • export_hwp_with_adapter()convert_if_hwpx_source() (src/document_core/converters/hwpx_to_hwp.rs:1550, HWP 출처는 no-op) → serialize_document.

KTX 는 배포용 아님·HWP 출처이므로 어댑터는 no-op 이어야 하나 손실 발생 → wasm_api::HwpDocument 파스 경로 또는 convert_to_editable()bin_data_content·페이지 구조(IR)를 변형하는지 점검 필요. DocumentCore(게이트 경로)와 IR 차이 비교가 시작점.

수용 기준

  • convert 산출물이 KTX(및 유사 문서)의 BinData·페이지를 보존(한글 페이지수 원본과 일치, olefile BinData 멀티셋 보존).
  • 가능하면 게이트에 convert 경로 분기(C3' 외부 페이지/배포용)를 추가하거나, 회귀 재현 케이스 등록.

분리

관련: #1552, #1554, PR #1553. 근거: output/poc/fidelity/report.md, mydocs/working/task_m100_1552_stage2.md.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions