인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

Hyunuk Seo님의 프로필 이미지

작성한 질문수

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

한글문서에서 스타일 초기화

해결된 질문

작성

·

1.3K

1

아래 질문남긴 사람입니다. ^^

 

혹시 바쁘시면 이부분만 하는 방법이 없을까요?

한글문서에서 폰트 전부 유지하고 스타일 전부 지우기

 

서현욱 올림.

 

답변 3

2

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

현욱님 안녕하세요!

예전 포스팅은 pywin32로 만들어진 거라 너무 코드가 어렵네요ㅜㅜㅜ

 

고민글에 방금 댓글을 남기고 오긴 했는데,
혹시 다른 분들께도 참고가 되면 좋을 것 같아,

여기에 한 번 더 적어둡니다.
내용은 동일합니다.

 

1. 모든 스타일을 "바탕글"로 초기화(글자/문단모양은 그대로)

최근에 pyhwpx 모듈에

hwp.get_style()hwp.set_style() 버그도 고치고,

hwp.shape_copy_paste()도 추가해 둬서(ver0.40)

구현이 훨씬 간결해졌습니다. (아래와 다르게 실행되거나 오류가 나는 경우 업데이트해주시면 됩니다.)

 

우선 실행화면을 보여드리면,

녹화_2024_10_11_22_47_22_201.gif

 (코드실행 후 본문과 셀 전부 바탕글로 변경되었습니다.)

from pyhwpx import Hwp

hwp = Hwp()  # 아래아한글 연결

# 본문 초기화
hwp.MoveDocBegin()  # 문서 시작으로 이동 후
while True:
    hwp.shape_copy_paste()  # 모양 복사(선택상태일 때는 붙여넣기가 됨)
    hwp.set_style("바탕글")  # 스타일 초기화
    hwp.MoveSelParaEnd()  # 문단 끝까지 선택
    hwp.shape_copy_paste()  # 복사한 글자,문단모양 붙여넣기(스타일은 제외)
    if not hwp.MoveNextParaBegin():  # 다음 문단으로 이동
        break  # 문서 끝이면 while문 종료

# 본문 외(셀, 글상자 등) 내부 초기화
i = 2  # 본문 외 영역이 있을 때(셀, 글상자, 각주미주, 캡션 등)
while hwp.set_pos(i,0,0):  # 해당영역 이동 후
    hwp.shape_copy_paste()  # 모양 복사
    hwp.set_style("바탕글")  # 스타일 초기화
    hwp.SelectAll()  # 셀 전체 선택
    hwp.shape_copy_paste()  # 스타일 붙여넣기
    i += 1  # 다음 영역으로

글자모양 스타일은 무시하였습니다만..
추가하는 게 어렵지는 않습니다.
혹시 필요하시면 댓글로 알려주세요.

하여튼 대략 위와 같은 과정으로 코딩하시면 되겠습니다.

(사실 스타일 없애는 수작업이랑 과정이 동일합니다.)

 

2. 특정 스타일 삭제하기

아래 목록도 (질문과 요청이 여러 번 있어서) pyhwpx에 hwp.set_style() 만들 때 같이 추가해 두었습니다.

 

hwp.get_style_dict(as_=dict|list) : 문서의 스타일 목록을 list[dict] 또는 dict[dict]로 가져오기

hwp.delete_style_by_name(src, dst) : src라는 특정 스타일을 삭제하고, 해당 내용은 dst스타일로 변경

hwp.get_style() : 현재위치 스타일의 번호, 타입(글자/문단), 이름 및 영문이름을 dict로 리턴

hwp.goto_style(style) : 해당 스타일로 이동(스타일인덱스번호나 스타일이름으로 지정 가능)

hwp.import_style(filepath) : 스타일파일 불러오기

hwp.export_style(filepath) : 스타일을 파일로 저장하기

녹화_2024_10_11_23_13_22_245.gif

 

하여튼 pyhwpx에 스타일 관련한 메서드는 이렇게 준비되어 있습니다.

 

예를 들어

가끔 엑셀파일 붙여넣기 작업을 오래 하다 보면

xlXX, td 같은 이름의 스타일이 엄청 많이 생겨 있는 걸 볼 수 있는데요.

443.png

 

이런 경우에 "xl~~"로 시작하는 스타일과 td를 전부 삭제하고 싶다면?

 

녹화_2024_10_12_00_23_01_551.gif

 

for i in hwp.get_style_dict():
    if i["name"].startswith("xl"):
        print(i["name"])
        hwp.delete_style_by_name(i["name"])
hwp.delete_style_by_name("td")

기존에 사용되는 스타일이 삭제되는 경우라면, 해당 구간은 모두 "바탕글"로 변경됩니다.
만약 바탕글이 아닌 다른 스타일로 대체하고 싶으면
hwp.delete_style_by_name("지울스타일", "대체할스타일")이라고 실행하시면 됩니다.
예를 들어
hwp.delete_style_by_name("xl66", "표가운데") 처럼요.

 

쓰다 보니 TMI스러운 이야기를 많이 붙였네요ㅜ

그래도 도움이 되었길 바랍니다.

 

행복한 하루 되세요!!^^

Hyunuk Seo님의 프로필 이미지
Hyunuk Seo
질문자

항상 많은 도움 받고 있습니다. 감사합니다.

1

Hyunuk Seo님의 프로필 이미지
Hyunuk Seo
질문자

모든 글자에 글자모양, 문단모양 변경없이 스타일 값만 바꿀 수 있... - 인프런 | 커뮤니티 질문&답변 (inflearn.com)

 

 

먼저 질문된게 있었네요 감사합니다.

이것만 있어도 일을 많이 줄일수 있을거 같아요

 

인턴 이거 소개해줘야지!!

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. Hyunuk Seo님.

한글 문서에서 폰트는 유지하면서 스타일을 모두 제거하는 방법에 대해 설명드리겠습니다. 스타일 정보 없이 글꼴을 유지하는 방법은 직접적인 기능이 한글에서 제공되진 않지만, 프로그래밍을 통해 해결할 수 있는 방법이 있습니다. 이를 통해 문서 내 각 텍스트의 스타일을 제거하면서 글꼴을 유지할 수 있습니다.

  1. 모든 스타일 정보를 초기화: 한글에서는 문서의 모든 스타일 정보를 제거하고 기본 스타일(바탕 글)로 설정하는 방법이 있습니다. 하지만 이는 글꼴 정보 역시 초기화할 수 있음을 주의해야 합니다.

  2. 텍스트 스타일 제거: 파이썬 등 프로그래밍 언어를 사용하여, 아래한글의 API를 통해서 특정 텍스트의 서식을 개별적으로 탐색하면서 스타일만을 제거하는 스크립트를 작성할 수 있습니다.

  3. 스크립트를 이용한 자동화: 프로그래밍적으로는 문서의 각 문단이나 텍스트를 탐색하면서 스타일만 제거하고, 현재 설정된 폰트를 별도로 저장하고 재설정하는 방법을 고려할 수 있습니다.

관련 유사한 문의 예제나 코드가 존재할 수 있으니, 스타일 및 개요 다루기와 같은 포럼 게시물을 참조하여 힌트를 얻을 수 있습니다.

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