인프런 커뮤니티 질문&답변

박주현님의 프로필 이미지
박주현

작성한 질문수

직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피

여러 개의 한글 문서를 '문서 끼워 넣기' 기능을 이용해 합치는 방법 문의

해결된 질문

작성

·

115

·

수정됨

1

안녕하세요, 일코님.

강의 수강한지 얼마 안되었지만, 완강하고 나서 질문 올리기에는 궁금증이 너무 커서 대략적인 답변이라도 듣고 싶어서 질문 드립니다. 사실, 저는 한글 문서 수동편집이라면 수천 페이지 이상 지겹도록 해봤지만, 이제는 자동화를 익혀서 하나씩 업무를 효율화 해보고 싶은 열망이 큽니다.

제가 제일 처음 만들어 보고 싶은 업무 효율화 기능은 여러 개의 한글문서를 '문서 끼워 넣기' 기능을 이용해 합치는 것입니다.

좀 막연할 수는 있지만, 제가 구현하고 싶은 기능의 개념을 아래에 설명드리겠습니다.

 

바탕화면의 combine이라는 폴더 속에 다음과 같은 한글문서들이 들어 있습니다.

개구리.hwp, 너구리.hwp, 다람쥐.hwp, 라마.hwp, 바람.hwp, 사자.hwp ...

 

해당 폴더 속 문서들 중 가나다 순 첫번째 문서(여기서는, 개구리.hwp)를 열고,

이 문서의 마지막 페이지의 마지막 위치에 커서를 옮긴 채 ctrl-o를 눌러 '문서 끼워 넣기' 창을 엽니다.

'문서 끼워 넣기' 창에서 체크박스에 모두 체크된(글자 모양 유지, 스타일 유지, 문단 모양 유지, 쪽 모양 유지) 상태로, 끼워넣을 파일은 가나다 순 두번째 문서(여기서는, 너구리.hwp)를 선택하고 '넣기(I)'를 클릭합니다.

이제 첫번째 문서에 두번째 문서가 끼워넣어 졌습니다.

 

그 다음에는 이 문서의 마지막 페이지의 마지막 위치에 커서를 옮긴 채 ctrl-o를 눌러 '문서 끼워 넣기' 창을 엽니다.

'문서 끼워 넣기' 창에서 체크박스에 모두 체크된(글자 모양 유지, 스타일 유지, 문단 모양 유지, 쪽 모양 유지) 상태로, 끼워넣을 파일은 가나다 순 세번째 문서(여기서는, 다람쥐.hwp)를 선택하고 '넣기(I)'를 클릭합니다.

이제 세번째 문서까지 끼워넣어 졌습니다.

 

이와 같은 반복을 계속 진행하여 가나다 순의 마지막 문서까지 끼워넣기를 합니다.

 

이 과정이 끝나면, 다른 이름으로 저장하기(alt-v) 팝업을 열고 파일 이름을 '취합본.hwp'로 하여, 바탕화면의 combine 폴더 내에 저장합니다.

 

[추가설명] 구태여 복사-붙여넣기가 아닌 '문서 끼워 넣기' 기능으로 합치려고 하는 이유는, 문서마다 스타일과 서식이 다를 경우 복사-붙여넣기로 합치면 서식이 심하게 틀어지는 경험을 많이 했었기 때문입니다. 서식 유지 4개 항목(글자 모양 유지, 스타일 유지, 문단 모양 유지, 쪽 모양 유지)에 체크된 상태로 '문서 끼워 넣기'를 하면 가장 안전하게 합치기가 가능했었습니다.

 

제가 문의 드리는 이 기능을 구현하는 것의 난이도가 어느 정도인지 궁금합니다.

완강을 하면 평균적인 수강생의 경우라면 이 정도는 어렵지 않게 스스로 제작이 가능한 정도일까요?

 

혹시라도 저같은 초심자도 한 번에 이해 가능한 수준일 경우에는 가급적 일코님께서 구체적인 답변을 주신다면 매우 감사하겠습니다.

그게 어려울 경우 이 강의의 어느 어느 부분을 중점적으로 익히면 이 기능 구현에 도움을 받을 수 있을지 정도라도 가이드 해주시면 감사하겠습니다.

답변 3

1

