Insert a picture

Drop an image into the active document via the v2 escape hatch

v1 의 app.insert_picture(...) ν—¬νΌλŠ” v2 슬림 νΌμ‚¬λ“œμ—μ„œ μ˜λ„μ μœΌλ‘œ μ œκ±°λ˜μ—ˆμŠ΅λ‹ˆλ‹€ (App public 멀버 82 β†’ 12). κ·Έλ¦Ό μ‚½μž…μ€ 두 κ°€μ§€ 길둜 계속 κ°€λŠ₯ν•©λ‹ˆλ‹€ β€” 호좜 ν™˜κ²½μ— 맞좰 μ„ νƒν•˜μ„Έμš”.

Note

Issue #3 β€” TypeError: ... unexpected keyword argument 'reverse': v1 헬퍼가 HWP COM μΈν„°νŽ˜μ΄μŠ€μ˜ λ§€κ°œλ³€μˆ˜ 이름과 λ‹€λ₯Έ ν‚€μ›Œλ“œλ₯Ό λ„˜κ²¨ λ°œμƒν–ˆλ˜ λ¬Έμ œμž…λ‹ˆλ‹€. v2 μ—μ„œλŠ” 헬퍼λ₯Ό κ±°μΉ˜μ§€ μ•Šκ³  COM λ©”μ„œλ“œ λ˜λŠ” actions.InsertPicture μ•‘μ…˜μ„ 직접 μ‚¬μš©ν•˜λ―€λ‘œ 이 λ¬Έμ œλŠ” μž¬λ°œν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

1. κ°€μž₯ 간단 β€” app.api.InsertPicture(...) 직접 호좜

app.api λŠ” raw HwpObject COM 핸듀이라, HWP COM λ©”μ„œλ“œλ₯Ό κ·ΈλŒ€λ‘œ λΆ€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

from pathlib import Path
from hwpapi import App

with App() as app:
    app.open("report.hwp")

    fpath = Path("logo.png").absolute().as_posix()
    app.api.InsertPicture(
        Path=fpath,
        Embedded=True,           # 이미지 μž„λ² λ“œ (μ™ΈλΆ€ 링크 X)
        sizeoption=2,            # 0=원본 크기, 2=κΈ€μžν¬κΈ° λΉ„μœ¨, 3=μˆ˜λ™
        Reverse=False,
        watermark=False,
        effect=0,                # 0=원본, 1=흑백, 2=νšŒμƒ‰μ‘°
    )

    app.save()
Warning

νŒŒλΌλ―Έν„° 이름 λŒ€μ†Œλ¬Έμž 주의 β€” HWP COM λ©”μ„œλ“œλŠ” IDL μ‹œκ·Έλ‹ˆμ²˜ λŒ€λ‘œ μΌ€μ΄μŠ€λ₯Ό λ§žμΆ°μ•Ό ν•©λ‹ˆλ‹€ (Path, Embedded, Reverse). 잘λͺ» μ“°λ©΄ TypeError: ... got an unexpected keyword argument κ°€ λ‚©λ‹ˆλ‹€. μ •ν™•ν•œ μ‹œκ·Έλ‹ˆμ²˜λŠ” ν•œμ»΄ SDK λ¬Έμ„œ λ˜λŠ” dir(app.api) 둜 ν™•μΈν•˜μ„Έμš”.

2. v2 μ•‘μ…˜ escape hatch β€” app.actions.InsertPicture

hwpapi.low.actions 의 μ•‘μ…˜ ν˜•νƒœλ‘œλ„ 호좜 κ°€λŠ₯ν•©λ‹ˆλ‹€. pset 으둜 νŒŒλΌλ―Έν„°λ₯Ό λ„˜κΈ°λŠ” νŒ¨ν„΄μ΄λΌ λ‹€λ₯Έ μ•‘μ…˜κ³Ό μΌκ΄€λ©λ‹ˆλ‹€.

from hwpapi import App

with App() as app:
    app.open("report.hwp")

    action = app.actions.InsertPicture
    pset = action.pset
    pset.Path = "logo.png"        # HWP κ°€ μ ˆλŒ€κ²½λ‘œλ‘œ λ³€ν™˜
    pset.Embedded = True
    action.run(pset)

    app.save()

3. μ •ν™•ν•œ μœ„μΉ˜μ— μ‚½μž…ν•˜κΈ°

λ¨Όμ € ν•„λ“œ/뢁마크/ν‘œ μ…€λ‘œ μ»€μ„œλ₯Ό μ΄λ™μ‹œν‚¨ λ‹€μŒ ν˜ΈμΆœν•©λ‹ˆλ‹€.

from hwpapi import App

with App() as app:
    app.open("template.hwp")

    # λˆ„λ¦„ν‹€λ‘œ 이동
    app.doc.fields["logo_slot"].goto()
    app.api.InsertPicture(Path="logo.png", Embedded=True, sizeoption=2)

    # λ˜λŠ” μ±…κ°ˆν”Όλ‘œ 이동
    app.doc.bookmarks.goto("appendix-figure-1")
    app.api.InsertPicture(Path="diagram.png", Embedded=True, sizeoption=0)

    app.save_as("out/report.hwp")

4. ν΄λ”μ˜ λͺ¨λ“  이미지 일괄 μ‚½μž…

from pathlib import Path
from hwpapi import App

with App() as app:
    app.open("report.hwp")

    for img in sorted(Path("figures").glob("*.png")):
        app.api.InsertPicture(
            Path=str(img.absolute()),
            Embedded=True,
            sizeoption=0,
        )
        app.api.Run("BreakPara")   # λ‹€μŒ μ€„λ‘œ 이동
        print(f"inserted {img.name}")

    app.save()

See also

Back to top