Repository navigation
Closed
Description
증상
한 문단에 글자처럼 취급한 그림과 떠 있는 위아래(TopAndBottom) 글상자가 함께 있는 문서를 편집한 뒤 exportHwpx()로 저장하고 rhwp로 다시 열면, 저장 전 화면과 배치가 달라진다.
- 그림 줄이 그림 높이만큼 커지지 않는다. 그림이 줄 위쪽으로 튀어나오거나(fix(layout): 같은 문단의 위아래 개체는 문단 흐름 시작을 차지할 때만 글자처럼 그림을 아래로 보낸다 (#8168) #8206 head), 줄 밖으로 내려간다(devel).
- 「다음 문단」이 위아래 글상자와 그림 줄을 피하지 않고 첫 줄 바로 아래로 올라온다.
같은 편집을 exportHwp()로 저장해 다시 열면 저장 전과 같다. 그림만 있는 문단은 HWPX로 다시 열어도 같다.
재현 (WASM API)
const d = HwpDocument.createEmpty(); d.createBlankDocument();
d.insertText(0, 0, 0, '앞 글 뒤 글');
d.splitParagraph(0, 0, 7); d.insertText(0, 1, 0, '다음 문단');
const p = JSON.parse(d.insertPicture(0, 0, 2, '', jpgBytes, 8504, 4447, 1000, 523, 'jpg', '그림'));
d.setPictureProperties(0, p.paraIdx, p.controlIdx, JSON.stringify({ treatAsChar: true }));
const pd = JSON.parse(d.getPageDef(0));
const s = JSON.parse(d.createShapeControl(JSON.stringify({
sectionIdx: 0, paraIdx: 0, charOffset: 7, width: 17008, height: 5669,
horzOffset: pd.marginLeft, vertOffset: 15000, treatAsChar: false,
textWrap: 'TopAndBottom', shapeType: 'textbox' })));
d.insertTextInCell(0, s.paraIdx, s.controlIdx, 0, 0, 0, '중요');
const again = new HwpDocument(d.exportHwpx()); // ← 배치가 바뀐다jpgBytes는 rhwp-studio/public/samples/images/moogung.jpg이다. #8168 재현과 같은 편집이다.
getPageControlLayout(0)·getPageTextLayout(0) 값(96dpi px):
| 빌드 | 문서 | 편집 직후 | HWPX 다시 열기 | HWP 다시 열기 |
|---|---|---|---|---|
devel 4e690c930 |
그림만 | 그림 y132–192, 다음 문단 y200 | 같음 | 같음 |
devel 4e690c930 |
그림 + 위아래 글상자 | 그림 y215–275, 다음 문단 y283 | 그림 y176–235, 다음 문단 y154 | 편집 직후와 같음 |
#8206 head 6e59ef78f |
그림 + 위아래 글상자 | 그림 y132–192, 다음 문단 y283 | 그림 y93–152, 다음 문단 y154 | 편집 직후와 같음 |
(devel의 편집 직후 그림 y215는 #8168 결함이고, #8206이 고친다. 이 이슈는 HWPX로 다시 열 때의 차이다.)
확인한 원인 범위
- devel의 HWPX 저장은 편집으로 줄 분할이 바뀐 문단의
linesegarray를 의도적으로 뺀다(dirty_text_partition_omits_hwpx_linesegarray, 한/글이 다시 계산하게 하는 설계). 위 문서의 첫 문단에는linesegarray가 없다. - 그래서 rhwp가 다시 열면 첫 문단을 저장 줄 정보 없이 재조판한다. 그림만 있는 문단은 이 재조판에서 줄 높이가 맞지만, 같은 문단에 위아래 글상자가 있으면 그림 줄 높이와 다음 문단 위치가 틀린다.
- 재조판 경로의 어느 단계(줄 높이 계산 또는 위아래 개체 회피)인지는 아직 확인하지 않았다.
독립 기준
- 기준은 같은 문서의 저장 전 rhwp 배치와 HWP 저장본 재열기 배치다. 둘은 서로 같다.
- 한/글 2024 Print PDF(
pdf/issue8168/tac_picture_with_topandbottom_textbox-2024.pdf, 같은 편집의 이전 HWPX 저장본)에서는 「앞 [그림] 글 뒤 글」이 한 줄이고, 글상자는 그 줄 아래, 「다음 문단」은 글상자 아래에 있다. - 입력 생성 방식: 위 스크립트로 만든 합성 입력이다.
영향
- 편집한 문서를 HWPX로 저장한 뒤 rhwp(studio 포함)에서 다시 열면 그림과 다음 문단이 겹치거나 어긋나 보인다. 한/글에서 여는 경우는 한/글이 줄을 다시 계산하므로 해당하지 않는다(미확인).
- #8206의 미검증 합성 입력은 이 때문에 HWPX 대신 HWP로 만들었다.
범위 메모
- 저장 줄 정보가 없는 문단의 재조판(줄 높이·위아래 개체 회피)에 해당한다. 수정 시 Native/fresh WASM Visual Sweep 전 범위 검증이 필요하다.
- 관련: [layout] 편집으로 넣은 글자처럼 취급 글상자가 줄 안이 아니라 줄 위로 넘겨 그려진다 — 한컴은 줄을 상자 높이만큼 내림 (합성 입력) #8167, [layout] 같은 문단의 「위아래」 떠 있는 개체가 글자처럼 취급 그림을 줄 밖으로 끌어내려 개체와 겹친다 (합성 입력) #8168(PR fix(layout): 글자처럼 취급 도형이 자기 줄을 키우고 글자는 그 줄의 기준선에 놓인다 (#8167) #8202, fix(layout): 같은 문단의 위아래 개체는 문단 흐름 시작을 차지할 때만 글자처럼 그림을 아래로 보낸다 (#8168) #8206), HWPX serializer: lineseg 원본 보존 — 셀·글상자 합성 lineseg 제거 및 본문 값 변형 해소 #1380(HWPX lineseg 원본 보존).
Metadata
Metadata
Assignees
Labels
No labels
Activity
fix(layout): 저장 줄 없는 글자처럼 그림 호스트가 줄 폭 중립 부동 개체와 함께여도 현재 프레임에서 재조판된다 (e…
docs(report): edwardkim#8271 HWPX 다시 열기 수정 전후 Native/fresh WASM revie…
fix(layout): 저장 줄 없는 글자처럼 그림 호스트가 줄 폭 중립 부동 개체와 함께여도 현재 프레임에서 재조판된다 (e…
docs(report): edwardkim#8271 HWPX 다시 열기 수정 전후 Native/fresh WASM revie…
planet6897 commentedon Oct 28, 2026
PR #8283 가 #8348(통합
c76d87cfda)로 devel 에 반영되어 닫습니다.devel
f291d772a1재측정:issue_8271_hwpx_reopen_tac_picture_float·issue_8168_topandbottom_sibling_tac_picture통과fix(layout): 저장 줄 없는 글자처럼 그림 host 는 어울림 부동 도형과 함께여도 현재 프레임에서 재조판한다 (e…