Pewarta Proxy

๐Ÿ“‹ Server Request & Proxy Logs

Loading active proxy settings...
Developed by Khairul Adha (adhexa.id)
Mengambil log server...

โš™๏ธ Pengaturan Proxy Target

Skip to content

About

Pure Python HWPX automation: read, edit, generate, and validate documents without Hancom Office.

Topics

Resources

Contributing

Security policy

Stars

119 stars

Watchers

0 watching

Forks

Latest commit

ย 

History

1,453 Commits

Folders and files

Repository files navigation

python-hwpx

ํ•œ์ปด์˜คํ”ผ์Šค ์—†์ด ํ•œ/๊ธ€ ๋ฌธ์„œ(HWPXยทHWP)๋ฅผ ์ฝ๊ณ  ๊ณ ์น˜๊ณ  ๋งŒ๋“œ๋Š” ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

PyPI Downloads Python Tests Hancom open License

ํ•œ๊ตญ์–ด | English

HWPX๋Š” ZIP ์•ˆ์— XML(OWPML)์„ ๋‹ด์€ ํ˜•์‹์ด๋ผ, ํ•œ์ปด์˜คํ”ผ์Šค๊ฐ€ ์—†์–ด๋„ ํŒŒ์ด์ฌ๋งŒ์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. python-hwpx๋Š” WindowsยทmacOSยทLinuxยทCI ์–ด๋””์„œ๋‚˜ ๋Œ๊ณ  ์˜์กด์„ฑ์€ lxml ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. HWP 5.0(.hwp)๋„ ๊ฐ™์€ API๋กœ ์—ด๊ณ  ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๋งŒ๋“  ๋ฌธ์„œ๋Š” ํ•œ์ปด์˜คํ”ผ์Šค 2024์—์„œ ์ง์ ‘ ์—ด์–ด ๋ณด๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‚ ์งœ์™€ ํ•จ๊ป˜ ์•„๋ž˜์— ์ ์–ด ๋‘ก๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ

pip install python-hwpx      # Python 3.10+
from hwpx import HwpxDocument

doc = HwpxDocument.new()
doc.add_heading("2026 ์šด์˜๊ณ„ํš", level=1)
doc.add_paragraph("์ถ”์ง„ ๋ฐฐ๊ฒฝ", style="๊ฐœ์š” 2")  # ํ•œ/๊ธ€์ด "๊ฐ€." ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์ธ๋‹ค
doc.save_to_path("๊ณ„ํš.hwpx")

์Šคํƒ€์ผ์€ ์ด๋ฆ„์œผ๋กœ ๊ณ ๋ฆ…๋‹ˆ๋‹ค. ์—†๋Š” ์ด๋ฆ„์„ ์“ฐ๋ฉด ๊ทธ ์ค„์—์„œ ๋ฐ”๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค. ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ๊ณ ์น  ๋•Œ๋Š” HwpxDocument.open("๋ณด๊ณ ์„œ.hwpx")๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. .hwp๋„ ๋˜‘๊ฐ™์ด ์—ด๊ณ , save_to_path("๋ณด๊ณ ์„œ.hwp")๋กœ HWP 5.0์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์„œ ์ €์ž‘ยท์–‘์‹ ์ฑ„์›€ยท์‹œํ—˜์ง€ ์กฐํŒ ๊ฐ™์€ ์ƒ์œ„ ์›Œํฌํ”Œ๋กœ๊ฐ€ ํ•„์š”ํ•˜๋ฉด python-hwpx-automation์„ ํ•จ๊ป˜ ์„ค์น˜ํ•˜์„ธ์š”.

