찍기 전에 보고, 모아서 찍는다 — 인쇄를 더하다 (ICEPDF v1.7.0)
다 만든 줄 알았는데 정작 인쇄가 없었다. Ctrl+P로 미리보기를 띄우고, 한 장에 2·4·6·8쪽 모아찍기와 용지 방향까지. 그리고 '가로 1장이 왜 이렇게 비지?' 한마디에서 시작된 1쪽/모아찍기 로직 분리 이야기.
다 만든 줄 알았다. 그런데 누군가 PDF를 띄워놓고 당연하다는 듯 물었다. "인쇄는 어디서 해?" 없었다. 메뉴에도, 툴바에도, 단축키에도. 뷰어랍시고 만들어 놓고 정작 종이로 뽑는 길을 안 낸 것이다.
결론부터
이제 Ctrl+P를 누르면 인쇄 미리보기 창이 뜬다. 거기서
- 모아찍기 — 한 장에 1·2·4·6·8쪽
- 용지 방향 — 세로 / 가로
- 페이지 범위 — 전체 또는
1-5,8
를 고르고, 화면에 보이는 그대로 인쇄한다.
"보이는 대로 나와야 한다"
인쇄에서 가장 싫은 건 미리보기와 결과가 다른 것이다. 그래서 처음부터 원칙을 하나 정했다. 미리보기와 실제 인쇄가 똑같은 HTML을 쓴다.
각 페이지를 엔진(mupdf)으로 고해상도 그림으로 뜬 다음, 모아찍기 격자에 배치한 HTML 한 벌을 만든다. 그 HTML을 화면에선 미리보기로 보여주고, 인쇄할 땐 숨은 창에 그대로 띄워 출력한다. 둘이 같은 종이를 보니 어긋날 일이 없다.
PDF를 벡터 그대로 모아찍기(N-up)로 합치는 길도 있었지만, 엔진이 그걸 깔끔하게 지원하지 않아 위험했다. 글자가 약간 비트맵이 되더라도, 미리보기와 100% 일치하는 쪽을 택했다.
"가로 1장이 왜 이렇게 비지?"
용지 방향을 막 붙이고 났을 때였다. 세로로 된 문서를 가로 용지에 1장 뽑아 보니 좌우가 휑하게 비었다. 방향을 바꿔도 마찬가지였다.
원인은 내 욕심이었다. 방향 기능을 넣으면서 1장 인쇄까지 모아찍기 격자(여백·칸 간격·용지 방향)를 거치게 만든 것이다. 한 장만 뽑는데 굳이 격자에 끼워 넣으니, 세로 페이지가 가로 칸에서 좌우로 떠버렸다.
고치는 방향은 분명했다. 1장 인쇄와 모아찍기는 아예 다른 작업이다. 로직을 둘로 갈랐다.
- 1쪽(일반) — 페이지를 한 장에 여백 없이 꽉. 용지 방향은 페이지에 자동으로 맞춤. 세로 PDF는 세로 용지, 가로 PDF는 가로 용지로 나간다. A4 문서면 여백이 거의 0.
- 모아찍기(2·4·6·8쪽) — 격자에 배치하고, 용지 방향을 직접 고른다. 2쪽 + 가로면 좌우로 나란히.
사진을 같은 비율 액자에 끼우는 것과, 여러 사진을 한 액자에 격자로 거는 것. 애초에 다른 일이었다.
글자가 세로로 쪼개졌다
레이아웃에서도 한 번 넘어졌다. 1쪽일 때 방향 칸이 "자동(페이지에 맞춤)"으로 길어지자, 위쪽 설정 줄이 폭을 넘기면서 "인쇄·모아찍·기·취·소" 글자가 전부 세로로 깨졌다.
이참에 레이아웃을 크롬·아크로벳 인쇄창처럼 바꿨다. 왼쪽에 설정 패널, 오른쪽에 큰 미리보기. 설정이 세로로 줄 서니 글자가 깨질 일이 없고, 미리보기도 넓게 본다. 위쪽엔 "6쪽 · 2장 출력" 같은 요약도 띄웠다.
증거
말로만 "된다"고 하지 않으려 했다.
- 핵심 로직(범위 파서, 모아찍기 격자, 인쇄 HTML 생성) 단위 테스트 40건 통과
- 미리보기·모아찍기·용지 방향·1쪽 분리 E2E 14건 통과
- 타입체크·빌드 0 에러
네이티브 인쇄 다이얼로그까지는 자동으로 못 누르니, 그 한 칸은 직접 눈으로 확인했다.
남긴 것
벡터 텍스트로 또렷하게 뽑는 길, 소책자(접지) 인쇄, 페이지별 회전 — 이런 건 다음으로 미뤘다. 지금은 "찍기 전에 보고, 원하는 만큼 모아 찍는다"는 가장 기본을, 보이는 대로 나오게 하는 데까지.
설치파일(v1.7.0)을 새로 빌드했다. Ctrl+P. 그거 하나 누르면 된다.