문단모양 관련 오류

문단 모양을 자동으로 넣고 있습니다.

var MiliToHwpUnit = function (n) {
    return parseInt(n * 283465 / 1000);
}

PS = HwpCtrl.CreateAction("ParagraphShape");
dPSet = PS.CreateSet();
PS.GetDefault(dPSet);
dPSet.SetItem("LeftMargin", MiliToHwpUnit(6.8)); //1.416을 나눈 값을 넣어야 함(왜 그런진 모름)
PS.Execute(dPSet);

왼쪽 여백 뿐 아니라 첫 줄 내어쓰기(Indentation)도 왜 그런진 모르겠는데 1.416을 넣어야 원하는 수치가 들어갑니다.

또한 자동으로 생성되었을 때 설정한 수치가 아닌 다른 곳에 위치합니다.(문단 모양을 열어서 확인 버튼을 누르면 설정한 값으로 정상 적용되는 것 같습니다.

데모 버전의 오류인건지 확인 부탁드립니다.
가능하면 왜 1.416을 나누는건지도 알려주시면 감사하겠습니다.

안녕하세요.

문단모양 LeftMargin 의 단위는 URC 이고,
웹한글 기안기에서 표현되는 단위는 Point(pt) 입니다.

밀리미터 단위로 값을 입력하셔서 오차가 있는것 같습니다.
URC 단위 값을 입력하시려면 HwpUnit 값 * 2 로 입력해주시면 됩니다.

URC 단위에 대해서는 아래 내용을 참고해주시고
자세한 내용은 개발 가이드 | 한컴디벨로퍼 에 첨부된
ParameterSetObject.pdf 파일을 참고해주시면 될것 같습니다.

  • HWPUNIT : 7200분의 1 인치
  • URC
    • 32 bit 정수값. HWPUNIT 또는 Relative Character Position을 나타낸다.
    • Bit0 = 0 인 경우, HWPUNIT이며 Bit1~Bit31에 HWPUNIT에 해당하는 값이 저장된다.
    • Bit0 = 1 인 경우, Relative Character이며 Bit1~Bit31에는 n * 100의 값을 갖는다.
 #define HWPURC_MAKE(type, value) (((value) << 1) | ((type) & 1))
 #define HWPURC_TYPE(data) ((data) & 1)
 #define HWPURC_VALUE(data) ((data) >> 1)

감사합니다.

혹시 js로는 어떻게 해야하는지 예시 코드를 하나 주실 수 있나요?
문단 모양을 눌러서 봤을 때 숫자는 잘 들어가있는데,
입력한 값에 따라 커서가 의도한 곳에 있을 때도 있고, 아닐 때도 있어서요

위 코드는 안내드린 링크의 첨부파일에 안내된 내용입니다.

javascript 로는 아래와 같이 사용하시면 될것 같습니다.

    HWPURC_MAKE = function (type, value) {
        return (((value) << 1) | ((type) & 1));
    };
    HWPURC_TYPE = function (d) {
        return ((d) & 1);
    };
    HWPURC_VALUE = function (d) {
        return ((d) >> 1);
    };
HWPURC_MAKE(0, value); // value 는 HWPUNIT 단위

답변 감사합니다.

type을 0으로 해야 URC라고 전 답변에서 말씀하셨는데,
type을 1로 해도 n*100의 값을 정수로 입력해야 정상 동작하는 것 같습니다. 혹시 맞는지 확인 부탁드립니다.

PS = HwpCtrl.CreateAction("ParagraphShape");
dPSet = PS.CreateSet();
PS.GetDefault(dPSet);
dPSet.SetItem("LeftMargin", HWPURC_MAKE(0, 960));  //9.6pt를 의도함
PS.Execute(dPSet);

안녕하세요.

type이 정수형이라 그렇습니다.
위에 설명드린대로 type을 ‘0’ 으로 하시고 코드를 작성하시는게 좋을것 같습니다.

감사합니다.

추가로 설명을 드리면,

ParameterSetObject.pdf 를 참고 하시면 되는데,

HWPUNIT : 7200분의 1 인치

URC
: 32 bit 정수값. HWPUNIT 또는 Relative Character Position을 나타낸다.
: Bit0 = 0 인 경우, HWPUNIT이며 Bit1~Bit31에 HWPUNIT에 해당하는 값이 저장된다.
: Bit0 = 1 인 경우, Relative Character이며 Bit1~Bit31에는 n * 100의 값을 갖는다

추가로 문의 사항이 있으시면 언제든지 올려 주시기 바랍니다.

감사합니다.