from hwpapi import App
with App() as app:
app.open("report.hwp")
action = app.actions.HeaderFooter
pset = action.pset
pset.CtrlType = 0 # 0 = 머리말, 1 = 꼬리말
pset.Type = 0 # 0 = 양쪽, 1 = 짝수쪽, 2 = 홀수쪽
action.run(pset)
# 액션 실행으로 머리말 영역에 커서가 들어옴 — 그냥 입력
app.doc.insert_text("2026 Q1 — Internal Report")
# 본문으로 복귀
app.api.Run("CloseEx")
app.save()머리말과 꼬리말
프로그래밍 방식으로 페이지 머리말, 꼬리말, 페이지 번호 삽입
머리말(header) 과 꼬리말(footer) 은 HWP 의 컨트롤(HeaderFooter) 이라, 일반 문단 텍스트가 아닌 액션을 통해 만들어집니다. 이 레시피는 가장 자주 쓰는 머리말/꼬리말 시나리오 4가지를 묶어 보여줍니다.
1. 본문 상단에 머리말 텍스트 한 줄
2. 페이지 번호가 들어간 꼬리말
from hwpapi import App
with App() as app:
app.open("report.hwp")
# 꼬리말 진입
action = app.actions.HeaderFooter
pset = action.pset
pset.CtrlType = 1 # 꼬리말
pset.Type = 0 # 양쪽
action.run(pset)
# 가운데 정렬 후 "n / total" 형식 페이지 번호
app.api.Run("ParagraphShapeAlignCenter")
app.api.Run("AutoChangeMode") # 페이지 자동 변경 활성
app.api.Run("InsertPageNum") # 현재 페이지 번호
app.doc.insert_text(" / ")
app.api.Run("InsertPageCount") # 총 페이지 수
app.api.Run("CloseEx")
app.save()3. 짝수/홀수쪽 다른 머리말
양면 인쇄에서 흔한 패턴 — 짝수쪽엔 책 제목, 홀수쪽엔 장 제목.
from hwpapi import App
def insert_header(app, text: str, *, type_: int) -> None:
"""type_: 1=짝수쪽, 2=홀수쪽"""
action = app.actions.HeaderFooter
pset = action.pset
pset.CtrlType = 0
pset.Type = type_
action.run(pset)
app.api.Run(
"ParagraphShapeAlignLeft" if type_ == 2 else "ParagraphShapeAlignRight"
)
app.doc.insert_text(text)
app.api.Run("CloseEx")
with App() as app:
app.open("book.hwp")
insert_header(app, "한글 자동화 가이드", type_=1) # 짝수
insert_header(app, "Chapter 3 — Collections", type_=2) # 홀수
app.save()4. 모든 머리말/꼬리말 지우기
from hwpapi import App
with App() as app:
app.open("report.hwp")
# 한 번 호출에 모든 머리말/꼬리말 컨트롤 제거
app.api.Run("HeaderFooterDelete")
app.save()