박주현님의 프로필 이미지
박주현
질문자

■ 실습 및 문제해결 과정 메모 _24-10-22

 

알려주신 코드로 실습해 봤습니다.
처음부터는 잘 되지는 않았기 때문에 해결과정을 여기에 메모해 둡니다. 나중에 잊었을 때 떠올리기 위합입니다.

1. 높은 버전의 파이썬 인터프리터를 설치 후 적용

해결방법 >>> 기존 적용된 인터프리터인 Python 3.7.5 에서는 pyhwpx가 설치불가하여, Python 3.10.11 을 다운로드 받아 설치 후 작업중인 파이참 프로젝트에 적용함.

 

2. pyhwpx 패키지 설치

파이참 터미널에서 다음 명령어를 입력하여 pyhwpx 설치함
pip install pyhwpx

 

위의 1. 2. 번 조치를 통해 문서를 취합하고 "통합본.hwp"를 생성하는데 까지 일단 성공하였습니다.

 

다만, 처음에는 일코님의 결과물과 제 결과물이 달랐었는데..

다른 질문글에 답변주신 내용을 따라서,

hwp.BreakPage() # <----------------------- 페이지나누기(Ctrl-Enter)

위의 코드를 한 줄 더 추가함으로써 해결되었습니다. 감사합니다.

 

일코님의 프로필 이미지
일코
지식공유자

아래아한글에서 버전차이에 따라 실행결과가 다르지 않나 추측해봅니다.

hwp.insert_file의 파라미터 기본값은 아래와 같습니다.

hwp.insert_file(
    filename, # 끼워넣을 문서 경로
    keep_section=1, # 쪽 모양 유지(1은 유지, 0은 무시)
    keep_charshape=1, # 글자모양 유지
    keep_parashape=1, # 문단모양 유지
    keep_style=1, # 스타일 유지
    move_doc_end=False  # 끼워넣기 후 커서를 문서 끝으로 이동할지 여부
)

그래서 기본적으로 페이지를 구분하여 끼워넣기해야 하는데,

(제가 보여드린 예시처럼요.)

 

만약 섹션(페이지)이 유지되지 않고 붙어버린다면,

hwp.insert_file 바로 위 라인에 hwp.BreakPage()를 추가하여 실행해보시기 바랍니다.

제 PC에서 실행화면은 아래와 같습니다.

 

hwp.BreakPage()를 넣지 않은 경우

녹화_2024_10_22_12_23_30_561.gif

 

hwp.BreakPage()를 추가한 경우

녹화_2024_10_22_12_24_04_903.gif

 

도움이 되었길 바랍니다.

행복한 하루 되세요!!

박주현님의 프로필 이미지
박주현
질문자

문제해결 되었습니다. 감사합니다!

1

일코님의 프로필 이미지
일코
지식공유자

간단한 예제지만,

파이썬 문법에 익숙해지는 데에는 어느 정도 시간이 필요합니다.

개인마다 차이가 커서, 어느 정도 걸린다고 예상하기는 어렵네요^^;

 

다만, 한/글에는 아주 능숙하신 걸로 봐서는

금방 잘 하시게 될 거라고 생각합니다.

 

아주 간단한 for문과 os모듈 사용법(폴더와 여러 파일 다루는 방법) 정도만 알고 계시면

아래 코드를 구현하실 수 있습니다.

녹화_2024_10_17_16_46_58_792.gif

"개구리.hwp" 아래로 다른 모든 문서 끼워넣기가 완료되었습니다.
참고로 "끼워넣기" 메서드(명령어)는 hwp.insert_file(파일경로) 입니다.

 

아래는 파이썬 코드입니다.

from pyhwpx import Hwp  # 임포트

hwp = Hwp()  # 한/글 실행

# 샘플문서 생성
# 샘플문서 생성

import os

os.chdir("c:\\users\\user\\desktop\\combine")
for i in [
    "개구리",
    "너구리",
    "다람쥐",
    "라마",
    "미어캣",
    "방울새",
    "사자",
    "얼룩말",
    "지렁이",
    "참새",
    "코끼리",
    "토끼",
    "펭귄",
    "호랑이",
]:
    hwp.SelectAll()
    hwp.Delete()
    hwp.set_font(Height=40)
    hwp.insert_text(i)
    hwp.save_as(f"{i}.hwp")

