Headers and footers

Insert page headers, footers, and page numbers programmatically

๋จธ๋ฆฌ๋ง(header) ๊ณผ ๊ผฌ๋ฆฌ๋ง(footer) ์€ HWP ์˜ ์ปจํŠธ๋กค(HeaderFooter) ์ด๋ผ, ์ผ๋ฐ˜ ๋ฌธ๋‹จ ํ…์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ์•ก์…˜์„ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. ์ด ๋ ˆ์‹œํ”ผ๋Š” ๊ฐ€์žฅ ์ž์ฃผ ์“ฐ๋Š” ๋จธ๋ฆฌ๋ง/๊ผฌ๋ฆฌ๋ง ์‹œ๋‚˜๋ฆฌ์˜ค 4๊ฐ€์ง€๋ฅผ ๋ฌถ์–ด ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

1. ๋ณธ๋ฌธ ์ƒ๋‹จ์— ๋จธ๋ฆฌ๋ง ํ…์ŠคํŠธ ํ•œ ์ค„

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()

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()

5. HeaderFooter ParameterSet ํ•„๋“œ ์š”์•ฝ

ํ•„๋“œ ์˜๋ฏธ ๊ฐ’
CtrlType ์ข…๋ฅ˜ 0 = ๋จธ๋ฆฌ๋ง, 1 = ๊ผฌ๋ฆฌ๋ง
Type ์œ„์น˜ 0 = ์–‘์ชฝ, 1 = ์ง์ˆ˜์ชฝ, 2 = ํ™€์ˆ˜์ชฝ
HeaderFooterCtrlType ํ•œ๊ธ€2007+ ์ข…๋ฅ˜ 0 = ๋จธ๋ฆฌ๋ง, 1 = ๊ผฌ๋ฆฌ๋ง
HeaderFooterStyle ๋งˆ๋‹น ์Šคํƒ€์ผ ํ•œ๊ธ€2007+
DialogOption ๋Œ€ํ™”์ƒ์ž โ€œํŽธ์ง‘โ€ ๋ฒ„ํŠผ ํ‘œ์‹œ 1 = ๋ณด์ด๊ธฐ
DialogResult ๋Œ€ํ™”์ƒ์ž ๊ฒฐ๊ณผ 1 = ๋งŒ๋“ค๊ธฐ, 2 = ํŽธ์ง‘

์ „์ฒด ์ •์˜๋Š” hwpapi/low/parametersets/sets/document.py:121 ์˜ HeaderFooter ํด๋ž˜์Šค ๋˜๋Š” Reference ํŽ˜์ด์ง€ ์—์„œ ํ™•์ธํ•˜์„ธ์š”.

See also

Back to top