Silverlight가 아직은 베타/알파 버전이라 많은 부분 부족함을 느끼고 있어요.
그 중에서 당장 가장 크게 느껴지는 문제점은 화면에 텍스트를 표시하는 TextBlock 엘리먼트에서 한글 폰트를 지원하지 않고 있다는 점인데요, http://uxkorea.net/blog_post_62.aspx 에 의하면 TextBlock 대신 Glyph 엘리먼트를 사용하면 한글 폰트도 사용 가능하다고 합니다. 테스트 해봤는데 잘 먹더군요.

하지만 Glyph는 TextBlock과는 그 성격이 약간 다른데요, 나중에 따로 포스팅 하겠지만 간단히 말해서 TextBlock은 일반적인 TextBox와 비슷하게 멀티 라인 텍스트와 텍스트 블럭내의 각각의 텍스트에 다른 폰트 설정을 추가할 수 있고 Glyph는 단순히 지정된 텍스트를 지정된 위치에 출력할 뿐입니다. 두 엘리먼트 모두 TrueType폰트만 표시가 가능하고요.

그래서 여러 라인을 출력할 때 Glyph는 각 라인마다 출력될 Top 좌표를 직접 계산해줘야 해서 보통 귀찮은게 아니에요. TextBlock은 멀티 라인을 사용할 때 각 라인은 기본적으로 폰트특성에 따라 자동 계산되죠.

구글링을 통한 대부분의 의견도 동아시아와 중동아시아의 폰트가 제대로 표시할 수 없다 였는데요, 일부는 특정 폰트가 정상적으로 표시된다는 의견도 있어서 테스트를 해봤습니다.

일단 시스템 내의 모든 TrueType 폰트 목록을 정리해서 테스트 페이지에 순서대로 영어, 숫자, 특수문자, 한글, 한자, 일본어, 중국어를 출력해보는거죠.
당연하겠지만 Silverlight는 웹 애플리케이션으로 사용자의 로컬 자원에 접근할 수 없어요. 폰트 목록 같은걸 가져오는건 동적으로 불가능해서 제 시스템에 설치된 200여개의 폰트 목록을 수작업으로 정리했습니다. ㅠ.ㅜ

출력할 텍스트 내용은
English 12345 한글문자열가나다라 ☆★○◎ 漢字家羅多螺 日本語にほんご 中国语你好吗
위와 같고요, 테스트한 동영상을 감상하시죠!


보시다시피 200개도 넘는 폰트 중에 한글을 지원하는건 Arial Unicode MS 뿐이었습니다.
요게 뭔가...하면 Wiki를 참고하세요. http://en.wikipedia.org/wiki/Arial_Unicode_MS
대략 특징을 요약하자면,
- 트루타입 유니코드 폰트
- 대부분의 Microsoft 코드 페이지를 지원
- 22메가!!
- Ascender Corporation에서 오직 MS에만 라이센스함

뭐 그나마도 지금 당장 써먹을 수 있는게 있으니 얼마나 다행인가 싶으시죠?

하지만 문제는 또 있어요.
역시 나중에 포스팅 할 꺼리지만(-_-) Silverlight는 폰트의 배포를 위한 다운로드 매커니즘을 지원해주고 있어요. 그래서 사용자의 PC에 내가 원하는 폰트를 배포하고 UI를 망치지 않고 표시해줄 수 있죠.

문제는 이 Arial Unicode MS 폰트의 크기가 무려 22메가에 달한다는 점이에요.
당연하죠. 웬만한 코드 페이지는 몽땅 표시해주는데 22메가면 오히려 작은 크기라고 할 수 있죠. New 굴림 폰트만해도 25메가나 되는데요 뭘.
그.러.나. 이게 웹을 통해 동적으로 배포된다고 생각해보세요. 22메가를 다운받을 동안 기다릴 사용자가 있을까요? 과연?

물론 1.0 정식 버전과 1.1(아마도)베타 버전에서는 이런 폰트 표시 문제가 해결될거라고 기대되지만, 아직도 문제는 더 있어요.
정식 버전에서 폰트 지원이 완벽하더라도 보통 한글 폰트는 용량이 무지하게 커요. 좀 예쁘다 싶은 폰트를 보면 죄다 5메가 이상이죠. 이건 한자 문화권의 어쩔 수 없는 문제이긴 하지만요.

하다못해 굴림/굴림체/돋움/돋움체/바탕/바탕체/궁서/궁서체/새굴림/맑은고딕 정도는 별도로 다운로드 받지 않더라도 세팅해서 사용할 수 있게 해줬으면 해요. 과연 어떻게 될까요? 저는 좀 비관적으로 보고 있지만요.


결론을 얘기해보자면 '한글은 현재 샘플/테스트용만 가능해요. 실제 서비스따위 아직은 무리라구요!'
airlover님의 트랙백에 의하면 Office에서 XPS문서로 저장했을 때 나온 결과물을 적절히 가공하여 Glyph와 .odttf라는 임시 폰트로 정리되어 용량도 비교적 작고 자유로운 편집(Office에서 편집하니까)이 가능하다고 하네요.

수작업이 좀 많이 들어가긴 하지만 이 방법이라면 실제 서비스도 가능하다고 봅니다. (다만 뭔가 디자인적인 수정이 생기면 괴롭긴 마찬가질 것 같아요.)

정말이지 MS 제품군간의 연동으로 얻을 수 있는 시너지란;;;

아래에 테스트에 사용한 프로젝트를 첨부했어요.
물론 100메가도 넘는 폰트들을 전부 첨부하지 못했고 저용량 폰트 몇개만 넣었어요.
테스트 하실 땐 프로젝트 폴더에 테스트하길 원하는 폰트들을 Fonts.zip으로 압축해서 복사해놓고 프로젝트의 Page.xaml.cs에서 _fontList 변수에 해당 폰트의 이름을 적어주세요.
테스트를 위해 날림으로 작성한 코드라 별도의 설명은 붙이지 않았으니까 양해해주시고 여기서 사용된 기술들은 정리해서 포스팅할 예정이에요. QuickStarts 시리즈부터 해야죠.;;
TestText.zip

TextBlock과 한글 문제 테스트 프로젝트

Posted by gongdo


티스토리 툴바