본문 바로가기
아래아한글 자동화/pyhwpx 사용법

[pyhwpx 개발일지] 모든 파라미터를 API대로 만들 필요가 있을까? feat. insert_picture

by 일코 2024. 1. 11.

한/글에서 이미지를 삽입할 때 사용하는
InsertPicture 메서드에는
sizeoption이라는 파라미터가 들어있다.

이 파라미터는 다소 직관적이지 않은 부분이 있는데,
sizeoption 파라미터의 기본 동작은 아래와 같다.

0: 이미지 원래의 크기로 삽입한다. width와 height를 지정할 필요 없다.(realSize)
1: width와 height에 지정한 크기로 그림을 삽입한다.(specificSize)
2: 현재 캐럿이 표의 셀 안에 있을 경우, 셀의 크기에 맞게 자동 조절하여 삽입한다. (종횡비 유지안함)(cellSize)
   캐럿이 셀 안에 있지 않으면 이미지의 원래 크기대로 삽입된다.
3: 현재 캐럿이 표의 셀 안에 있을 경우, 셀의 크기에 맞추어 원본 이미지의 가로 세로의 비율이 동일하게 확대/축소하여 삽입한다.(cellSizeWithSameRatio)

어떤 부분이 아쉽냐면,

sizeoption=0은 대부분의 경우에 활용도가 떨어진다.
왜냐면 이미지 크기가 실제 페이지공간보다 큰 경우에 페이지를 넘어가버리는 등의 문제가 있기 때문이다.

sizeoption=1도 쓸모가 있나 싶다. width와 height를 직접 지정해야 하는데,
종횡비에 맞춰 일일이 이미지 너비와 높이를 지정해줘야 하는 불편함이 상당히 크다.

결국 쓸만한 건 2 또는 3인 것 같지만,
둘 다 표 바깥에서는 0처럼 작동하는 문제가 있고,
셀 안에서는 이미지 종횡비가 찌그러져버리거나(=2),
셀의 (작은)높이에 맞춰 엄청나게 작아져버리기 때문이다(=3).

게다가 일반사용자에게 가장 익숙한 동작은
이미지 높이에 맞춰 셀 높이를 조절하는 방식인데 
이는 sizeoption에 없다.

그래서 내린 결론은,

sizeoption를 파라미터에서 빼는 대신,
keep_ratio=True와 keep_cellheight=False를 기본값으로 주는 것이다.

keep_ratio=True인 경우에는 이미지에 맞춰 셀의 높이를 늘이도록,
동시에 keep_cellheight=True인 경우에는 셀의 높이를 그대로 두고 이미지 종횡비를 조절하도록 한다.
또한 width나 height를 임의로 파라미터에 넣을 때에는 이미지 크기를 임의조절할 수 있도록 할 예정이다.
그리고 두 경우 모두 표 바깥에서는 용지에서 여백을 제외한 본문영역을 넘지 않게 이미지를 줄인다.

기존의 (불만인) 틀에서 코드를 보완하려고 하니 적잖은 스트레스를 받았는데,
조금만 파라미터를 보완해도 훨씬 직관적인 메서드가 만들어진다. (이건 다분히 주관적임을 인정)

그래서 현재까지 개발된 모양은 아래와 같다.

기존의 API에 비해 훨씬 간결하다.

insert_picture 메서드 안에 용지크기나 셀의 크기를 조회해서
용지의 너비(또은 높이)나 셀의 너비보다 이미지가 큰 경우에는
강제로 이미지 크기를 너비에 맞춰준다. (이미지 종횡비는 바뀌지 않는다.)

"업무자동화" 또는 "문서자동화"를 목적으로 파이썬을 배우는 사용자라면
엄청나게 디테일(하고 다소 복잡)한 고급 메서드까지는 바라지 않으리라는 예측을 한꼬집 보태서
그냥 이렇게 단순하게 만들어버렸다.

이 코드를 커밋하고 나니 어떤 금기시된 선을 하나 넘어버린 느낌인데,
'기존의 API와 최대한 비슷하게 작동해야 한다'는 관념을 버리니 마음이 홀가분하다.
개인적으로는 아쉬운 부분이 해결된 것 같아 아주 만족스럽다.

 

댓글