(예전 커뮤니티(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 문서가 잘못 작성된 것일지도 모르겠다는 느낌도 드네요. ㅡㅡ;