해결된 질문
작성
·
124
답변 1
2
안녕하세요?
아래의 샘플문서를 가지고 설명을 드리겠습니다.
https://drive.google.com/file/d/1P5EPY4QHjTUXGAFi7QxQ1IrXgrCGdfhd/view?usp=sharing
문서 내 모든 바탕쪽을 제거하는 가장 간단한 방법은,
pyhwpx를 최신버전으로 설치하신 뒤(현재 0.35.1),
아래 코드를 실행하시면 됩니다.
from pyhwpx import Hwp
hwp = Hwp()
hwp.DeleteDocumentMasterPage()
조금 부연설명을 드리면,
바탕쪽은 특이하게 "구역" 개념을 사용하고, 컨트롤의 위치가 보이지 않는 게 특징입니다. 미주나 각주, 표, 그림 등은 "컨트롤"이라 불리는 개체로 수정/삭제가 가능한 반면, 바탕쪽은 그냥 구역의 바탕쪽 편집에 들어가 내용을 지우면 됩니다. 구체적으로는 바탕쪽 편집상태에서 Run("DeleteDocumentMasterPage")를 실행하거나(문서의 모든 바탕쪽 제거), Run("DeleteSectionMasterPage")를 실행(현재 구역의 바탕쪽만 제거)하면 됩니다. pyhwpx에서는 두 가지 기능 모두 메서드 형태로 제공하고 있으므로, 간편하게 바탕쪽을 제거하실 수 있습니다.
머리말, 꼬리말을 제거하는 코드는 아래와 같습니다.
from pyhwpx import Hwp
hwp = Hwp()
for ctrl in hwp.ctrl_list:
if ctrl.UserDesc.startswith("머리말") or ctrl.UserDesc.startswith("꼬리말"):
hwp.DeleteCtrl(ctrl)
머리말이나 꼬리말은 단순한 컨트롤이므로
컨트롤을 순회하면서 DeleteCtrl을 실행하시면 됩니다.
미주 장식이 정확히 뭘 의미하는지 몰라서ㅜ
우선 미주를 제거하는 코드를 보여드립니다.
(사실 위의 머리말, 꼬리말 제거 코드와 거의 유사합니다.)
for ctrl in hwp.ctrl_list:
if ctrl.UserDesc.startswith("미주"):
hwp.DeleteCtrl(ctrl)
아래아한글의 find 액션을 활용하시는 걸 추천드립니다.
아래와 같은 방식으로 find 메서드를 쓰실 수 있습니다.
(참고로 ^n
은 아래아한글의 "줄바꿈"을 의미합니다.)
while True:
hwp.MoveDocBegin()
if hwp.find("^n^n"):
hwp.find_replace("^n^n", "^n")
# 또는 단순히 hwp.BreakPara()
else:
break
사실 가장 간단하고 예외 없는 문서를 가지고 시연을 해드려서
실제 복잡한 문서에서는 여러가지 예외사항이 발생할 수 있습니다.
실행해보시고, 적용해보시면서
오류가 나거나 이해가 안 가게 작동하는 부분이 있다면
추가댓글 남겨주시기 바랍니다.
행복한 하루 되세요^^
아래아한글에서 페이지 또는 단을 바꾸는 표시가 ^n 외에 무엇인가 또 있나보군요 ㅠㅠ 찾아보겠습니다. 미주 장식은 미주 또는 각주를 표시할 때 나타나는 밑줄 부분을 말씀드린 것입니다.
앗, ^n
은 특수하게 찾기/찾아바꾸기에만 쓰이는 기호입니다.
일반적으로 줄바꿈을 삽입할 때에는 insert_text 메서드로
문자열 \r\n
(또는 \r
) 을 입력하시거나,
혹은 hwp.BreakPara() 메서드로 직접 줄바꿈을 삽입하실 수 있습니다.
그 외의 줄바꿈은
hwp.BreakLine(), # 줄 나눔, Shift-Enter
hwp.BreakPage(), # 쪽나누기, Ctrl-Enter
hwp.BreakColumn() # 단 나누기(배분다단), Ctrl-Shift-Enter
hwp.BreakSection() # 구역 나누기 Shift-Alt-Enter
hwp.BreakColDef() # 단 정의 삽입, Ctrl-Alt-Enter
등의 메서드를 사용하시면 됩니다^^
아래아한글 조작하듯 하시면 됩니다.
왼쪽에서 hwp.Delete()를 싱행하시거나,
오른쪽에서 hwp.DeleteBack()을 실행하시거나요.
지워야 할 줄바꿈이 여러 개라면, 찾아가는 방식을 결정해야 합니다. 제일 간단한 방법은, 위에서 보여드린 찾기/찾아바꾸기를 실행하는 방법입니다.
구체적인 예시를 들어주시면 해법을 알려드리겠습니다^^
답변 감사합니다.