Skip to content

다크모드 피드백 PDF 가 검은 배경으로 저장되던 문제 - #193

Merged
i3months merged 1 commit into
devfrom
fix/pdf-dark-mode
Aug 20, 2026
Merged

다크모드 피드백 PDF 가 검은 배경으로 저장되던 문제#193
i3months merged 1 commit into
devfrom
fix/pdf-dark-mode

Conversation

@i3months

Copy link
Copy Markdown
Member

문제

피드백 리포트의 PDF 다운로드html2canvas 로 DOM 을 래스터화한다. 이 라이브러리는 지금 화면에 보이는 대로 캡처하므로, 다크모드 사용자가 받는 PDF 는 검은 배경에 밝은 글씨다.

  • 인쇄하면 페이지 전면이 잉크로 덮인다
  • 멘토·스터디원에게 보내는 용도로 못 쓴다
  • 피드백 리포트는 면접의 최종 산출물이라 PDF 자체가 결과물이다

수정

downloadElementAsPdf 가 캡처하는 동안만 SEED 라이트 팔레트를 강제하고 finally 로 원래 모드를 되돌린다.

  • isDarkApplied() 가 false 면 분기 자체를 타지 않는다 (라이트 사용자는 리페인트 없음)
  • applyColorMode('light-only')한 프레임 대기 — CSS 변수 재계산이 화면에 반영되기 전에 캡처하면 이전 색이 찍힌다
  • 복원은 finally — 캡처가 던져도 사용자 화면이 라이트로 남지 않는다
  • 원래 모드는 readStoredColorMode() 로 읽는다 (system 이었으면 system 으로 복귀)

테스트

downloadPdf.test.ts 3 케이스 (jsPDF·html2canvas-pro 는 mock, 캡처 시점의 <html> 속성을 기록해 검증)

  • 다크모드여도 라이트 팔레트로 캡처한다
  • 캡처가 끝나면 원래 컬러 모드로 되돌린다
  • 라이트 모드에서는 팔레트를 건드리지 않는다

수정 전 코드에 대해 첫 케이스만 실패하는 것을 확인했다 (나머지 둘은 원래도 통과 — 회귀 방지용).

남은 한계 (이번 범위 밖)

페이지 분할이 이미지 높이를 A4 로 균등 절단하는 방식이라 문단·표 중간이 잘릴 수 있다. 별도 이슈로 다룬다.

html2canvas 는 '지금 화면에 보이는 대로' 캡처한다. 다크모드 사용자가 리포트를
PDF 로 내려받으면 검은 배경에 밝은 글씨인 문서가 나온다 — 인쇄하면 잉크만 먹고
남에게 보내기도 어렵다. 피드백 리포트는 면접의 최종 산출물이라 PDF 가 곧 결과물이다.

캡처하는 동안만 SEED 라이트 팔레트를 강제하고(`applyColorMode('light-only')`)
finally 로 원래 모드를 복원한다. CSS 변수 재계산이 화면에 반영되도록 한 프레임
기다린 뒤 캡처한다 — 바로 찍으면 이전 색이 그대로 들어간다.
라이트 사용자는 분기 자체를 타지 않아 불필요한 리페인트가 없다.
@i3months
i3months merged commit 1199eec into dev Aug 20, 2026
5 checks passed
@i3months
i3months deleted the fix/pdf-dark-mode branch August 20, 2026 07:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant