AI 해결 노트 · 2026-09-18 · 실측 2026-09-18

엑셀을 PDF로 저장하면 오른쪽 열이 잘릴 때 — 너비 1페이지 맞춤 실측

한 줄로

12열짜리 표를 손대지 않고 PDF로 저장하니 A4 6쪽이 나오고 1쪽에는 앞의 5열만 담겼습니다. 용지를 가로로 바꾸니 4쪽에 7열, 여기에 「너비: 1페이지」를 더하니 2쪽에 12열이 전부 들어갔습니다. 용지 방향만으로는 모자랐고, 배율을 자동 맞춤으로 돌려야 잘림이 없어졌습니다.

증상

실측 환경

항목
OSMicrosoft Windows 11 Home 10.0.26200 (build 26200)
PowerShell 7.6.6
엑셀Excel 16.0, build 20326, 언어 코드 82
기본 프린터Ne01:에 있는 Hancom PDF
시험 파일직접 만든 더미 매출표 — 12열 × 45행(머리글 포함 46행), UsedRange A1:L46
열 구성거래일자·거래처코드·거래처명·담당자·지역·품목코드·품목명·규격·수량·단가·공급가액·부가세
PDF 저장Excel COM Worksheet.ExportAsFixedFormat(0, 경로)
쪽수 세기Python 3.12.10 + PyMuPDF 1.28.0

거래처명·담당자·지역은 random.choice 로 고른 지어낸 값입니다(홍길동·김철수·이영희·박민수, 가나상사·다라산업 등). 회사 파일은 열지 않았습니다.

세 가지 조건으로 저장해 봤습니다

같은 파일을 손대지 않은 상태, 용지 방향만 바꾼 상태, 너비 맞춤까지 켠 상태로 각각 PDF로 저장했습니다. 아래는 실제로 돌린 스크립트에서 설정 부분만 뽑은 것입니다.

$xl = New-Object -ComObject Excel.Application
$xl.Visible = $false
$wb = $xl.Workbooks.Open("$T\E1_매출표.xlsx")
$ws = $wb.Worksheets.Item(1)

# 조건1 — 아무것도 건드리지 않고 저장
$ws.ExportAsFixedFormat(0, "$T\E1_21_a_기본.pdf")

# 조건2 — 용지 방향만 가로 (2 = xlLandscape)
$ws.PageSetup.Orientation = 2
$ws.ExportAsFixedFormat(0, "$T\E1_21_b_가로.pdf")

# 조건3 — 가로 + 너비 1페이지 맞춤
$ws.PageSetup.Zoom = $false
$ws.PageSetup.FitToPagesWide = 1
$ws.PageSetup.FitToPagesTall = $false
$ws.ExportAsFixedFormat(0, "$T\E1_21_c_너비1.pdf")

나온 PDF의 쪽수를 세고, 각 쪽 본문에 열 이름 12개 중 몇 개가 들어 있는지 확인했습니다.

import fitz
headers = ["거래일자","거래처코드","거래처명","담당자","지역","품목코드",
           "품목명","규격","수량","단가","공급가액","부가세"]
doc = fitz.open("E1_21_a_기본.pdf")
p1 = doc[0].get_text()
print(doc.page_count, [h for h in headers if h in p1])

결과

조건용지배율 설정PDF 쪽수1쪽에 담긴 열1쪽에서 밀려난 열
1 · 손대지 않음세로 A4 (595×842pt)Zoom=1006쪽5개 (거래일자~지역)7개
2 · 용지 가로가로 A4 (842×595pt)Zoom=1004쪽7개 (거래일자~품목명)5개
3 · 가로 + 너비 1페이지가로 A4 (842×595pt)Zoom=False, Wide=12쪽12개 전부없음

조건 1에서 1쪽 밖으로 밀려난 열은 품목코드·품목명·규격·수량·단가·공급가액·부가세였습니다. 이 열들은 3쪽과 5쪽에 나뉘어 실렸습니다. 2·4·6쪽은 행이 이어지는 쪽이어서 열 이름이 한 개도 없었습니다.

조건1 — 세로 그대로 저장한 PDF 1쪽. 지역 열까지만 담겼다
조건1 — 세로 그대로 저장한 PDF 1쪽. 지역 열까지만 담겼다
조건2 — 용지만 가로로 바꾼 PDF 1쪽. 품목명까지 들어왔지만 규격부터 다시 잘린다
조건2 — 용지만 가로로 바꾼 PDF 1쪽. 품목명까지 들어왔지만 규격부터 다시 잘린다
조건3 — 너비 1페이지 맞춤을 켠 PDF 1쪽. 부가세까지 12열이 모두 들어왔다
조건3 — 너비 1페이지 맞춤을 켠 PDF 1쪽. 부가세까지 12열이 모두 들어왔다