์˜ˆ์ „ ์„ค์น˜ ๋ช…๋ น์„ ์œ„ํ•ด pip install "python-hwpx[visual]"๋„ ๊ณ„์† ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด extra๋Š” ๋น„์–ด ์žˆ์–ด ๋ Œ๋”ยทPDF ์˜์กด์„ฑ์„ ์„ค์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ ์ผ์€ python-hwpx-automation[oracle]์ด ๋งก์Šต๋‹ˆ๋‹ค.

ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

  • ์ฝ๊ธฐยท์ถ”์ถœ: ํ…์ŠคํŠธยทHTMLยทMarkdown์œผ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค. ์„œ์‹, ํ‘œ ์•ˆ์˜ ํ‘œ, ๊ฐ์ฃผ๋ฅผ ์‚ด๋ฆฝ๋‹ˆ๋‹ค.
  • ํŽธ์ง‘: ๋ฌธ๋‹จยทํ‘œยท๊ทธ๋ฆผยท๋จธ๋ฆฌ๋ง/๊ผฌ๋ฆฌ๋งยท๋ฉ”๋ชจยท๊ฐ์ฃผ, ์ค„ ๊ฐ„๊ฒฉยท์—ฌ๋ฐฑยท์ชฝ ๋ฒˆํ˜ธ ๊ฐ™์€ ์„œ์‹์„ ๊ณ ์นฉ๋‹ˆ๋‹ค.
  • ์–‘์‹ ์ฑ„์šฐ๊ธฐ: ๋ผ๋ฒจ๋กœ ์นธ์„ ์ฐพ์•„ ๊ฐ’๋งŒ ๋„ฃ๊ณ  ์†๋Œ€์ง€ ์•Š์€ ๋ถ€๋ถ„์€ ๋ฐ”์ดํŠธ ๊ทธ๋Œ€๋กœ ๋‘ก๋‹ˆ๋‹ค. FormFit์€ ๊ฐ’์ด ์นธ์— ๋“ค์–ด๊ฐ€๋„๋ก ์ค„์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ๊ธ€์ž๋ฅผ ์ค„์ผ์ง€ ํ•œ/๊ธ€์˜ ๊ธ€์ž ํญ์œผ๋กœ ์žฌ์„œ ๊ณ ๋ฆ…๋‹ˆ๋‹ค.
  • ํ‘œ ๊ตฌ์กฐ ํŽธ์ง‘: ํ–‰ยท์—ด ๋„ฃ๊ธฐ์™€ ์ง€์šฐ๊ธฐ, ์นธ ๋‚˜๋ˆ„๊ธฐ์™€ ํ•ฉ์น˜๊ธฐ. doc.tables[0]์ฒ˜๋Ÿผ ๋ฒˆํ˜ธ๋กœ ํ‘œ๋ฅผ ๊บผ๋ƒ…๋‹ˆ๋‹ค.
  • ๋งŒ๋“ค๊ธฐยท์ผ๊ด„ ์ฒ˜๋ฆฌ: ์ƒˆ ๋ฌธ์„œ, ๋ชฉ์ฐจยท์ƒํ˜ธ ์ฐธ์กฐ, ๋ฉ”์ผ ๋จธ์ง€, ๋ฌธ์„œ ๋น„๊ต, ๋ณ€๊ฒฝ ์ถ”์ .
  • HWP 5.0: .hwp๋ฅผ HWPX๋กœ ์ฝ์–ด ๊ฐ™์€ API๋กœ ๊ณ ์น˜๊ณ  .hwp๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์˜ฎ๊ธฐ์ง€ ๋ชปํ•œ ๋‚ด์šฉ์€ document.conversion_report์— ๋‚จ์Šต๋‹ˆ๋‹ค.
  • ๋ฐฐ์น˜ ์ถ”์ •(์‹คํ—˜): estimate_pages๋Š” ํ•œ/๊ธ€ ์—†์ด ์ชฝ ์ˆ˜์™€ ์ค„๋งˆ๋‹ค์˜ ์ชฝยท์„ธ๋กœ ์œ„์น˜๋ฅผ ์ถ”์ •ํ•ฉ๋‹ˆ๋‹ค. write_line_caches๋Š” ํ•œ/๊ธ€์ด ์ €์žฅํ•  ๋•Œ ์“ฐ๋Š” ์ค„ ๋ฐฐ์น˜ ์ •๋ณด๋ฅผ, ํ•œ/๊ธ€๊ณผ ๊ฐ™์€ ๊ฐ’์„ ํ™•์‹คํžˆ ์•„๋Š” ๋ฌธ๋‹จ์—๋งŒ ์”๋‹ˆ๋‹ค. rhwp์ฒ˜๋Ÿผ ์ด ์ •๋ณด๋กœ ๊ทธ๋ฆผ ์ž๋ฆฌ๋ฅผ ์ฐพ๋Š” ๋ทฐ์–ด์—์„œ๋„ ๊ทธ๋ฆผ์ด ๋ณด์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์œผ๋กœ๋Š” ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ฒ€์ฆยท์•ˆ์ „: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๊ฒ€์‚ฌ CLI, ์ €์žฅ ์ „ ์—ด๋ฆผ ๊ฒ€์‚ฌ, ์ €์žฅ ๊ฒฐ๊ณผ ๋ณด๊ณ (return_report=True).

์ž์„ธํ•œ ๋‚ด์šฉ: 5๋ถ„ ํ€ต์Šคํƒ€ํŠธ ยท ์‚ฌ์šฉ ๊ฐ€์ด๋“œ ยท API ๋ ˆํผ๋Ÿฐ์Šค ยท ์˜ˆ์ œ ยท ์ง€์› ๋งคํŠธ๋ฆญ์Šค

์–‘์‹ ์ฑ„์šฐ๊ธฐ ์˜ˆ

doc = HwpxDocument.open("์‹ ์ฒญ์„œ.hwpx")
values = {
    "์„ฑ๋ช… > right": "ํ™๊ธธ๋™",
    "์†Œ์† > right": "ํ”Œ๋žซํผํŒ€",
}
result = doc.tables.fill_by_path(values)
if result["failed_count"] or result["applied_count"] != len(values):
    raise ValueError(result["failed"])
report = doc.save_to_path("์‹ ์ฒญ์„œ-์ž‘์„ฑ์™„๋ฃŒ.hwpx", mode="patch", fallback="error", return_report=True)

๋ผ๋ฒจ์ด ๊ฒน์น˜๊ฑฐ๋‚˜ ์—†์œผ๋ฉด ์‹คํŒจ๋กœ ๋Œ๋ ค์ฃผ๊ณ  ์ €์žฅํ•˜๊ธฐ ์ „์— ๋ฉˆ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. mode="patch"๋Š” ๊ณ ์น˜์ง€ ์•Š์€ ZIP ํŒŒํŠธ๋ฅผ ๋ฐ”์ดํŠธ ๊ทธ๋Œ€๋กœ ๋‘๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ๊ณ ์นœ ํŒŒํŠธ ์•ˆ์ชฝ๊ณผ ํ™”๋ฉด ๋ฐฐ์น˜๋Š” ๋”ฐ๋กœ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ €์žฅํ•œ ํŒŒ์ผ์„ ๋‹ค์‹œ ์—ด์–ด ๋‚ด์šฉ๊นŒ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•ˆ์ „ํ•œ ์“ฐ๊ธฐ ๊ณ„์•ฝ์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋…๋ฆฝ ์‹คํ–‰ ์˜ˆ์ œ๋กœ ํ‘œ์‹œํ•˜์ง€ ์•Š์€ ๋ธ”๋ก์€ ์—ฌ๋Ÿฌ๋ถ„์ด ๊ฐ€์ง„ ๋ฌธ์„œ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ์“ฐ๋Š” ์กฐ๊ฐ์ž…๋‹ˆ๋‹ค. ์˜ˆ์ œ๋ณ„ Python ๋ธ”๋ก ํŒ์ •์€ ์‹คํ–‰ ๊ธฐ๋ก์— ๋‚จ๊ฒจ ๋‘ก๋‹ˆ๋‹ค.

ํ•œ/๊ธ€๊ณผ ์–ผ๋งˆ๋‚˜ ๊ฐ™์€๊ฐ€

