C++ 한글파일 자동으로 만들기

C++ 오토메이션 기능들을 이용하여, 한글 파일을 열고, 한글 파일위에 텍스트나 표를 그리는 방식으로 하다보니, 한페이지 만드는데, 시간이 많이 걸립니다.
혹시, 한글파일을 열지 않고, 메모리에 텍스트나 표등을 저장하고, 한번에 saveas 같은 기능으로 한글파일을 생성할 수 있게는 못하나요? 궁금합니다.
방법이 있으면, 간단한 샘플코드도 부탁합니다. 텍스트와 표 하나정도 쓰는 샘플이면 됩니다.

참고로, 엑셀같은 경우, 라이브러리를 이용하여, 메모리에 모든 내용을 쓴 후, saveas 하면서, 많은 파일을 자동으로 생성할 수 있습니다.

안녕하세요.

한글 오토메이션은 한글앱을 외부 응용프로그램에서 핸들링하는 기능입니다.
한글앱의 단순히 편집창을 띄우지 않고 문서 핸들링을 하고자 한다면 편집창의 상태를 FALSE로 세팅해주시면 될 것 같습니다. (편집창의 상태를 별도로 변경하지 않으면 Visible 상태는 FALSE임)
** 엑셀 오토메이션의 경우도 Visible 상태를 변경하는 방식을 취하고 있습니다. (역시 기본값이 FALSE)

if (m_app.CreateDispatch(_T("HWPFrame.HwpObject.2"), &exception) != NULL) {
		CXHwpWindows wins = m_app.get_XHwpWindows();
		CXHwpWindow0 win = wins.get_Active_XHwpWindow();
		// visible 상태를 FALSE로 하여 편집창을 숨김		
		win.put_Visible(FALSE);
}

감사합니다.

위 코드대로, FALSE로 하고, 실행한 다음,
m_app.SaveAs(_T(“c:\temp\000.text.hwp”), COleVariant(_T(“HWP”)), COleVariant(_T(“”)));
여기서, 멈춤니다.
그리고, TRUE로 할때, 파일 쓰기 접근 허용 여부 다이얼로그가 나오는데, 안나오고, 강제 저장은 어떻게 하나요?

보안 승인창을 말씀하시는 것 같은데요.
해당 창은 아래와 같이 제어가 가능합니다.

2. 보안 승인 모듈
보안모듈(Automation).zip
한글 오토메이션을 사용할 때 로컬 파일에 접근하거나 저장하려고 하면 보안 승인 메시지가 나타납니다.
첨부된 ‘보안모듈(Automation).zip’ 파일은 보안 승인 메시지가 나타나지 않도록 처리하는 모듈로 파일에 대한 유효성과 보안 확인을 처리합니다.

위 첨부 파일을 다운로드한 후 압축을 해제하시기 바랍니다.
▪ 보안모듈(FilePathCeckerModuleExample.dll)
▪ 보안모듈 등록 위치(레지스트리.JPG)

보안모듈을 특정 위치에 설치한 다음 '레지스트리.JPG'를 따라 보안모듈의 이름과 전체 경로를 레지스트리로 등록하고 사용하시기 바랍니다.
추가로 프로그램 소스 코드에서도 다음과 같이 보안모듈을 추가해야 합니다.
▪ HwpObject.RegisterModule("FilePathCheckDLL", "FilePathCheckerModuleExample");
▪ RegisterModule()의 자세한 설명은 매뉴얼을 참고하시기 바랍니다.

네, 감사합니다. 일단 보안창 안나오는거는 잘 됩니다.
그런데, 갑자기 표의 사이즈가 잘 되던게, 원래 정의한 폭의 길이가 우측쪽으로 페이지를 벗어나 늘어나 있네요.
잘 되던 이전 소스 복원에서 해도 마찬가지네요. 이유를 모르겠습니다. 폭의 수치를 아무리 줄여도 마찬가지네요.

CDHwpAction actPage = m_app.CreateAction(_T(“PageSetup”));
CDHwpParameterSet pageCreationSet = actPage.CreateSet();
CDHwpParameterSet pageSet = pageCreationSet.CreateItemSet(_T(“PageDef”), _T(“PageDef”));
//actPage.GetDefault(pageCreationSet);

