안녕하세요?
HwpObject를 사용하여 GetTextFile 함수를 사용하여 hml 데이터를 메모리로 불러 온 상태에서
hml 데이터를 이용하여 hwp파일로 저장하기 위하여 SetTextFile함수를 사용하여 셋팅을하고 SaveAs함수를 이용하여 HWP파일로 저장을 하고 저장한 HWP파일을 더블 클릭하여 열면 내용이 xml형식으로 보여 지고 있습니다.
그리고 앞쪽에 xml버전 정보가 포함된 태그를 포함한 경우 SetTextFile함수를 사용하면 ‘알 수 없는 오류입니다’ 라는 메시지 창을 보입니다.
xml형식이 아닌 지정한 옵션이 적용된 텍스트를 보이게 할 방법이 없을까요?
[참고로 GetTextFile 함수를 사용하여 얻은 hml 데이터를 hml파일로 저장하고 저장한 hml파일을 Open함수를 이용하여 열고 SaveAs함수를 이용하여 저장하면 텍스트가 제대로 보이더군요.]
SaveAs 함수를 사용하실 때 포맷을 잘못 지정해서 발생한 문제로 추측됩니다.
아래는 코멘트하신 동작을 C++ 작성한 코드입니다.
참고 부탁드립니다.
CHwpObject hwpObject;
...
// 현재 문서의 내용을 HML 포맷의 데이터로 추출
VARIANT hmlData = hwpObject.GetTextFile(_T("HWPML2x"), _T(""));
// HML 포맷의 데이터를 현재 위치에 삽입
hwpObject.SetTextFile(_T("HWPML2X"), _T("insertfile"));
// 현재 문서를 c:\text.hwp 파일로 저장
hwpObject.SaveAs(_T("c:\\tetx.hwp"), COleVariant(_T("HWP")), COleVariant(_T("")));
hwpObject.SetTextFile함수를 실행 할때 다음과 같은 형식의 예외가 발생하더군요.
처리되지 않은 예외 발생(0xXXXXXXXX, XXXXXX.exe): Microsoft C++ 예외: COleDispatchException, 메모리 위치 0xXXXXXXXX.
SetTextFile함수에 셋팅을 한 메모리의 내용을 파일로 hml파일로 저장하고 그 저장한 파일을 더블클릭 해서 열면 파일의 내용이 제대로 보입니다.
SetTextFile함수에서 왜 이런 예외를 내어 놓을까요?
파일로 저장한 내용이 읽어지지 않는다면 메모리 상의 데이터에 문제가 있는 것이라고 생각 할 수 있겠지만 파일로 저장한 hml파일은 잘 열리고 있습니다.
보내 주신 sample에 하나 더 추가한 것이 있다면 SetTextFile함수를 호출하기 바로 전에 Clear 함수를 호출하는 것을 추가 하였습니다.
그리 대용량의 크기는 아닙니다. 셈플중 하나의 예로 hml파일로 떨구면 약 230k정도의 용량입니다.
굳이 disk에 접근 않고 SetTextFile함수를 쓰려는 이유가 DRM이 치고 들어 오는 것을 회피 하기 위함 때문에 중간에 임시파일을 떨구기에 애로점이 있어서 그러합니다.
혹시 파일을 보내 드리면 원인 파악이 가능 할까요? 마음 같아서는 같이 옆에서 SetTextFile함수 디버깅 해보고 싶습니다만…
ㅠㅠ.
셈플 hml 파일을 원하시면 메일 주소 부탁 드립니다.
고객쪽의 허락이 있으면 보내 주신 메일 주소로 셈플 파일을 보내 드릴 수 있지 않을까 싶습니다.
(셈플 hml파일을 더블클릭해서 열어 보면 딱 1줄인 내용이 다 입니다.)