๋งŒ๋“  ํŒŒ์ผ์„ ์‹ค์ œ ํ•œ์ปด์˜คํ”ผ์Šค๋กœ ์—ด์–ด ๋ณด๊ณ  ๊ทธ๋Œ€๋กœ ์ ์Šต๋‹ˆ๋‹ค. ์ˆซ์ž๋งˆ๋‹ค ์žฐ ๋‚ ์งœ์™€ ํ”„๋กœ๊ทธ๋žจ ํŒ์„ ๋ถ™์ž…๋‹ˆ๋‹ค.

๋ฐฐ์น˜: python-hwpx 6.9 ์ดํ›„ main ยท 2026-10-25

๋ฌด์—‡์„ ์ •๋‹ต ๊ฒฐ๊ณผ
๊ณต๊ฐœ ์‹ค๋ฌธ์„œ 77๊ฑด์˜ ์ค„ ๋‚˜๋ˆ”์ด ๊ฐ™์€ ๋ฌธ๋‹จ ํ•œ์ปด์˜คํ”ผ์Šค 2024 (Windows)๊ฐ€ ๋ฐฐ์น˜ํ•ด ์ €์žฅํ•œ ๊ฒƒ 8,246 / 8,263 (99.8 %)
๊ทธ 77๊ฑด ์ค‘ ๋ชจ๋“  ์ค„์˜ ์ชฝยท์œ„์น˜๊ฐ€ ๊ฐ™์€ ๋ฌธ์„œ ๊ฐ™์Œ 76 / 77 (๋‚˜๋จธ์ง€ 1๊ฑด์€ ํ‘œ๊ฐ€ ๊นจ์ง„ ๋ฌธ์„œ)
์ค„ ๋ฐฐ์น˜ ์ •๋ณด๋ฅผ ์ง€์šด ์‚ฌ๋ณธ์œผ๋กœ ์ถ”์ •ํ•œ ์ชฝ ์ˆ˜๊ฐ€ ๊ฐ™์€ ๋ฌธ์„œ (๊ณต๊ฐœ 79 ยท ๋น„๊ณต๊ฐœ ์‹ค๋ฌธ์„œ 522 ยท ๊ธฐ๋Šฅ ์‹œํ—˜ ๋ฌธ์„œ 780) ๊ทธ ๋ฌธ์„œ๋ฅผ ์ €์žฅํ•œ ํ•œ/๊ธ€์˜ ์ชฝ ์ˆ˜ 1,344 / 1,381 (์ถ”์ •ํ•˜์ง€ ์•Š์Œ 16)

์—ด๋ฆผ: ํ•œ์ปด์˜คํ”ผ์Šค 12 (macOS)

  • ํ•œ์ปด์—์„œ ์—ด๋ฆผ 120/120, ๋ Œ๋” ๊ฒ€์ฆ 120/120: ๊ธฐ์ค€ ๋ฌธ์„œ์™€ ์ €์ž‘ ๊ธฐ๋Šฅ 6์ข…(๊ฐ์ฃผยท๋ˆ„๋ฆ„ํ‹€ยท์ˆ˜์‹ยท์ฐจํŠธยท์ฒดํฌ๋ฐ•์ŠคยทํŽธ์ง‘ ๊ณ„ํš)์„ ์ค„์—ฌ์„œ ์žฐ ๊ฒƒ (5.7.0 ยท 2026-08-03)
  • ํ•œ์ปด์—์„œ ์—ด๋ฆผ 476/476: ๋™๊ฒฐํ•œ ์ฝ”ํผ์Šค ์ „์ฒด(N=497) (3.4.1 ยท 2026-07-19)
  • ๊ณ ์น˜์ง€ ์•Š์€ ์˜์—ญ์˜ ๋ฐ”์ดํŠธ ๋ณด์กด 497/497, ๊ฐœ์ธ์ •๋ณด ์œ ์ถœ 0
  • ๋ Œ๋” ๊ฒ€์ฆ 416/476: ํ•œ์ปด์ด PDF ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ๊ฑฐ๋ถ€ํ•œ 43๊ฑด๋„ ๋นผ์ง€ ์•Š๊ณ  ์…Œ์Šต๋‹ˆ๋‹ค.

ChatGPT ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ python-hwpx๋กœ ์ƒ์„ฑํ•œ HWPX ๋ฌธ์„œ๋ฅผ ์‹ค์ œ ํ•œ์ปด์˜คํ”ผ์Šค์—์„œ ์—ฐ ๋ชจ์Šต

ChatGPT ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ ๋งŒ๋“  ๋ฌธ์„œ๋ฅผ ์‹ค์ œ ํ•œ์ปด์˜คํ”ผ์Šค๋กœ ์—ฐ ๋ชจ์Šต.

์ „์ฒด ์ˆซ์ž์™€ ์ฃผ์˜ํ•  ์ ์€ ์‹ค์ธก ์ฝ”ํผ์Šค ๋ฉ”ํŠธ๋ฆญ์—, ๊ธฐ๋Šฅ๋ณ„ ๋“ฑ๊ธ‰์€ ์ง€์› ๋งคํŠธ๋ฆญ์Šค์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ˆซ์ž๋“ค์€ "๋งŒ๋“  ํŒŒ์ผ์„ ํ•œ/๊ธ€์ด ์–ด๋–ป๊ฒŒ ๋ฐ›๋Š”๊ฐ€"๋ฅผ ์žฐ ๊ฒƒ์ด๊ณ  ํŒŒ์„œ๊ฐ€ ๋ฌธ์„œ๋ฅผ ์–ผ๋งˆ๋‚˜ ์ž˜ ์ฝ๋Š”์ง€์™€๋Š” ๋‹ค๋ฅธ ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๋‹จ๊ณ„๋Š” Beta์ž…๋‹ˆ๋‹ค. ํ•˜์œ„ ํ˜ธํ™˜์„ ์ง€ํ‚ค๋Š” ๋ฒ”์œ„๋Š” ์•ˆ์ • API ํ‘œ๋ฉด์— ์ ํ˜€ ์žˆ๊ณ , hwpx.experimental๊ณผ ์œ„์—์„œ "์‹คํ—˜"์ด๋ผ๊ณ  ์ ์€ ๊ธฐ๋Šฅ์€ ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋””์„œ ์“ฐ๋‚˜

ํ™˜๊ฒฝ ๋ฐฉ๋ฒ•
๋กœ์ปฌยท์„œ๋ฒ„ ํŒŒ์ด์ฌ pip install python-hwpx (์Šคํฌ๋ฆฝํŠธยท๋ฐฐ์น˜ยทCI)
ํŒŒ์ด์ฌ ์ž๋™ํ™” (MCP ์—†์ด) pip install python-hwpx-automation (์ €์ž‘ยท์–‘์‹ ์ฑ„์›€ยท๊ฒ€์ฆ ์›Œํฌํ”Œ๋กœ)
์ผ๋ฐ˜ ChatGPT ๋Œ€ํ™” .hwpx์™€ Release wheel์„ ํ•จ๊ป˜ ์˜ฌ๋ ค ๋Œ€ํ™” ์•ˆ์—์„œ ์„ค์น˜(์•ˆ๋‚ด)
ChatGPT MCP ์•ฑ python-hwpx-automation์˜ MCP adapter๋ฅผ ์ปค๋„ฅํ„ฐ๋กœ ๋“ฑ๋ก
Codex ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ํ”Œ๋Ÿฌ๊ทธ์ธ hwpx-plugins ์„ค์น˜
Claude Code ยท Hermes ยท OpenClaw ๊ฐ™์€ MCP ์„œ๋ฒ„๋ฅผ ๊ฐ ํด๋ผ์ด์–ธํŠธ์— ๋“ฑ๋ก (python-hwpx-automation)

