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

[QnA] 줄간격 설정하는 다양한 방법

by 일코 2022. 11. 25.

질문 주신 내용

혹시 줄간격 설정하는 방법이 있을까요?

hwp.HAction.GetDefault("ParagraphShape", hwp.HParameterSet.HParaShape.HSet)
hwp.HParameterSet.HParaShape.LineSpacing = 140 # 줄간격
hwp.HParameterSet.HParaShape.Condense = 100 - 25 # 최소공백
hwp.HParameterSet.HParaShape.BreakNonLatinWord = 1 # 줄 나눔 기준 : 글자
hwp.HParameterSet.HParaShape.AlignType = hwp.HAlign("Justify") # 정렬
hwp.HAction.Execute("ParagraphShape", hwp.HParameterSet.HParaShape.HSet)

이렇게 줄간격 설정하고.. 한글을 입력했는데 줄간격이 안먹네요 ㅠㅠ

라고 질문 주셨습니다.

답변 드릴 내용을 네 가지로 나눠 안내드리겠습니다.

 

0. 질문자분의 코드가 실행되지 않는 이유

1. 현재 커서의 줄 간격 파악하는 (보다 간단한) 방법

2. 현재 커서의 줄간격을 원하는 수치로 바꾸는 (간단한) 방법

3. 현재 커서의 줄간격을 10%씩 늘이거나 줄이는 방법

 

네 가지 항목으로 나눠 알려드리겠습니다. 입맛에 맞는 방법을 참고하여 사용하시기 바랍니다.


0. 질문자분의 코드가 실행되지 않는 이유와 수정된 코드

아래아한글 API는 약간 무식한 부분들이 있어서, 직관적으로 실행되지 않는 경우가 종종 있습니다.

예를 들면 매크로녹화를 통해 얻은 스크립트에서 LineSpacing 프로퍼티를 변경할 때에도

실은 LineSpacingType 프로퍼티를 꼭 같이 입력해주어야만 액션이 실행되는데요.

API매뉴얼에는 이렇게 상세하게 기술해놓고 있지 않아서
경험적으로 파악해야 하는 부분들이 정말 까다롭습니다..

아래 코드는 정상적으로 실행됩니다.

HAction = hwp.HAction
HParameterSet = hwp.HParameterSet

HAction.GetDefault("ParagraphShape", HParameterSet.HParaShape.HSet)
HParameterSet.HParaShape.LineSpacing = 250
HParameterSet.HParaShape.LineSpacingType = hwp.LineSpacingMethod("Percent")  # == 0
HAction.Execute("ParagraphShape", HParameterSet.HParaShape.HSet)

실행화면은 아래와 같습니다.

참고로, 위의 코드는 아래 형태로 변환하여 사용하실 수 있습니다.

개인적으로는 위 방식보다 아래 방식을 더 선호합니다.
act = hwp.CreateAction("ParagraphShape")  # 액션 생성
pset = act.CreateSet()  # 파라미터셋 생성
act.GetDefault(pset)  # 파라미터셋에 현재 상태값 채워넣기

print(pset.Item("LineSpacing"))
>>> 160  # 현재 줄간격을 출력

pset.SetItem("LineSpacing", 300)  # 줄간격을 300%로 설정
act.Execute(pset)  # 설정한 파라미터셋으로 액션 실행

 


1. 현재 커서의 줄 간격 파악하는 (보다 간단한) 방법

위에서는 특정 프로퍼티를 변경하기까지 액션과 파라미터셋을 정의하고

GetDefault로 초기화하고, 특정 값을 변경한 후에 마지막으로 Execute를 실행해야만

원하는 값으로 조정이 되었는데요.

사실 더 간편하게 한 줄만으로 조회하거나 실행하는 방법도 있습니다. 참고만 해 주시기 바랍니다.

 

함수로 정의한 코드를 먼저 보여드리겠습니다.

def 현재_줄간격():
    """
    <LineSpacingType 리턴값 설명>
    0 : 글자에 따라(%)
    1 : 고정값(HwpUnit) => hwp.LineSpacingMethod("Fixed")
    2 : 여백만 지정(HwpUnit) => hwp.LineSpacingMethod("BetweenLines")
    3 : 최소(HwpUnit) => hwp.LineSpacingMethod("AtLeast")
    """
    paragraph_shape = hwp.XHwpDocuments.Item(0).XHwpParagraphShape
    line_spacing = paragraph_shape.LineSpacing
    # line_spacing_type = paragraph_shape.LineSpacingType
    return line_spacing  # , line_spacing_type

 

XHwpParagraphShape에서 LineSpacing 프로퍼티가 현재 줄간격을 나타냅니다.

임의로 줄간격 단위를 변경하지 않는 이상은, 글자에 따라(%로 설정)이 기본값입니다.

함수를 정의하고 한 번 실행해보겠습니다.

의도한 대로 잘 실행됩니다.

 

2. 현재 커서의 줄간격을 원하는 수치로 바꾸는 간단한 방법

1번에서 사용한 LineSpacing 프로퍼티를 변경하면, 즉시 문서에도 적용됩니다.

이것도 함수정의 코드를 먼저 보여드리겠습니다.

def 줄간격(line_spacing):
    paragraph_shape = hwp.XHwpDocuments.Item(0).XHwpParagraphShape
    paragraph_shape.LineSpacing = line_spacing

기존 메서드에 익숙하신 분이라면 위 코드가 다소 허전해 보일 수 있지만

이게 전부입니다. 그리고 잘 실행됩니다.

한 번 실행해보겠습니다.

의도한 대로 잘 실행되네요.

 

3. 현재 커서의 줄간격을 10%씩 늘이거나 줄이는 방법

마지막으로

hwp의 Run 단축메서드 중에도 줄간격을 조정하는 명령어가 있습니다.

바로 hwp.Run("ParagraphShapeDecreaseLineSpacing")

hwp.Run("ParagraphShapeIncreaseLineSpacing")인데요.

hwp.Run("ParagraphShapeIncreaseLineSpacing")  # 줄간격 10% 증가
hwp.Run("ParagraphShapeDecreaseLineSpacing")  # 줄간격 10% 감소

각각 줄간격을 10%씩 줄이고 늘여주는 명령어입니다.

한 번 실행해보겠습니다.

 

이와 관련하여 추가로 궁금하신 점이 있다면

댓글로 문의 주시기 바랍니다.

행복한 하루 되세요!

앞으로도 도움이 되는 콘텐츠를 만들어 가겠습니다.

 

댓글