한글 자동화를 공부하면서 한컴에서 제공하는 공식 문서를 자주 보게 됩니다.
공식문서 다운로드 : 한글 문서(Hwp) 안의 표 개수 확인하기
공식문서 중 ParameterSetObject.pdf 파일의
Type에 대해 정리한 것입니다.
ParameterSetObject.pdf 파일 보기
해당 파일을 열어보면 아래 그림과 같은 표를 볼 수 있습니다.
여기서 빨간색 네모 부분이 무엇인지
구글링을 통해 한컴에서 제공하는(제공했던??) 문서를 정리한 것입니다.
파라미터 Type 종류
구글링을 통해 찾은 문서에서는 아래와 같이 정리가 되어 있습니다.
값 | 구분 | 자료형 | 설명 |
0 | PIT_NULL | UINT | NULL |
1 | PIT_BSTR | WORD | 문자열 길이(slen) |
WCHAR array[len] | 문자열 | ||
2 | PIT_I1 | UINT | INT8 |
3 | PIT_I2 | UINT | INT16 |
4 | PIT_I4 | UINT | INT32 |
5 | PIT_I | UINT | INT |
6 | PIT_UI1 | UINT | UINT8 |
7 | PIT_UI2 | UINT | UINT16 |
8 | PIT_UI4 | UINT | UINT32 |
9 | PIT_UI | UINT | UINT |
0x8000 | PIT_SET | Parameter Set | 파라미터 셋 |
0x8001 | PIT_ARRAY | INT16 | 파라미터 셋 개수 |
ParameterArray | 파라미터 셋 배열 | ||
0x8002 | PIT_BINDATA | UINT16 | 바이너리 데이터 ID |
파라미터 Type 종류에서 설명 부분이 의미하는 내용입니다.
자료형 | 길이 | 부호 | 설명 |
BYTE | 1 | 부호 없는 한 바이트(0~255) | |
WORD | 2 | 16비트 컴파일러에서 ‘unsigned int’에 해당 | |
DWORD | 4 | 16비트 컴파일러에서 ‘unsigned long’에 해당 | |
WCHAR | 2 | 한글의 기본 코드로 유니코드 기반 문자 | |
HWPUNIT | 4 | 1/7200인치로 표현된 한글 내부 단위 | |
SHWPUNIT | 4 | √ | 1/7200인치로 표현된 한글 내부 단위 |
UINT8 | 1 | ‘unsigned __int8’ 에 해당 | |
UINT16 | 2 | ‘unsigned __int16’ 에 해당 | |
UINT32(=UINT) | 4 | ‘unsigned __int32’ 에 해당 | |
INT8 | 1 | √ | ‘signed __int8’ 에 해당 |
INT16 | 2 | √ | ‘signed __int16’ 에 해당 |
INT32 | 4 | √ | ‘signed __int32’ 에 해당 |
HWPUNIT16 | 2 | √ | INT16 과 같다. |
COLORREF | 4 | RGB값(0x00bbggrr)을 십진수로 표시 (rr : red 1 byte, gg : green 1 byte, bb : blue 1 byte) |
|
BYTE stream | 일련의 BYTE로 구성됨. 본문 내에서 다른 구조를 참조할 경우에 사용됨. |
ParameterSetObject 파일에서는 아래와 같이 정의합니다.
정리(예시)
표 만들기를 통해 몇 가지 TYPE에 대해 정리한 것입니다.
먼저 ALT + SHIFT + H를 눌러 매크로 정의를 해보겠습니다.
매크로 정의 후 아래와 같이 표를 생성했습니다.
그다음 ALT + SHIFT + X를 눌러 매크로 기록을 중단하고,
기록된 내용을 보면 다음과 같습니다.
function OnScriptMacro_script26()
{
HAction.GetDefault("TableCreate", HParameterSet.HTableCreation.HSet);
with (HParameterSet.HTableCreation)
{
Rows = 5;
Cols = 4;
WidthType = 1;
HeightType = 1;
WidthValue = MiliToHwpUnit(178.0);
HeightValue = MiliToHwpUnit(22.0);
CreateItemArray("ColWidth", 4);
ColWidth.Item(0) = MiliToHwpUnit(40.9);
ColWidth.Item(1) = MiliToHwpUnit(40.9);
ColWidth.Item(2) = MiliToHwpUnit(40.9);
ColWidth.Item(3) = MiliToHwpUnit(40.9);
CreateItemArray("RowHeight", 5);
RowHeight.Item(0) = MiliToHwpUnit(3.4);
RowHeight.Item(1) = MiliToHwpUnit(3.4);
RowHeight.Item(2) = MiliToHwpUnit(3.4);
RowHeight.Item(3) = MiliToHwpUnit(3.4);
RowHeight.Item(4) = MiliToHwpUnit(3.4);
TableProperties.CellSpacing = MiliToHwpUnit(0.0);
TableProperties.RepeatHeader = 1;
TableProperties.PageBreak = TableBreak("Cell");
TableProperties.HorzRelTo = HorzRel("Para");
TableProperties.Width = 50460;
TableProperties.TableBorderFill.BorderApplyTo = 0;
}
HAction.Execute("TableCreate", HParameterSet.HTableCreation.HSet);
그 다음 한글 공식문서 중 ParameterSetObject 파일 내용에서
TableCreation을 찾아보면 다음과 같이 되어 있습니다.
먼저 Rows와 Cols 속성은 PIT_UI2로 되어있고, 행과 열의 수를 나타냅니다.
전문적인 내용은 뒤로하고 PIT_UI2는 양의 정수가 들어가는 것으로 추측할 수 있습니다.
Rows = 5;
Cols = 4;
그 다음 WidthType와 HeightType를 보면 PIT_UI1으로 되어있습니다.
처음 표를 만들 때 아래 그림의 부분을 정의한 것입니다.
너비는 "단에 맞춤", "문단에 맞춤", "임의 값" 을 선택할 수 있고
높이는 "자동"과 "임의 값"을 선택할 수 있습니다.
이를 통해 유추해보면 PIT_UI1은 한글 프로그램이 이미 정해놓은 무언가를 선택하는 것으로 추측할 수 있습니다.
그리고 WidthValue, HeightValue는 PIT_I로 되어있으며 MiliToHwpUnit() 함수를 통해
밀리미터를 HwpUnit라는 한글에서 사용하는 수치로 변환된 값을 담게 되므로
어떤 숫자가 들어가는 것으로 추측할 수 있습니다.
WidthType = 1;
HeightType = 1;
WidthValue = MiliToHwpUnit(178.0);
HeightValue = MiliToHwpUnit(22.0);
ColWidth와 RowHeight를 통해 행의 너비와 열의 높이를 설정할 수 있으며,
이 표는 4개의 행과 5개의 열을 가지고 있습니다.
PIT_ARRAY는 각각의 행과 열의 속성을 배열에 담고 있다는 의미로 볼 수 있습니다.
매크로 코드를 살펴보면 아랫부분입니다.
CreateItemArray("ColWidth", 4);
ColWidth.Item(0) = MiliToHwpUnit(40.9);
ColWidth.Item(1) = MiliToHwpUnit(40.9);
ColWidth.Item(2) = MiliToHwpUnit(40.9);
ColWidth.Item(3) = MiliToHwpUnit(40.9);
CreateItemArray("RowHeight", 5);
RowHeight.Item(0) = MiliToHwpUnit(3.4);
RowHeight.Item(1) = MiliToHwpUnit(3.4);
RowHeight.Item(2) = MiliToHwpUnit(3.4);
RowHeight.Item(3) = MiliToHwpUnit(3.4);
RowHeight.Item(4) = MiliToHwpUnit(3.4);
위 코드에서도 각각 CreateItemArryy를 통해 행과 열의 크기를 지정해 주고
각각의 행과 열의 너비와 높이를 지정해 주었습니다.
마지막으로 TableProperties는 PIT_SET으로 되어있고,
매크로 코드를 살펴보면 아래와 같이 되어 있습니다.
별도의 속성을 가지고 있다고 추측할 수 있습니다.
그리고 이 속성을 별도로 컨트롤할 수도 있습니다.
TableProperties.CellSpacing = MiliToHwpUnit(0.0);
TableProperties.RepeatHeader = 1;
TableProperties.PageBreak = TableBreak("Cell");
TableProperties.HorzRelTo = HorzRel("Para");
TableProperties.Width = 50460;
TableProperties.TableBorderFill.BorderApplyTo = 0;
해당 속성은 공식 문서를 보시면 아래와 같이 되어있습니다.
아래 문서에서 TableProperties는 PIT_SET 타입이고
표 초기속성은 HTable를 참고하라고 되어있습니다.
ParameterSetObject 파일에서 HTalbe를 살펴보면
아래와 같이 속성을 지정할 수 있습니다.
아래 그림은 일부만 잘라온 것으로 더 많은 속성이 있습니다.
마치며
저 같은 경우에는 이 내용 자체가 처음에는 잘 이해를 할 수 없었습니다.
자동화를 조금씩 공부하면서 하나하나 찾다 보니,
정확히 설명하기는 어렵지만 해당 내용이 무엇을 의미하는지
대략적으로 알 수 있게 된 경우입니다.
이걸 몰라도 한글 자동화가 안 되는 건 아니지만,
대략적으로나마 알게 되니 공식문서가 의미하는 바를
더 알기 쉽게 되고, 찾는 것도 더 수월하게 되었습니다.
여기를 방문하시면 더 많은 파이썬 관련 자료를 확인할 수 있습니다.