[python+hwp] 글머리 기호의 모양만 수준별로 바꾸는 파이썬 코드
2023.03.09
문단 글머리 기호를 추출하고자 합니다.
원래 목적은 문단별 글머리 기호가 다르고 문단별로 각각 다른 폰트를 적용이 목적입니다.
GetHeadingString()을 써보니
코드를 적용해서 커서를 옮겨도 문서를 최초 불러온 커서의 위치의 글머리 기호를 불러오네요..
이유를 몰겟습니다. ㅠㅠ
아래는 테스트 코드입니다.
(후략)
이 문제는 예를 들어서 설명하는 게 여러모로 좋을 것 같습니다.
아래는 제가 임의로 만들어본 예시문서입니다.
위와 같은 문서에서 제1수준(숫자로 시작하고 "." 으로 끝나는 문단기호)에는 "진하게(Bold)"를 적용하고
제4수준("가나다" 등 문자로 시작하고 ")" 으로 끝나는 문단기호)에는 "기울임(Italic)"을 적용해보겠습니다.
import win32com.client as win32
def 한글_시작():
hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") # 한/글 실행
hwp.XHwpWindows.Item(0).Visible = True # 백그라운드 해제
hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule") # 보안모듈 등록
return hwp
def 진하게():
if not hwp.CharShape.Item("Bold"): # 진하게 적용되어 있지 않으면
hwp.Run("CharShapeBold") # 진하게 적용
def 이탤릭():
if not hwp.CharShape.Item("Italic"): # 이탤릭이 적용되어 있지 않으면
hwp.Run("CharShapeItalic") # 이탤릭 적용
if __name__ == '__main__':
hwp = 한글_시작()
hwp.Run("FileOpen")
hwp.Run("MoveDocBegin") # 문서 시작점으로 이동해서
hwp.Run("MoveParaEnd") # 문단 끝으로 이동
para_num = 0 # 0번째 문단에서부터
while True: # 한문단씩 이동하면서
if hwp.GetPos() == (0,0,16): # 0번째 문단으로 돌아오면(!!)
# 추가설명 : SetPos 입력시 문서범위를 벗어나서 이동을 시도하면
# 커서가 문서시작위치(0,0,16)로 돌아옵니다.
# 이를 이용해 while 문 종료조건을 잡아보았습니다.
break # while문 종료
hwp.SetPos(0, para_num, -1) # para_num번째 문단 끝(-1)으로 이동
para_head = hwp.GetHeadingString() # 글머리 추출
# 글머리가 숫자로 시작하고 "."으로 끝나면
if para_head[:-1].isdigit() and para_head.endswith("."):
진하게()
# 글머리가 문자로 시작하고 ")"로 끝나면
elif para_head[:-1].isalpha() and para_head.endswith(")"):
이탤릭()
# 글머리가 없거나 기타 글머리인 경우
else:
pass # 넘어감
para_num += 1 # 다음 문단으로 이동해서 위의 코드 반복
주석을 나름 꼼꼼히 달아보았는데,
혹시 잘 납득이 안 가는 부분이 있으면
댓글로 알려주시기 바랍니다^^
실행화면은 아래와 같습니다.
우리의 의도대로
제1수준은 진하게, 제4수준은 이탤릭이 적용되는 것을 확인하실 수 있습니다.
<부연>
크게 어렵지 않고, 짧은 코드이긴 하지만..
위와 같은 경우에는(여러 개의 한/글 파일을 변경하는 게 아니라면)
기왕이면 코딩을 사용하지 않고,
Ctrl-K-N을 통해 문단번호의 글자모양 기본값을 통해
문단수준별로 직접 변경하는 게 훨씬 안정적일 것 같기는 합니다^^;
댓글을 작성해보세요.
친절한 설명 감사드립니다.