์ผ๋ฐ˜ ChatGPT ๋Œ€ํ™”์— hwpx ์–‘์‹์„ ์˜ฌ๋ ค ์ง€๋„์•ˆ ์ž‘์„ฑ์„ ๋ถ€ํƒํ•˜๊ณ , ์–‘์‹์ด ์œ ์ง€๋œ ์ฑ„ ์ฑ„์›Œ์ง„ ๋ฌธ์„œ๋ฅผ ๋Œ๋ ค๋ฐ›๋Š” ํ™”๋ฉด

์ผ๋ฐ˜ ChatGPT ๋Œ€ํ™”์—์„œ ์–‘์‹ .hwpx๋ฅผ ์˜ฌ๋ฆฌ๊ณ  ๋ถ€ํƒํ•˜๋ฉด, ์„œ์‹์€ ๊ทธ๋Œ€๋กœ์ด๊ณ  ๊ฐ’๋งŒ ์ฑ„์šด ๋ฌธ์„œ๊ฐ€ ๋Œ์•„์˜ต๋‹ˆ๋‹ค.

ChatGPT ์ฑ„ํŒ…์˜ ํŒŒ์ด์ฌ ํ™˜๊ฒฝ์€ PyPI์— ์ ‘์†ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ตœ์‹  Release์˜ python_hwpx-*.whl์„ ๋ฌธ์„œ์™€ ํ•จ๊ป˜ ์˜ฌ๋ฆฌ๊ณ  ์ด๋ ‡๊ฒŒ ๋ถ€ํƒํ•ฉ๋‹ˆ๋‹ค.

์ฒจ๋ถ€ํ•œ python_hwpx-*.whl ์„ pip ๋กœ ์„ค์น˜ํ•œ ๋‹ค์Œ(pip install /mnt/data/python_hwpx-*.whl),
์ด .hwpx ํŒŒ์ผ์„ python-hwpx ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์—ด์–ด์„œ ์ž‘์—…ํ•ด์ค˜.
์–‘์‹๊ณผ ์„œ์‹์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ , โ—‹โ—‹๋งŒ ๋ฐ”๊ฟ”์„œ ์ƒˆ ํŒŒ์ผ๋กœ ๋Œ๋ ค์ค˜.

์„ค์น˜๋ถ€ํ„ฐ ๊ฒฐ๊ณผ ํŒŒ์ผ๊นŒ์ง€ ๋Œ€ํ™” ์•ˆ์—์„œ ๋๋‚˜๋ฏ€๋กœ ๋‚ด ์ปดํ“จํ„ฐ์— ํŒŒ์ด์ฌ์ด ์—†์–ด๋„ ๋ฉ๋‹ˆ๋‹ค. wheel์˜ ์˜์กด์„ฑ์€ lxml ํ•˜๋‚˜์ด๊ณ  ์‹คํ–‰ ํ™˜๊ฒฝ์— ์—†์œผ๋ฉด lxml wheel๋„ ํ•จ๊ป˜ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ์šฉ ์ง€์‹œ๋ฌธ์€ AI ์ฑ„ํŒ… ํ™˜๊ฒฝ์—์„œ ์“ฐ๊ธฐ์—, AI ๋„๊ตฌ๊ฐ€ API๋ฅผ ์ •ํ™•ํžˆ ์ตํžˆ๋„๋ก ๋งŒ๋“  llms.txt๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €์žฅ์†Œ ์—ญํ• 
๐Ÿ“ฆ python-hwpx HWPX ๋ฌธ์„œ๋ฅผ ์ฝ๊ณ ยท๊ณ ์น˜๊ณ ยท๋งŒ๋“œ๋Š” ์ˆœ์ˆ˜ ํŒŒ์ด์ฌ ์—”์ง„
๐Ÿ”Œ python-hwpx-automation ์ €์ž‘ยท์–‘์‹ ์ฑ„์›€ ์›Œํฌํ”Œ๋กœ, hwpx CLI, ์„ ํƒํ˜• MCP ์„œ๋ฒ„
๐ŸŽฏ hwpx-plugins ์—์ด์ „ํŠธ๊ฐ€ ์•Œ๋งž์€ ๋„๊ตฌ๋ฅผ ๊ณ ๋ฅด๋„๋ก ๋•๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ/์Šคํ‚ฌ ๋ฒˆ๋“ค

