HwpCtrl에서 HTML 삽입후 폰트 적용

(예전 커뮤니티(2016-2020) 사이트에서 옮겨온 글입니다: 번호 48)

작성자: ofbyfor
날짜: 2017-08-02


HwpCtrl에서 HTML 파일을 Insert 하면 굴림체로 적용되어 집니다.

최초 문서 작업시 적용된 폰트가 다른 폰트라 해도 자동 적용되지 않습니다.

그래서 아래와 같이 우선 문서의 적용 폰트를 구해 온 후 HTML파일을 인서트하고 HTML 파일을 블록 설정한 후 구해진 폰트를 적용하는 과정을 수행하였으나, 해당 폰트가 적용되지 않습니다. 블록이 선택되는 것까지 확인하였습니다.

그리고, 인서트된 HTML을 찾기 위해 필드코드를 사용하였습니다.

폰트를 적용할 다른 해결 방안이 있을까요?

VOID GetFontString(CHwpObject& rHwpObject, CString& outstr, long& outheight)
{
	CHAction hAction;
	CHParameterSet hParameterSet;
	CHCharShape hCharShape;
	CHSet hSet;
 
	hAction.AttachDispatch(rHwpObject.get_HAction());
	hParameterSet.AttachDispatch(rHwpObject.get_HParameterSet());
 
	hCharShape.AttachDispatch(hParameterSet.get_HCharShape());
	hSet.AttachDispatch(hCharShape.get_HSet());
	hAction.GetDefault("CharShape", hSet);
	hAction.Execute("CharShape", hSet);
 
	outstr = hCharShape.get_FaceNameHangul();
	outheight = hCharShape.get_Height();
 
	hAction.Run("Cancel");
}

VOID SetFontString(CHwpObject& rHwpObject, char* fontstr, long height)
{
	CHAction hAction;
	CHParameterSet hParameterSet;
	CHCharShape hCharShape;
	CHSet hSet;
 
	hAction.AttachDispatch(rHwpObject.get_HAction()); 
	hParameterSet.AttachDispatch(rHwpObject.get_HParameterSet());
	hCharShape.AttachDispatch(hParameterSet.get_HCharShape());
	hSet.AttachDispatch(hCharShape.get_HSet());
 
	hAction.GetDefault("CharShape", hSet);
	hCharShape.put_FaceNameHangul(fontstr);
	hCharShape.put_FaceNameOther(fontstr);
	hCharShape.put_FaceNameUser(fontstr);
	hCharShape.put_FaceNameHanja(fontstr);
	hCharShape.put_FaceNameJapanese(fontstr);
	hCharShape.put_FaceNameLatin(fontstr);
	hCharShape.put_FaceNameSymbol(fontstr);
	hCharShape.put_Height(height);
 
	hAction.Execute("CharShape", hSet);
	hAction.Run("Cancel");
}
 
 
COleVariant vformat("HTML");
COleVariant varg("code:ks;textunit:true;formatunit:true");
COleVariant vmemo("");
COleVariant vname("필드코드");
 
CString strfont = ""; 
long height = 0;
 
GetFontString(HwpObject, strfont, height);
 
HwpObject.CreateField("", vmemo, vname); 
HwpObject.Insert("file.html", vformat, varg);
 
HwpObject.MoveToField("필드코드", gcovTrue, gcovTrue, gcovTrue); 
HwpObject.Run("MoveSelLineBegin");
HwpObject.Run("MoveSelDocEnd");
SetFontString(HwpObject, strfont, height);

댓글

mars7002 (2017.08.03)

코드상에는 특별이 문제가 없어 보이는데
SetFontString 에서 strfont 를 강제로 "굴림"으로 지정하고
적용 되는지 확인해 보세요

ofbyfor (2017.08.03)

mars7002 님 답변 감사합니다.

앞서 GetFontString 함수를 통해 적용된 폰트를 가져 옵니다. 가져왔을 때 제대로 가져오는 것도 확인 했습니다.
HTML 문서 상에도 폰트값을 GetFontString 함수로 얻어온 값으로 설정을 하는데, Insert를 할 경우 HTML 문서의 폰트가 반영이 안되는 것 같습니다. 캡춰영상 추가했습니다.

ofbyfor (2017.08.04)

해결하였습니다.

블록 선택 후 폰트 적용은 이유는 모르겠으나 되지 않습니다. 추정해보면 HTML 폰트가 적용되어 있는 경우 적용이 되지 않는 듯 합니다.
제가 해결한 방법은 HTML 문서에서 폰트를 지정할 때 CSS 를 쓰지 않고 전통적인 font 태그를 사용하는 방법입니다.
혹은 HTML 문서가 잘못 작성된 것일지도 모르겠다는 느낌도 드네요. ㅡㅡ;