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

[QnA] (1/5) 특정단어 포함 문단 뒤에 표 깔기-인트로

by 회사원코딩 2022. 9. 19.
안녕하세요.
한글 자동화 프로그램을 공부하고 있는데 궁금한 사항이 있어 질문합니다.

<질문>

특정 글자가 들어가 있는 문단을 찾아서 그 곳에 글뒤로 속성으로 표를 삽입하고 싶습니다.
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) 표 생성하고, 수정하기

 

[QnA] (2/?) 표 생성하고, 수정하기

안녕하세요. 한글 자동화 프로그램을 공부하고 있는데 궁금한 사항이 있어 질문합니다. <질문> 특정 글자가 들어가 있는 문단을 찾아서 그 곳에 글뒤로 속성으로 표를 삽입하고 싶습니다. 1. 자

martinii.fun

2022.09.19 - [업무자동화/파이썬-아래아한글 자동화 응용] - [QnA] (3/5) 문단의 높이(HwpUnit) 구하기

 

[QnA] (3/?) 문단의 높이(HwpUnit) 구하기

안녕하세요. 한글 자동화 프로그램을 공부하고 있는데 궁금한 사항이 있어 질문합니다. <질문> 특정 글자가 들어가 있는 문단을 찾아서 그 곳에 글뒤로 속성으로 표를 삽입하고 싶습니다. 1. 자

martinii.fun

2022.09.19 - [업무자동화/파이썬-아래아한글 자동화 응용] - [QnA] (4/5) 특정 단어를 포함한 문단 검색하기

 

[QnA] (4/?) 특정 단어를 포함한 문단 검색하기

안녕하세요. 한글 자동화 프로그램을 공부하고 있는데 궁금한 사항이 있어 질문합니다. <질문> 특정 글자가 들어가 있는 문단을 찾아서 그 곳에 글뒤로 속성으로 표를 삽입하고 싶습니다. 1. 자

martinii.fun

2022.09.19 - [업무자동화/파이썬-아래아한글 자동화 응용] - [QnA] (5/5) 특정단어를 포함한 문단을 1x1표로 감싸기-최종

 

[QnA] (5/5) 특정단어를 포함한 문단을 1x1표로 감싸기-최종

안녕하세요. 한글 자동화 프로그램을 공부하고 있는데 궁금한 사항이 있어 질문합니다. <질문> 특정 글자가 들어가 있는 문단을 찾아서 그 곳에 글뒤로 속성으로 표를 삽입하고 싶습니다. 1. 자

martinii.fun

 

반응형

댓글0