본문 바로가기
아래아한글 자동화/python+hwp 중급

[QnA] 문단 위, 문단 아래 간격이 적용이 안되고 0이 돼요..

by 일코 2022. 12. 6.
혹시. 문단모양에서 문단 위 간격, 문단 아래 간격 값을 지정하는 방법을 알 수 있을까요?

# 문단모양 설정
def para_style(align, LineSpace, prevSpace, nextSpace, breakline_div, min_space):
    # 정렬방식(왼쪽, 가운데, 오른쪽) / 줄간격 / 문단위 / 문단아래 / 줄나눔기준(어절, 글자) / 최소공백
    act = hwp.CreateAction("ParagraphShape") # 액션생성
    pset = act.CreateSet() # 파라미터셋 생성
    act.GetDefault(pset) # 파라미터셋에 현재 상태값 넣기
    pset.SetItem("AlignType", hwp.HAlign(align)) # 정렬("Justify", "Left", "Center", "Right")
    pset.SetItem("LineSpacing", LineSpace) # 줄간격
    pset.SetItem("PrevSpacing", prevSpace) # 문단 위 간격
    pset.SetItem("NextSpacing", nextSpace) # 문단 아래 간격
    pset.SetItem("Condense", 100 - min_space) # 최소공백
    pset.SetItem("BreakNonLatinWord", breakline_div) # 줄 나눔 기준 : 글자
    act.Execute(pset) # 설정한 파마리터셋으로 액션 실행

이렇게 했는데 문단 위/아래 간격이 적용이 안되고 0으로 되네요..

 

어떤 일 하시는 분이신지 참 궁금하네요ㅎㅎ

단위 부분은 저도 자주 했던 실수라서 공감이 많이 됩니다.

함수만 보면 문제가 없어 보이는데,

실은 줄간격, 최소공백은 동일한 숫자지만 단위가 %이고,

문단 위 간격과 문단 아래 간격은 단위가 HwpUnit입니다. Point가 아니고요.

참고로 1포인트는 100 HwpUnit이거든요. 1인치는 7,200 HwpUnit이고요.

그래서 함수 안에서 100을 곱해 주시거나

hwp.PointToHwpUnit(prevSpace)

이런 식으로 사용해 주셔야 합니다.

고쳐서 다시 실행해보겠습니다.

def para_style(align, LineSpace, prevSpace, nextSpace, breakline_div, min_space):
    act = hwp.CreateAction("ParagraphShape")
    pset = act.CreateSet()
    act.GetDefault(pset)
    pset.SetItem("AlignType", hwp.HAlign(align))
    pset.SetItem("LineSpacing", LineSpace)
    pset.SetItem("PrevSpacing", hwp.PointToHwpUnit(prevSpace))  # <---
    pset.SetItem("NextSpacing", hwp.PointToHwpUnit(nextSpace))  # <---
    pset.SetItem("Condense", 100 - min_space)
    pset.SetItem("BreakNonLatinWord", breakline_div)
    return act.Execute(pset)  # 성공하면 True를 리턴, 실패하면 False를 리턴함.

 

의도한 대로 잘 작동하는 것 같네요.

 

그럼 오늘도 행복한 하루 보내세요!

댓글