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

Hyunuk Seo님의 프로필 이미지
Hyunuk Seo

작성한 질문수

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

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

해결된 질문

작성

·

137

1

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

 

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

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

 

서현욱 올림.

 

답변 3

1

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

현욱님 안녕하세요!

예전 포스팅은 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 인턴입니다. Hyunuk Seo님.

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

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

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

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

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

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

Hyunuk Seo님의 프로필 이미지
Hyunuk Seo

작성한 질문수

질문하기