이미지와 구역
공통 add_picture()는 PNG/JPEG/GIF/BMP 시그니처를 인식하므로 알려진 이미지에서는 image_format을 생략할 수 있습니다. 모르는 형식은 명시해야 하며 포맷 엔진에서 지원하지 않는 형식은 거부될 수 있습니다.
"""Insert PNG bytes using a size explicit for both DOCX and HWPX."""
import base64
from pathlib import Path
from pywpdoc import Document, Mm
PNG = base64.b64decode(
"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII="
)
def run(fmt: str, out_dir: Path) -> Path:
out_dir.mkdir(parents=True, exist_ok=True)
doc = Document.new(fmt)
doc.add_paragraph("Image example")
picture = doc.add_picture(PNG, width=Mm(25.4), height=Mm(12.7))
assert abs(picture.width.mm - 25.4) < 0.05
path = out_dir / f"picture.{fmt}"
doc.save(path)
assert Document.open(path).pictures
return path
if __name__ == "__main__":
import sys
print(run(sys.argv[1], Path(sys.argv[2])))
실행 예: python examples/manual/pictures.py hwpx ./output (docx도 가능).
이미지 크기를 명시하세요. width=Mm(25.4), height=Mm(12.7)을 주면 두 포맷에서 물리적 크기를 맞출 수 있습니다. 너비 생략 시 DOCX는 이미지 원본 크기를 사용하고 HWPX는 기존 기본 너비 2인치를 사용합니다. DOCX의 현재 그림 삽입 API는 인라인만 지원합니다.
"""Portable section creation: no format-specific options."""
from pathlib import Path
from pywpdoc import Document
def run(fmt: str, out_dir: Path) -> Path:
out_dir.mkdir(parents=True, exist_ok=True)
doc = Document.new(fmt)
doc.add_paragraph("Section one")
section = doc.add_section() # portable, default position/start only
assert section is not None
doc.add_paragraph("Section two")
path = out_dir / f"sections.{fmt}"
doc.save(path)
return path
if __name__ == "__main__":
import sys
print(run(sys.argv[1], Path(sys.argv[2])))
공통 구역 API는 doc.add_section()입니다. DOCX의 start_type과 HWPX의 after는 의미와 시그니처가 다르므로 공통 호출에서 받지 않습니다. 각 포맷별 전용 API가 필요합니다.