๋น„๊ต

python-hwpx pyhwpx pyhwp
๋‹ค๋ฃจ๋Š” ํ˜•์‹ .hwpx, .hwp (HWP 5.0) ์ฝ๊ธฐยท์“ฐ๊ธฐ .hwpx .hwp (v5 ๋ฐ”์ด๋„ˆ๋ฆฌ)
ํ•œ/๊ธ€ ์„ค์น˜ ํ•„์š” ์—†์Œ ํ•„์š” (Windows COM) ํ•„์š” ์—†์Œ
์šด์˜์ฒด์ œ Linux / macOS / Windows / CI Windows ์ „์šฉ Linux / macOS / Windows
ํŽธ์ง‘ยท์ƒ์„ฑ โœ… โœ… (ํ•œ/๊ธ€์ด ํ•จ) ๋Œ€๋ถ€๋ถ„ ์ฝ๊ธฐ
ํ•œ/๊ธ€ ์—†์ด ์ชฝ ์ˆ˜ ์ถ”์ • โœ… (์‹คํ—˜) ํ•œ/๊ธ€์ด ๊ณ„์‚ฐ โŒ
AI ์—์ด์ „ํŠธ ์—ฐ๋™ (MCP) โœ… (automation ๊ฒฝ์œ ) โŒ โŒ

์•Œ๋ ค์ง„ ์ œ์•ฝ

  • add_shape()ยทadd_control()์€ ์ €์ˆ˜์ค€ ํƒˆ์ถœ๊ตฌ๋ผ, ๊ทธ๋Œ€๋กœ ์ €์žฅํ•˜๋ฉด ํ•œ/๊ธ€์ด ์—ด์ง€ ๋ชปํ•˜๋Š” ํŒŒ์ผ์ด ๋ฉ๋‹ˆ๋‹ค(๋ถ€๋ฅผ ๋•Œ ๊ฒฝ๊ณ ๋งŒ ๋‚˜์˜ต๋‹ˆ๋‹ค). ๋„ํ˜•์€ ํ•œ/๊ธ€์ด ์š”๊ตฌํ•˜๋Š” ํ•˜์œ„ ์š”์†Œ๊นŒ์ง€ ๋งŒ๋“œ๋Š” add_line()ยทadd_rectangle()ยทadd_ellipse()ยท add_arc()ยทadd_polygon()ยทadd_curve()ยทadd_connector()ยทadd_container()(๋ฌถ์Œ)๋ฅผ, ์ปจํŠธ๋กค์€ add_column_definition()ยทadd_bookmark()ยทadd_hyperlink()๋ฅผ ์“ฐ์„ธ์š”.
  • ๊ทธ๋ฆผ์€ ๋ฐ๊ธฐยท๋Œ€๋น„ยทํšŒ์ƒ‰์กฐยทํ‘๋ฐฑยทํˆฌ๋ช…๋„, ์‹ค์„  ํ…Œ๋‘๋ฆฌ, ์ž๋ฅด๊ธฐ(crop), ๊ทธ๋ฆผ์žยท๋น›๋‚จยท๋ถ€๋“œ๋Ÿฌ์šด ๊ฐ€์žฅ์ž๋ฆฌยท๋ฐ˜์‚ฌ (shadowยทglowยทsoft_edgeยทreflection)๋ฅผ add_picture() ์ธ์ž๋กœ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋’ค์ง‘๊ธฐ์™€ ํšŒ์ „์€ ์•„์ง ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
  • ์ชฝ ์ˆ˜ ์ถ”์ •๊ณผ ์ค„ ๋ฐฐ์น˜ ์ •๋ณด ์“ฐ๊ธฐ๋Š” ์‹คํ—˜ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ฅด์ง€ ๋ชปํ•˜๋Š” ์š”์†Œ๊ฐ€ ์žˆ์œผ๋ฉด ์ถ”์ •ํ•˜์ง€ ์•Š๊ณ  ๊นŒ๋‹ญ์„ ๋Œ๋ ค์ค๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์ค„ ๋ฐฐ์น˜ ์ •๋ณด ์—†์ด ๊ธ€์ž ๊ฒฉ์ž๋ฅผ ์“ฐ๋Š” ๋ฌธ๋‹จ, ๊ทธ๋ฆฌ๊ณ  ํ‘œ ์นธ ์•ˆ์—์„œ ๊ธ€ ์‚ฌ์ด์— ๋†“์ด๊ฑฐ๋‚˜ ๋–  ์žˆ๋Š” ํ‘œ ๊ฐ€์šด๋ฐ ์ชฝ ๋์ด ์–ด์šธ๋ฆผยท๊ธ€ ๋’คยท์•ž ํ‘œ๋‚˜ ์—ฌ๋Ÿฌ ์ค„์งœ๋ฆฌ ํ–‰์„ ๊ฐ€๋กœ์ง€๋ฅด๋Š” ๊ฒฝ์šฐ๊ฐ€ ์—ฌ๊ธฐ์— ๋“ญ๋‹ˆ๋‹ค. ๊ทธ ๋ฐ–์˜ ์นธ ์•ˆ ํ‘œ๋Š” ์ชฝ ๋์—์„œ ํ–‰ ์‚ฌ์ด๋กœ ๋‚˜๋‰˜๋Š” ๊ฒƒ๊นŒ์ง€ ํ•œ/๊ธ€์ฒ˜๋Ÿผ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. ํ‘œ๋ฅผ ์ฝ๊ณ  ๊ณ ์น˜๋Š” ๊ธฐ๋Šฅ์€ ์ด์™€ ์ƒ๊ด€์—†์ด ํ‘œ ์•ˆ์˜ ํ‘œ๊นŒ์ง€ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
  • ์•”ํ˜ธ๋ฅผ ๊ฑด HWPX์™€ ์•”ํ˜ธยท๋ฐฐํฌ์šฉ HWP๋Š” ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(HWP๋Š” Hwp5Error๋กœ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค).

