DevExpress Xtra RicEditControl HTML 한글폰트 문제

Published Oct 31, 2013 | Updated Sep 28, 2022 | 0 comments

[문제발생]

DevExpress RicEditControl 을 HTML Editor 로 사용하기로함.

툴바도 컴퍼넌트 자체 기능으로 생성해서 기본값을 사용.

근데, 한글 폰트로 설정된 데이터가 포함된 경우 HtmlText 프로퍼티로 내보낸 문자열을 HtmlText 프로퍼티에 그대로 할당하게 되면

한글폰트로 설정된 부분은 기본 폰트로 바뀌어 버리거나, 툴바의 폰트명 콤보박스에 깨진채로 표시됨(한글 폰트 적용 불가)

참고로 확인해 본 결과 저 폰트명 콤보 Item 을 임의로 핸들링 불가 ㅡㅡ;;(Devexpress  Search)

흠…. 아무리 빈 프로젝트를 별도로 생성해서 다시 해보고 또 다시 해봐도 안된다…

한글문제라 HTML Tag 의 charset 과 RicEditControl 의 Import, Export Option 의 Encoding 을 utf-8 로 맞추고 해봐도 안된다…

그래서 여기저기 구글링해가면서 HTML Editor 관련 소스를 뒤지다가… 프린트 출력을 DevExpress XtraReport 로 이미 구현해 놓은

상황인지라(편집/수정/출력 시 동일하게 보이게 하기위해 통일함) 찾은 소스도 도움이 안됨.. ㅠ,.ㅠ

그래서 다시 DevExpress RicEditControl 관련 한글문제를 구글링하기 시작함…

도움안됨…. 아 짱나~

근데, 문득 연결된 툴바에 생성된 SaveAs, Open 버튼이 보이길래 SaveAs 한 다음 다시 그 파일을 그대로 Open 하게 되면 정상동작함.헐~ 머야….

[해결 과정]

기본생성된 툴바에서 SaveAs 한 다음 다시 그 파일을 그대로 Open 하게 되면 정상동작함.

하지만, 솔루션 특성상 툴바를 사용할수 없음…

그래서 LoadDocument, SaveDocumentAs 메서드 사용해 보기로 함. 이 메서드가 파일경로를 받거나 스트림을 받음

byte[] bytes = System.Text.Encoding.UTF8.GetBytes(wisebiTextEditor1.recWISE.HtmlText);
// 위 소스 처럼 byte array 를 MemoryStream 에 담아서 LoadDocument 를 호출해 봤지만 안됨..
FileStream fs = new FileStream(Path.ChangeExtension(Path.GetTempFileName(),"htm"), FileMode.OpenOrCreate, FileAccess.ReadWrite);
fs.Write(bytes, 0, bytes.Length);
fs.Flush();
fs.Close();
wisebiTextEditor1.recWISE.LoadDocument(fs.Name, DocumentFormat.Html);

2~3 일 동안의 삽질중….

..

.

System.Text.Encoding.UTF8.GetBytes 만 믿고 UTF-8 이 확실하다고 넘어간게 문제…

그래서 인코딩에 대해 따로 알아보던중..
[참조 사이트]
http://www.architectshack.com/TextFileEncodingDetector.ashx
http://www.codeproject.com/Articles/17201/Detect-Encoding-for-In-and-Outgoing-Text

[용어]
BOM (Byte Order Mask / Encoding Preamble) WIKI


위 내용을 보고 난 다음에야 드디어 성공 !!!!!!

using(MemoryStream ms = new MemoryStream(bytes.Length + 3))
{
    ms.Position = 0;
    ms.Write(new byte[]{0xef, 0xbb, 0xbf}, 0, 3);
    ms.Position = 3;
    ms.Write(bytes, 0, bytes.Length);
    ms.Flush();
    ms.Position = 0;
    wisebiTextEditor1.recWISE.LoadDocument(ms, DocumentFormat.Html);
    ms.Close();
}

결국 위키에 명시된 데로 Stream 의 처음 3 Byte 를 별도로 설정한 다음 Index 3 부터 실제 데이터를 넣어야 함..

헐…

재차 확인 중에 알게 된 내용이지만 소스에서 임의로 생성한 파일과 툴바에서 저장한 파일을 열어 HEX 모드로 확인해 보니…

좌측이 툴바에서 저장한(제대로 표시되는) 파일이고, 우측이 소스에서 임의로 생성한(실패한) 파일이다..

내용 자체는 동일한 내용이라 그냥 텍스트 모드로 봤을 때는 알 수 없지만,

이렇게 HEX 모드로 보면 첫 3 Byte 만 틀리고 그 다음은 동일함을 알 수 있었다…

에효.. 아직 출력 쪽에는 적용해 보지 않았지만.. 되겠지???  

== 2013-11-01 Update ==

일단 리포트 쪽의 편집기는 출력만 하는 용도라

값을 할당하는 부분에서 HtmlText 가 아닌 LoadFile 로 바꿔서 직접 스트림을 지정하게 변경하니깐 정상적으로 나옴

어쩌다 보니 편집화면에서는 Snap 컨트롤로 대체해서 사용하는 걸로 최종 마무리됨

툴바생성까지 RichEdit 와 거의~ 모든 부분 동일하게 사용가능 하더라~~~…..

단, 어떤 컨트롤을 사용하던지 HtmlText 프로퍼티가 아닌 스트림을 직접 Import 하는 형태로 바꿔었기 때문에

HtmlText 프로퍼티에 직접 공백(“”) 을 할당하게 되면 런타임에 일부 기능(컨트롤 내 복사/붙여넣기 등등)이 오동작 하더라~~..

TAG INFORMATION

Learn more on this topic

Related Blog Posts

C# 으로 사용자 입력을 받아 동작하는 콘솔 프로그램 구현

C# 으로 사용자 입력을 받아 동작하는 콘솔 프로그램 구현

네이버 지식인에서 우연히 보게 된 누군가의 질문... c# 콘솔 형태의 프로그램이며, 일정 갯수의 숫자를 데이터로 입력 받아 최대값/최소값 등을 구하거나 종료할 수 있는 기능을 하는 프로그램이 요구사항 이었다 내가 답변한 원문은 여기 : C# 프로그래밍 질문 : 지식iN (naver.com)네이버 지식인 링크 실제 프로그램이 실행되는 스크린샷은 다음 이미지와 같습니다. 프로그램이 실행되면 메뉴 설명을 출력합니다. 메뉴 선택에서 0~3 까지 숫자를 입력 받아 메뉴 선택의 용도로...

read more

Join in the conversation

Leave a Comment

0 Comments

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Banner IT Service

전광판

텍스트를 입력하고 텍스트 효과 및 배경효과 를 변경해서 전체화면으로 표시할 수 있는 전광판 용도로 사용하실 수 있습니다. 각종 스포츠 및 공연 관람시 응원 용도로 사용이 가능합니다.

Carousel

여러개의 슬라이드를 추가하여 프레젠테이션 및 이미지 슬라이드 용도로 사용하실 수 있습니다. 브라우저가 포함된 IT 기기로 큰 모니터에 연결하여 매장 내 공지사항 및 메뉴소개를 이미지로 표시할 수 있습니다.

Pin It on Pinterest

Shares
Share This

Share This

Share this post with your friends!

Shares