좌표를 다 맞게 넣었는데도 자동 생성한 장표에서 글자가 겹치는 이유와, 그걸 미리 잡아내는 방법을 알아보는 글입니다.
스크립트로 장표를 만들고 열어봤더니 아래쪽 글자가 위 글자를 뚫고 올라와 있었습니다.
좌표를 다시 확인했습니다. 상자 위치도 높이도 계산한 대로 들어가 있었습니다. 겹칠 이유가 없는 값이었습니다.
원인은 상자가 아니라 그 안에 들어간 글자였습니다. 상자 높이보다 글자가 더 컸습니다.
- 상자 크기와 글자가 실제로 차지하는 크기는 다르다
- python-pptx 는 글자를 그려보지 않으므로 그 크기를 모른다
- 좌표만 비교하는 검사는 이 겹침을 못 잡는다
- 실제 크기는 파워포인트에 물어봐야 알 수 있다
- 물어볼 수 있으면 자동으로 잡아낼 수 있다
1. 좌표는 맞는데 결과가 겹칩니다
상자를 아래위로 나란히 놓았습니다. 위 상자의 아래끝과 아래 상자의 위끝 사이에 여백까지 뒀습니다.

숫자로만 보면 문제가 없습니다. 위 상자가 끝나는 지점이 아래 상자가 시작하는 지점보다 위에 있습니다.
그런데 열어보면 겹쳐 있습니다. 상자가 겹친 게 아니라 글자가 상자 밖으로 흘러나와서 겹칩니다.
2. python-pptx 는 글자를 그려보지 않습니다
이유는 단순합니다. python-pptx 는 파일을 쓰는 도구이지 화면에 그리는 도구가 아니기 때문입니다.
우리가 지정하는 건 상자의 위치와 크기입니다. 그 안의 글자가 몇 줄이 되는지는 폰트, 글자 크기, 자간, 줄바꿈 규칙이 결정하는데, 그건 여는 쪽이 계산합니다.
- 우리가 정하는 것 : 상자의 좌표와 크기
- 여는 쪽이 정하는 것 : 글자가 실제로 차지하는 높이
- 둘이 어긋나면 글자가 상자 밖으로 나간다
글자가 넘칠 때 상자가 따라 늘어나게 하는 설정(auto_size)이 있긴 한데, 그건 여는 순간에 적용되는 것이라 파일에 저장된 좌표는 그대로입니다. 줄바꿈을 켜는 word_wrap 도 마찬가지로 몇 줄이 될지는 알려주지 않습니다. 그래서 저장된 값만 봐서는 여전히 알 수 없습니다.
3. 실제 크기는 파워포인트가 알고 있습니다
그리는 쪽이 계산한다면, 그리는 쪽에 물어보면 됩니다.
파워포인트를 자동화(COM)로 열면 각 도형에 대해 글자가 실제로 차지한 높이와 너비를 알려줍니다. TextFrame.TextRange 의 BoundHeight 와 BoundWidth 이고, 도형의 Height 와는 별개의 값입니다.

앞의 예제를 그대로 재보면 이렇게 나옵니다. 지정한 상자 높이는 42.5pt 인데 글자가 실제로 차지한 높이는 86.4pt 입니다. 두 배가 넘습니다.
그러니 상자는 212.6pt 에서 끝나지만 글자는 256.5pt 까지 내려옵니다.
4. 어느 값으로 비교하느냐가 결과를 가릅니다
같은 장표를 두 가지 방식으로 검사해 봤습니다.

- 상자 좌표로 비교 : 아래 상자가 215.4pt 에서 시작하므로 이상 없음
- 실제 글자로 비교 : 위 글자가 256.5pt 까지 내려오므로 41.1pt 침범
좌표만 보는 검사는 통과시킵니다. 그래서 검사를 돌려놓고도 겹친 장표가 그대로 나갑니다.
실제로 문제가 되는 건 사람이 눈으로 보는 결과물인데, 눈에 보이는 건 글자이지 상자가 아닙니다.
5. 잡았으면 고치는 방법은 셋입니다
계측이 되면 고치는 건 어렵지 않습니다. 넘친 양만큼 되돌리면 됩니다.
- 상자를 키운다 : 아래 여백이 있으면 가장 간단하다
- 글자 크기를 줄인다 : 넘친 비율만큼 낮춰서 다시 잰다
- 글자 수를 줄인다 : 앞의 둘이 안 되면 내용을 손봐야 한다
세 번째는 자동화로 못 합니다. 그러니 자동으로 할 수 있는 건 앞의 둘이고, 그걸로 안 되는 것만 사람에게 넘기면 손이 훨씬 덜 갑니다.
한 가지 주의할 게 있습니다. 글자 크기를 줄이면 줄 수가 달라져서 높이가 예측한 대로 안 줄어듭니다. 줄이고 나서 반드시 다시 재야 합니다.
6. 만들고 재고 고치는 것을 한 번에 돌립니다
한 번 재고 끝내면 고친 것 때문에 다른 데가 밀립니다. 그래서 재고 고치는 것을 반복으로 돌립니다.
- 생성한다
- 열어서 전체 도형을 잰다
- 넘친 것만 골라 상자나 글자 크기를 조정한다
- 다시 재서 남은 게 없을 때까지 반복한다
반복 횟수에 상한을 두고, 상한에 걸린 것만 목록으로 남겨 사람이 보게 하면 됩니다. 실제로 돌려보면 대부분은 한두 번에 정리되고 남는 건 글이 정말 긴 몇 장입니다.
여는 작업이 느리니 매번 돌리지 말고 최종본을 만들 때만 돌리는 편이 낫습니다.
7. 정리
자동 생성한 장표에서 글자가 겹치면 좌표 계산을 의심하게 되는데, 대부분은 좌표가 아니라 글자 크기를 몰랐던 것이 원인입니다.
정리하면 이렇습니다.
- 상자 크기와 글자가 차지하는 크기는 다른 값이다
- 만드는 쪽은 글자 크기를 모른다. 그리는 쪽이 안다
- 좌표만 비교하는 검사는 이 겹침을 통과시킨다
- 열어서 재면 실제 값을 얻을 수 있다
- 고친 뒤에는 반드시 다시 잰다
- 자동으로 못 고치는 것만 사람에게 넘긴다
문서를 자동으로 만들 때 가장 마지막에 남는 게 이 문제입니다. 내용은 코드로 채울 수 있어도 보기 좋은지는 그려봐야 알 수 있기 때문입니다. 그리는 쪽에 물어보는 경로를 한 번 만들어 두면 그다음부터는 계속 씁니다.
여기까지 python-pptx 장표의 글자 겹침 계측에 대해서 작성해봤습니다. 여기까지 읽어주셔서 감사합니다!
'일상' 카테고리의 다른 글
| Whisper 전사에서 같은 말만 수십 번 반복되고 대화가 사라질 때 (condition_on_previous_text) (0) | 2026.09.25 |
|---|---|
| 젠킨스에서 태그를 골라 배포했는데 master가 나갈 때 (Git Parameter와 Branch Specifier) (0) | 2026.09.25 |
| AES 암호화 결과가 매번 다를 때 (암호문 앞에 붙는 랜덤 IV) (0) | 2026.09.09 |
| 3.3% 떼고 받았는데 5월에 또 신고하라고 할 때 (원천징수는 세금이 아니라 선납) (0) | 2026.09.09 |
| AWS SES 535 Authentication Credentials Invalid 로 메일 발송이 막힐 때 (IAM 액세스 키와 SMTP 자격증명 차이) (0) | 2026.09.09 |