๊ธฐ์—ฌํ•˜๊ธฐ

help wanted ยท ๋กœ๋“œ๋งต ยท Discussions ยท CONTRIBUTING

HWPX ๋‚ด๋ถ€ ๊ตฌ์กฐ๊ฐ€ ์ฒ˜์Œ์ด๋ผ๋ฉด ๋‚ด๋ถ€ ์‹ค์ „ ๊ฐ€์ด๋“œ๋ถ€ํ„ฐ ๋ณด์„ธ์š”. ์‹ค์ œ ํ•œ/๊ธ€ ๋™์ž‘์œผ๋กœ ํ™•์ธํ•œ ์กฐํŒ ์บ์‹œ, ๋ชฉ์ฐจ ํ•„๋“œ, OPC ์žฌ์••์ถ• ๊ฐ™์€ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ฐœ API์˜ ์•ˆ์ • ๋ฒ”์œ„๋Š” ์•ˆ์ • API ํ‘œ๋ฉด, ๊ณ„์ธต ์‚ฌ์ด์˜ ์†Œ์œ ๊ถŒ์€ ์ œํ’ˆ ๊ฒฝ๊ณ„ ๋ฌธ์„œ์— ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ์˜ ๋ง

์•„๋ž˜ ๊ณต๊ฐœ ํ‘œ์ค€๊ณผ ํ”„๋กœ์ ํŠธ์— ๋นš์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

License ยท Maintainer

Apache-2.0 (LICENSE ยท NOTICE) ยท Kohkyuhyun @airmang ยท kokyuhyun@hotmail.com

About

Pure Python HWPX automation: read, edit, generate, and validate documents without Hancom Office.

Topics

Resources

Contributing

Security policy

Stars

119 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages