안녕하세요.
한글 자동화 프로그램을 공부하고 있는데 궁금한 사항이 있어 질문합니다.
<질문>
특정 글자가 들어가 있는 문단을 찾아서 그 곳에 글뒤로 속성으로 표를 삽입하고 싶습니다.
1. 자동으로 표 생성시 속성을 "본문과의배치"에서 "글뒤로" 선택하여 생성할 수 있나요?
이 속성없이 생성시 문단에 삽입되면서 글자가 밀려나는 현상이 발생합니다.
2. 찾은 문단의 위치값을 HWPUNIT 값으로 알 수 있나요?
표 생성시 위치값은 HWPUNIT으로 지정해야 하는데 현재 찾은 위치의 속성은 줄,칸으로 알려주네요.
이상입니다.
한/글 개발자 커뮤니티에 재미있는 질문이 있어 블로그에서 다뤄보겠습니다. 이를테면 이런 예제를 말씀하시는 것 같아요.
아래와 같은 문서가 있을 때
특정 단어가 들어가는 문단에 다음과 같이 백그라운드 표를 넣고자 합니다.
참고로 위 방법은 "본문과의 배치"를 "글 뒤로"로 설정한 값으로, 글자가 표 안에 있지 않고 표 위에 올라타고 있는(?) 상태입니다. 아래의 아이콘을 통해 설정하실 수 있습니다.
왜 이렇게 설정하냐면..
위 방법과 달리 표 안에 단순히 세 번째 문단을 잘라넣어버리면?
아래처럼 해당 문단을 포함해 전체 문서가 틀어지게 되거든요.
(제 추측이지만) 이런 문제들로 인해 표를 백그라운드로 삽입하는 신박한 방법을 고안하신 것으로 생각되는데요.
솔직히 구현하기 간단한 문제는 아닙니다.
왜냐면 위 기능을 구현하기 위해서는 개별적으로 최소 다섯 개 이상의 서브함수를 조합해야 하는데,
① 문서 안에 특정 단어를 포함한 문단들의 시작위치를 구하는 함수
② 해당문단의 높이를 구하는 함수(글자크기, 줄간격 고려해서 직접 계산)
③ 용지의 너비를 구하는 함수(표 생성시 너비 꽉 차게 하기 위함)
④ 위의 정보를 이용해 1x1의 표를 만들고, 바깥여백을 0으로 바꾼 후, 표를 글자 뒤로 보내는 함수
⑤ 표 생성시 생성되는 줄바꿈을 제거하는 함수
대략 이런 함수(기능)들을 전부 직접 구현해야 하기 때문이죠.
그런데 막상 나열해보고 나니까 하나하나가 그리 복잡한 함수들은 아니네요.
레고 조립하듯이 하나씩 구현해보면 금방 완성할 수 있겠습니다.
최종 코드는 대략 아래처럼 만들어질 것 같습니다.
"""
① 문서 안에 특정 단어를 포함한 문단들의 시작위치를 구하는 함수
② 해당문단의 높이를 구하는 함수(글자크기, 줄간격 고려해서 직접 계산)
③ 용지의 너비를 구하는 함수(표 생성시 너비 꽉 차게 하기 위함)
④ 위의 정보를 이용해 1x1의 표를 만들고, 바깥여백을 0으로 바꾼 후, 표를 글자 뒤로 보내는 함수
⑤ 표 생성시 생성되는 줄바꿈을 제거하는 함수
"""
def 용지_너비_계산():
pass
def 특정_단어_포함한_문단_찾기(특정단어):
pass
def 캐럿_이동하기(loc):
pass
def 문단_높이_계산():
pass
def 표생성(width, height):
pass
def 줄바꿈_삭제하기():
pass
문단너비 = 용지_너비_계산()
위치리스트 = 특정_단어_포함한_문단_찾기(특정단어)
for i in 위치리스트[::-1]:
캐럿_이동하기(i)
문단높이 = 문단_높이_계산()
표생성(문단너비, 문단높이)
줄바꿈_삭제하기()
제 경우, 프로젝트 자체가 조금 복잡하게 느껴질 때는
이런 식으로 각각의 함수가 다 구현되었다고 생각하고
위처럼 코드 틀을 짜놓고 코딩을 시작하면
복잡해 보이는 문제가 다소 쉽게 풀리는 경향이 있는 것 같습니다.
한 포스팅에 이걸 전부 우겨넣으면 지루해질 것 같아
시리즈처럼 위에 나열된 함수들을 하나씩 구현해보겠습니다.
재미있겠네요. 그럼 시작해보겠습니다.
2022.09.19 - [업무자동화/파이썬-아래아한글 자동화 응용] - [QnA] (2/5) 표 생성하고, 수정하기
2022.09.19 - [업무자동화/파이썬-아래아한글 자동화 응용] - [QnA] (3/5) 문단의 높이(HwpUnit) 구하기
2022.09.19 - [업무자동화/파이썬-아래아한글 자동화 응용] - [QnA] (4/5) 특정 단어를 포함한 문단 검색하기
2022.09.19 - [업무자동화/파이썬-아래아한글 자동화 응용] - [QnA] (5/5) 특정단어를 포함한 문단을 1x1표로 감싸기-최종
국내 유일의 파이썬+한컴오피스 업무자동화 입문강의
'아래아한글 자동화 > python+hwp 중급' 카테고리의 다른 글
[QnA] (2/5) 표 생성하고, 수정하기 (0) | 2022.09.19 |
---|---|
SetPos 대신 SetPosBySet을 쓰면 훨씬 유용한 경우 : GetAnchorPos와 연계할 때 (0) | 2022.09.15 |
문서좌표를 활용하는 고급메서드 : GetAnchorPos() (0) | 2022.09.08 |
댓글