안녕하세요, 대장코린이입니다.
저번시간에는 한글문서를 열고, 컨트롤할 수 있는 내용들을 다뤘어요.
오늘은 본격적으로 한글 문서 내용들을 파이썬으로 가져오는 방법을 배워봅시다.
▼[Python, 한글] 파이썬을 이용하여 한글문서 작성하기 [기초편] - 1
https://carod00.tistory.com/entry/Python-%ED%95%9C%EA%B8%80-%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%ED%95%9C%EA%B8%80%EB%AC%B8%EC%84%9C-%EC%9E%91%EC%84%B1%ED%95%98%EA%B8%B0-%EA%B8%B0%EC%B4%88%ED%8E%B8-1
1. 한글 파일 열기
먼저 한글 문서를 여는 것 부터 해야겠죠?
import win32com.client as win32
hwp = win32.gencache.EnsureDispatch('hwpframe.hwpobject')
hwp_path = rf'./test.hwp'
hwp.Open(hwp_path,Format='HWP',arg='')
hwp.XHwpWindows.Item(0).Visible=True
2. 본문 내용 추출
자 이제 모든 페이지를 쭈우욱 넘겨가며 내부 내용들을 가져올게요.
total_pages = hwp.PageCount # 한글문서의 총 페이지 수
페이지의 내용을 가져오기 위해선 해당 페이지가 몇페이지인지를 알아야해요.
근데 지금은 모든 페이지를 쭈우욱 넘겨가며 내부 내용들을 가져오려고 하는 것이니깐, 전체 페이지가 몇페이지인지 가져옵니다.
k=1
main_text = []
for page in range(total_pages):
msg = hwp.GetPageText(page,k) # 해당 페이지의 본문 내용 가져오기
main_text.append(msg)
페이지의 내용을 가져오는 방법은, GetPageText를 이용하는 것이에요.
page는 가져오고 싶은 페이지를, k는 정수로 들어가는데 정수에 따른 내용은 아래와 같습니다.
해당 내용은 HwpCtrl API.hwp 문서를 참고했어요.
ID | 값 | 설명 |
maskNormal | 0x00 | 본문 텍스트를 추출한다.(항상 기본) |
maskTable | 0x01 | 표에대한 텍스트를 추출한다 |
maskTextbox | 0x02 | 글상자 텍스트를 추출한다. |
maskCaption | 0x04 | 캡션 텍스트를 추출한다.(표, ShapeObject) |
3. k에 따른 추출 결과 비교
k에 따른 차이점을 알기위해 3페이지에만 표를 추가해놓았어요.
k = 1일때의 결과값입니다.
k=2일때
k= 3일때
k=4일때
이제 차이점이 좀 눈에 보이실까요?
상황에 따라 적절히 사용하면 될 것 같습니다~
4. 현재 커서 위치의 페이지
다음으로, 어떤 특정한 페이지의 내용을 알고 싶은 경우에는 해당 커서의 페이지를 알아내야합니다.
page = hwp.KeyIndicator()[3]
hwp.KeyIndicator()는 해당 커서의 속성들을 반환하는 함수입니다.
그중 3의 내용이 페이지 내용이므로 사용해줍시다!
5. 표가 포함된 페이지의 내부 내용 추출하기
이제 이전 게시물과 연계하여 표가 포함된 페이지의 내용들만 추출하는 코드를 작성해보겠습니다.
import win32com.client as win32
hwp = win32.gencache.EnsureDispatch('hwpframe.hwpobject')
hwp_path = r'C:\Users\carod\python\macro\hangul\블로그/test.hwp'
hwp.Open(hwp_path,Format='HWP',arg='')
hwp.XHwpWindows.Item(0).Visible=True
ctrl = hwp.HeadCtrl
tabel_page_text=[]
while 1:
#print(ctrl)
ctrl = ctrl.Next
if ctrl == None:
break
if ctrl.CtrlID == 'tbl':
# if typ == 'tbl':
position = ctrl.GetAnchorPos(0)
position = position.Item('List'), position.Item('Para'),position.Item('Pos')
hwp.SetPos(*position)
page = hwp.KeyIndicator()[3]
#print(page)
msg = hwp.GetPageText(page,1)
table_page_text.append(msg)
자 ctrl을 선언해주고,
while문을 돌려 모든 내용을 확인하며 표를 찾아줍니다.
만약 표를 찾았다면, 해당 ctrl에 커서를 이동시키고, 해당 커서의 페이지를 가져와줍니다.
페이지를 가져왔다면, 오늘 배운 내용으로 해당 페이지의 내용들을 모두 추출하여 table_page_text에 넣어줍니다.
어때요 어렵지 않죠?
이런식으로 활용하면 정말 무궁무진하게 활용가능합니다.
만약 문서를 다룰일이 많고 귀찮다면, 파이썬을 이용하여 자동화 하는 방법은 꼭 유용하게 사용하시길 바랍니다~
그럼 안뇽