feat: 페이지 여백 (PageMargin) - #50
Merged
Merged
Conversation
여백이 아무도 닿을 수 없는 상수 둘(좌우 48 · 상하 40)이었다. 호스트는 용지는 고를 수 있어도 그 위 어디까지 쓸지는 못 정했고, Word·HWP에서 온 RTF는 자기 여백이 버려져 저자가 보던 것과 다르게 쪽이 나뉘었다. - RichEditor.PageMargin(Thickness, DIP, 네 변) + PageSetup.Margin + PageSetup.DefaultMargin. 네 변으로 낸 건 사용자 결정(2026-09-20) — Word·HWP·RTF가 전부 네 변이고, RTF 쓰기는 이미 \margl\margr\margt\margb 넷을 내보내고 있었다(값만 2개에서 복사). - 문서에 속한다: JSON/.flow에 저장(기본값이면 생략 — 여백을 건드리지 않은 문서는 바이트 그대로)하고 불러올 때 적용한다. 용지 크기가 가는 길과 같다. - RTF는 쓰기만 하던 것을 이제 읽는다(사용자 결정). 문서 수준과 섹션 수준(HWP가 읽는 쪽) 둘 다. - 본문 자리가 남지 않는 여백은 거부한다: 음수·NaN·무한대, 또는 마주 보는 두 변의 합이 용지 이상. 속성은 coerce에서 막고(XAML·바인딩에서도 들어오므로 열두 군데 읽는 자리마다 가드하지 않는다) 마지막 쓸 수 있던 값을 유지하며, 파일은 네 변 모두 기본값으로 되돌린다(절반만 적용하지 않는다). - RTF에서 여백이 용지보다 먼저 올 수 있다. 그때는 A4 폴백으로 검사하고, 용지가 확정되면 다시 검사한다 — A4엔 맞고 A5엔 안 맞는 여백이 있다. PagePadX/PagePadY 상수는 인스턴스 PagePadLeft/Top/Right/Bottom으로 바뀌었다(A4ContentWidth/Height도 상수일 수 없어 속성으로). 읽던 자리 12곳과 테스트 3곳을 옮겼다. 테스트 PageMarginTests 16개(1135 → 1151), 렌더 41 그대로, 클린 빌드 0 warn. 공개 API 추가 6. 반증 5종 전부 의도한 테스트만 빨강: 속성 coerce 제거 · 용지 확정 후 재검사 제거 · JSON 검증 제거 · 문서의 여백 적용 제거 · RTF \margl 읽기 제거. ⚠ 첫 판 테스트 3개가 제 산수 때문에 빨갰다(용지 twips 값이 표와 2 twips 넘게 달라 매칭 실패, 문단 DTO에도 MarginRight가 있어 문자열 검사가 걸림). 테스트를 고쳤고 제품 코드는 그대로다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This was referenced Sep 20, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
백로그의 "페이지 여백 API". 1.3.0 계획 3건의 마지막이다(#48 표 API, #49 단축키 표에 이어서).
여백이 아무도 닿을 수 없는 상수 둘(좌우 48 · 상하 40 DIP)이었다. 호스트는 용지는 고를 수 있어도 그 위 어디까지 쓸지는 정할 수 없었고, Word·HWP에서 온 RTF는 자기 여백이 버려져 저자가 보던 것과 다르게 쪽이 나뉘었다.
표면
.flow에 저장하고 불러올 때 적용한다 — 용지 크기가 가는 길 그대로. 기본값이면 필드를 생략하므로 여백을 건드리지 않은 문서의 바이트는 그대로다.\margl\margr\margt\margb넷을 내보내고 있었고(값만 2개에서 복사), 읽기는 문서 수준과 섹션 수준(HWP가 읽는 쪽) 둘 다 받는다.본문 자리가 남지 않는 여백
음수·NaN·무한대, 또는 마주 보는 두 변의 합이 용지 이상. 이 값이 들어오는 길이 둘이라 양쪽에서 막는다.
coerce에서 막고 마지막 쓸 수 있던 값을 유지한다. XAML·바인딩에서도 들어오므로, 읽는 자리 열두 곳마다 가드하는 대신 들어오는 지점에서 한 번 막는다.정리된 것
PagePadX/PagePadY상수 → 인스턴스PagePadLeft/Top/Right/Bottom(여백이 문서 설정이 됐으니 상수일 수 없다).A4ContentWidth/Height도 같은 이유로 속성. 읽던 자리 12곳과 테스트 3곳을 옮겼다.검증
PageMarginTests16개 — 유닛 1135 → 1151, 렌더 41 그대로, 클린 빌드 0 warn.\margl읽기 제거.11906vs 표의11910), 문단 DTO에도MarginRight가 있어 문자열 검사가 걸렸다. 테스트를 고쳤고 제품 코드는 그대로다.공개 API 추가 6건(제거·시그니처 변경 없음).
실기 확인이 필요한 부분: 페이지 뷰에서 여백을 바꿨을 때 머리글·바닥글·쪽번호가 띠 안에 제대로 앉는지, 인쇄·PDF 출력의 여백이 화면과 같은지.
🤖 Generated with Claude Code