# 끼워넣기
hwp.open(os.listdir()[0])  # "개구리.hwp" 열기
for i in os.listdir()[1:]:  # 첫 번째(0) 파일은 제외하고 두 번째(1)파일부터 아래 들여쓰기한 코드 반복
    hwp.MoveDocEnd()  # 한/글의 문서 끝으로 이동해서
    hwp.insert_file(i)  # 문서끼워넣기(기본값은 섹션, 글자, 문단, 스타일 모두 유지) 
hwp.save_as("취합본.hwp")  # 반복이 끝났으면 "취합본.hwp"로 다른이름으로저장

hwp.Quit()  # 한/글 프로그램 종료

도움이 되었길 바랍니다.

 

이해하기 어렵거나

추가 설명이 필요한 부분 댓글로 알려주시면

보다 상세히 설명드려보겠습니다.

 

행복한 하루 되세요^^

박주현님의 프로필 이미지
박주현
질문자

상세 답변 주신 게 있길래 퇴근길에 모바일로 얼른 훑어 봤습니다.

 

말씀주신대로 파이썬에만 익숙해지면 저도 만들어 낼 수 있을 거 같은 희망이 보입니다.

 

한글은 코딩계에서 찬밥신세라 이 강의 레어하고 정말 너무 소중합니다. 또한 강사님의 세심한 답변에 감사드려요~!!

 

강의 수강이랑 실습할 시간은 부족하지만 엉금엉금이라도 꾸준히 해볼게요~~

1

안녕하세요, 인프런 AI 인턴입니다. 박주현님.

한글 문서 자동화를 통해 업무 효율화를 이루려는 열정을 갖고 계신 점 정말 인상적입니다. 여러 개의 한글 문서를 ‘문서 끼워 넣기’ 기능을 통해 합치는 방법에 대해 문의를 주셨네요. 이 기능은 각각의 문서 스타일을 유지하면서 안전하게 하나의 문서로 취합할 수 있는 장점이 있습니다.

저는 유사한 주제에 대한 질문과 답변을 찾아 정리해 보았습니다:

  1. A한글 문서를 문장단위(엔터)로 복사해서 B한글문서에 붙여넣기에서는 한글 문서의 내용을 다른 문서에 붙여넣는 방법에 대한 질문이 있었는데, 여기에는 각 문서를 열고 닫는 프로세스가 언급되었습니다. 이 부분을 응용하여 문서 끼워 넣기 기능을 구현할 때 기본적인 파일 읽기/쓰기에 대한 이해를 도울 수 있습니다.

  2. 누름틀 없는 한글문서 엑셀로 취합하기 응용 질문드려요에서는 여러 문서에서 데이터를 추출하여 하나의 데이터로 정리하는 응용 예제가 있어, 문서 병합과 관련된 작업을 이해하는데 도움이 될 것입니다.

  3. 특정 스타일의 텍스트만 복사하여 따로 저장하는 방법이 있을까요?에서는 스타일과 서식을 유지하거나 변경하는 방법에 대한 설명이 있습니다. 문서를 병합할 때 각 문서의 스타일을 유지하기 위한 팁을 얻을 수 있을 것입니다.

이러한 참고자료를 바탕으로 문서 병합 작업을 자동화할 때 중요한 몇 가지 포인트는 다음과 같습니다:
- 여러 파일을 자동으로 불러와 순차적으로 처리하는 파일 처리 로직 구현.
- 문서 내 특정 위치에 정확히 ‘문서 끼워 넣기’ 기능 할당을 자동화하는 방법에 대한 계획.
- 변화 없이 스타일과 서식을 유지하면서 문서를 병합할 수 있는지에 대한 실험적인 접근.

물론 이 작업은 처음 접하시는 분들에게 어려울 수 있으나, 강의 내 파일 처리, 문서 자동화 관련 내용을 중심으로 학습하시면서 실제로 구현해보실 수 있을 것입니다.

혹시 도움이 필요하시거나 궁금한 점이 있으시다면 언제든 질문 남겨주세요. 강사님과 커뮤니티의 도움을 받을 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

박주현님의 프로필 이미지
박주현

작성한 질문수

질문하기