pageSet.SetItem(_T(“ApplyTo”), CComVariant(3));
pageSet.SetItem(_T(“TopMargin”), CComVariant(150));
pageSet.SetItem(_T(“LeftMargin”), CComVariant(150));
pageSet.SetItem(_T(“RightMargin”), CComVariant(150));
pageSet.SetItem(_T(“BottomMargin”), CComVariant(150));
actPage.Execute(pageCreationSet);

//return;
/////////////////////////////////////////////////////////////////////////////////////
const int rowsCnt = 2;
const int colsCnt = 1;
long row_i = 0;
int col_i = 0;

CDHwpAction act = m_app.CreateAction(_T(“TableCreate”));
CDHwpParameterSet TableCreationSet = act.CreateSet();
act.GetDefault(TableCreationSet);

// TableCreation ParameterSet
TableCreationSet.SetItem(_T(“Rows”), CComVariant(rowsCnt));
TableCreationSet.SetItem(_T(“Cols”), CComVariant(colsCnt));

CDHwpParameterArray rowsHeight = TableCreationSet.CreateItemArray(_T(“RowHeight”), rowsCnt);
CDHwpParameterArray colsWidth = TableCreationSet.CreateItemArray(_T(“ColWidth”), rowsCnt);

for (row_i = 0; row_i < rowsCnt; ++row_i)
rowsHeight.SetItem(row_i, CComVariant((long)(20000)));
for (col_i = 0; col_i < colsCnt; ++col_i)
colsWidth.SetItem(col_i, CComVariant((long)(10 * 283.465)));

// Table ParameterSet (TableSet의 상위 계승자인 ShapeObject ParameterSet)

CDHwpParameterSet TableSet = TableCreationSet.CreateItemSet(_T(“TableProperties”), _T(“Table”));

TableSet.SetItem(_T(“TreatAsChar”), CComVariant(0)); // off

TableSet.SetItem(_T(“VertRelTo”), CComVariant(0)); // 종이 영역
TableSet.SetItem(_T(“VertAlign”), CComVariant(0)); // 위(Top)
TableSet.SetItem(_T(“VertOffset”), CComVariant((long)(1 * 283.465))); // 1mm = 283.465 HWPUNITs

TableSet.SetItem(_T(“HorzRelTo”), CComVariant(0)); // 종이 영역
TableSet.SetItem(_T(“HorzAlign”), CComVariant(0)); // 왼쪽(Left)
TableSet.SetItem(_T(“HorzOffset”), CComVariant((long)(10 * 283.465))); // 1mm = 283.465 HWPUNITs
act.Execute(TableCreationSet);

//return;
///////////////////////////////////////////////////////////////////////////////////////////////
VARIANT type, faceColor, facestyle, hatchcolor;
type.vt = VT_UI1;
facestyle.vt = VT_UI1;
hatchcolor.vt = VT_UI1;
faceColor.vt = VT_UI1;

type.intVal = 1; // 배경 유형
facestyle.lVal = 0xffffffff; //무늬 스타일(무늬없음)
hatchcolor.lVal = 0x00000000; // 무늬 색
faceColor.lVal = 0x0000ffff; // 배경 색

CDHwpAction actCellFill = m_app.CreateAction(_T(“CellFill”));
CDHwpParameterSet CellFillSet = actCellFill.CreateSet();
CDHwpParameterSet FillItem = CellFillSet.CreateItemSet(_T(“FillAttr”), _T(“DrawFillAttr”));
actCellFill.GetDefault(CellFillSet);

FillItem.SetItem(_T(“Type”), type);
FillItem.SetItem(_T(“WinBrushFaceStyle”), facestyle);
FillItem.SetItem(_T(“WinBrushHatchColor”), hatchcolor);
FillItem.SetItem(_T(“WinBrushFaceColor”), CComVariant(m_app.RGBColor(211, 211, 211)));// faceColor);

actCellFill.Execute(CellFillSet);

코딩 순서에 문제가 있는지, 확인해주시면 감사하겠습니다.
페이지 셋업은 위아래좌우를 약 1센티씩 정도만 하려고 합니다.
표의 사이즈는 상하여백 약 2센티 정도, 좌우는 1센티씩 정도로 하려고 합니다.

테스트.hwp (38 KB)
궁극적으로 이런표를 만들려고 합니다. 검토 부탁드립니다.