용지만 가로로 바꿔서는 모자랍니다

조건 1에서 PageSetup 값을 그대로 찍어 보면 이렇습니다.

Orientation      = 1   (1=xlPortrait)
PaperSize        = 9   (9=xlPaperA4)
Zoom             = 100
FitToPagesWide   = 1
FitToPagesTall   = 1

FitToPagesWide 가 이미 1인데도 6쪽이 나왔습니다. 조건 3에서는 조건 2에 견줘 ZoomFalse 로, FitToPagesTallFalse 로 바꿨고, 그때 12열이 한 쪽에 들어갔습니다.

Orientation      = 2
Zoom             = False
FitToPagesWide   = 1
FitToPagesTall   = False

조건 1·2에서는 FitToPagesWide=1 이 저장돼 있었는데도 Zoom=100 인 채로 열이 여러 쪽에 나뉘었습니다. 화면의 「페이지 설정」 대화상자에서도 「확대/축소 배율」과 「자동 맞춤」이 라디오 버튼 두 개로 갈라져 있어, 한쪽을 고르면 다른 쪽 칸이 회색이 됩니다. 다만 COM으로 Zoom = $false 를 준 뒤 그 라디오가 어느 쪽으로 옮겨 가는지 화면으로 확인하지는 않았습니다.

FitToPagesTallFalse 로 둘 때와 1로 둘 때도 재 봤습니다.

FitToPagesTall쪽수PDF 안에서 가장 많이 쓰인 글자 크기
False (높이는 알아서)2쪽7.68pt
1 (높이도 한 쪽에)1쪽6.36pt

1을 넣으면 한 장으로 줄어드는 대신 글자가 7.68pt에서 6.36pt로 작아졌습니다. 45행짜리 표에서 잰 값이고, 행이 더 많은 표에서는 재 보지 않았습니다.

화면에서 하는 법 (Excel 16.0 한국어)

리본에서는 페이지 레이아웃 탭 하나로 끝납니다. 이 탭에는 「테마 / 페이지 설정 / 크기 조정 / 시트 옵션 / 정렬」 다섯 그룹이 있습니다.

페이지 레이아웃 탭 — 페이지 설정 그룹과 크기 조정 그룹(너비·높이·배율)
페이지 레이아웃 탭 — 페이지 설정 그룹과 크기 조정 그룹(너비·높이·배율)

대화상자로 하려면 「페이지 설정」 그룹 오른쪽 아래의 작은 화살표를 누릅니다. 창 제목이 「페이지 설정」이고, [페이지] 탭의 '배율' 칸에 「확대/축소 배율(A)」과 「자동 맞춤(F)」 라디오 버튼이 있습니다. 자동 맞춤 뒤에는 숫자 칸이 두 개 — 앞이 용지 너비, 뒤가 용지 높이 입니다. 저희가 캡처한 시점에는 확대/축소 배율 쪽이 켜져 있어서 자동 맞춤의 두 칸이 회색이었습니다.

페이지 설정 대화상자 [페이지] 탭 — 확대/축소 배율과 자동 맞춤
페이지 설정 대화상자 [페이지] 탭 — 확대/축소 배율과 자동 맞춤

2쪽부터 열 이름이 사라지는 문제

조건 3의 PDF는 2쪽이었는데, 2쪽에는 열 이름이 한 개도 없었습니다. 표 중간부터 시작하니 받는 사람이 열을 알아볼 수 없습니다. 머리글 행을 쪽마다 반복시키면 됩니다.

$ws.PageSetup.PrintTitleRows = '$1:$1'

이 값을 넣고 저장한 PDF는 2쪽 첫 줄도 거래일자 | 거래처코드 로 시작했습니다. 리본에서 같은 자리는 페이지 레이아웃 → 페이지 설정 그룹의 인쇄 제목 버튼입니다. 그 버튼이 그 그룹에 있는 것은 캡처로 확인했습니다. 눌렀을 때 나오는 창은 열어 보지 않았습니다.

여러 파일을 반복할 때

파일이 몇 개뿐이면 위 메뉴가 빠릅니다. 폴더를 통째로 돌릴 때만 스크립트를 쓰는데, 이때는 반복문 안에서 여는 파일과 내보낼 PDF 경로를 파일마다 따로 만들고, 통합 문서를 하나씩 닫아야 합니다. 위 조각은 경로가 한 개로 고정돼 있어 그대로 반복문에 넣으면 같은 PDF를 덮어씁니다.

작업이 끝나면 $xl.Quit() 을 꼭 호출하고, 남아 있는 EXCEL 프로세스가 없는지 확인하셔야 합니다. 저희 로그에도 Quit() 뒤에 프로세스가 남은 기록이 여러 번 있고, 그중 한 번은 PID를 찍어 따로 종료했습니다.

실패한 것

확인하지 않은 것

함께 보기