AI 해결 노트 · 2026-09-18 · 실측 2026-09-18
PDF에서 필요한 쪽만 빼내기 — 이어진 쪽, 떨어진 쪽, 한 쪽씩 전부
한 줄로
10쪽짜리 PDF에서 3~5쪽만, 1·4·9쪽만, 그리고 한 쪽씩 열 개로 빼내 봤습니다. 파이썬으로 뽑은 결과는 쪽 수도 쪽에 찍힌 글자도 원본과 같았습니다. 뜻밖이었던 것은 크기입니다. 10쪽 중 1쪽만 빼냈는데 파일이 원본의 92.5%였고, 낱장 열 개를 합치면 원본의 9.3배가 됐습니다. 프로그램을 깔지 않고 엣지 인쇄로 빼내면 파일은 작아지는데 글자를 한 자도 찾을 수 없게 됩니다.
이런 분께
- 30쪽짜리 보고서에서 별첨 두 쪽만 따로 보내야 하는 분
- 쪽을 빼냈는데 용량이 그대로라 뭘 잘못한 건가 싶은 분
- 스캔한 묶음을 한 장씩 나눠 이름을 붙여야 하는 분
실측 환경
| 항목 | 값 |
|---|---|
| OS | Windows 11 Home 25H2 (10.0.26200.9457) |
| 셸 | PowerShell 7 / Git Bash |
| 엣지 | 153.0.4234.32 |
| Python | 3.12.10 |
| 파이썬 꾸러미 | pypdf 6.14.2, PyMuPDF 1.28.0 |
| 시험 파일 | 시험용으로 만든 더미 PDF. 회사 자료는 쓰지 않았습니다 |
시험에 쓴 파일
10쪽짜리 PDF를 하나 만들었습니다. 뒤에 견주려고 쓴 사진 6쪽짜리도 같은 자리에서 만든 더미이고, 그 사진은 난수로 그려 낸 무늬입니다. 쪽마다 「3쪽」처럼 큰 글자, 「1장 개요」 같은 제목, 그리고 쪽표시 P03 이라는 표시를 넣었습니다. 빼낸 파일에서 이 표시를 읽으면 원본의 몇 쪽이었는지 바로 알 수 있습니다. 크기는 73,111바이트입니다.
파이썬으로 빼내기
pip install pypdf 한 줄이면 준비가 끝납니다. 원하는 쪽 번호를 적어 주는 것이 전부입니다.
from pypdf import PdfReader, PdfWriter
r = PdfReader(r"C:\경로\원본.pdf")
w = PdfWriter()
for 쪽 in [3, 4, 5]: # 사람이 세는 번호
w.add_page(r.pages[쪽 - 1]) # 파이썬은 0부터 세니 1을 뺍니다
with open(r"C:\경로\3-5쪽.pdf", "wb") as f:
w.write(f)① 이어진 쪽 3~5, ② 떨어진 쪽 1·4·9, ③ 한 쪽씩 열 개를 모두 이 방법으로 뽑았습니다. 쪽 수와 첫 쪽 글자를 원본과 견줘 봤습니다.
| 빼낸 것 | 쪽 수 | 첫 쪽 | 들어 있는 쪽 표시 | 크기 | 원본 대비 |
|---|---|---|---|---|---|
| ① 3~5쪽 | 3 | 3쪽 / 1장 개요 | P03, P04, P05 | 69,214바이트 | 94.7% |
| ② 1·4·9쪽 | 3 | 1쪽 / 표지 | P01, P04, P09 | 69,206바이트 | 94.7% |
| ②-1 9·1·4쪽 | 3 | 9쪽 / 별첨1 도면 | P09, P01, P04 | 69,206바이트 | 94.7% |
| ③ 낱장 1개 | 1 | 1쪽 / 표지 | P01 | 67,629바이트 | 92.5% |
| ③ 낱장 10개 합 | 10 | — | P01 ~ P10 | 676,390바이트 | 925% |
②-1을 보시면 적어 준 차례가 그대로 결과 순서입니다. 쪽 번호를 [9, 1, 4]로 적으면 9쪽이 첫 장으로 옵니다. 떨어진 쪽을 뽑을 때 원래 순서대로 나오리라 기대하지 마시고, 적는 차례를 그대로 쓰시면 됩니다.

한 쪽씩 전부 쪼개는 것은 이렇게 돌렸습니다.
from pypdf import PdfReader, PdfWriter
r = PdfReader(r"C:\경로\원본.pdf")
for i, 쪽 in enumerate(r.pages, start=1):
w = PdfWriter()
w.add_page(쪽)
with open(r"C:\경로\낱장_%02d.pdf" % i, "wb") as f:
w.write(f)파일 이름을 %02d로 두 자리로 맞춘 이유가 있습니다. 1, 2, 10 처럼 자릿수를 안 맞추면 나중에 이름순으로 늘어놓을 때 10_이 1_보다 앞에 섭니다. 글자로 견주는 정렬이라 그렇습니다.
왜 쪽을 빼내도 파일이 안 줄어드나
여기가 이 글에서 제일 놀란 자리입니다. 10쪽 중 1쪽만 남겼는데 크기는 92.5%였습니다.

낱장 파일 안을 열어 어떤 덩어리가 자리를 차지하는지 세어 봤습니다.
Y1_낱장_01.pdf 파일 67,629바이트 덩어리 6개 합 62,872바이트
가장 큰 덩어리 50,346바이트 <</Filter/FlateDecode/Length 50346>>
이것을 가리키는 객체: /Type/Font ... /ToUnicode 7 0 R
그다음 덩어리 12,288바이트 <</Length1 186933/Filter/FlateDecode/Length 12288>>
이것을 가리키는 객체: /Type/FontDescriptor ... /FontFile2 10 0 R한글 글꼴 한 벌(12,288바이트)과 글자와 유니코드를 잇는 대응표(50,346바이트)가 합쳐 62,634바이트입니다. 파일의 92.6%가 글꼴 쪽 살림입니다. 원본과 낱장 파일에 같은 크기로 들어 있었습니다. 그래서 쪽을 10분의 1로 줄여도 파일은 10분의 1이 되지 않았습니다.
사진이 든 PDF는 이야기가 다릅니다. 앞의 것과 나란히 놓고 보시면 차이가 분명합니다.
| 원본 | 빼낸 쪽 | 결과 크기 | 원본 대비 | 쪽 수로 따진 몫 |
|---|---|---|---|---|
| 사진 6쪽 (39,305,252바이트) | 1쪽 | 6,619,981바이트 | 16.8% | 16.7% |
| 사진 6쪽 | 1·2쪽 | 13,161,255바이트 | 33.5% | 33.3% |
| 글자 10쪽 (73,111바이트) | 1쪽 | 67,629바이트 | 92.5% | 10.0% |
사진이 무게를 지고 있는 이 문서에서는 쪽을 빼는 것만으로 용량이 쪽 수 몫만큼 줄었습니다. 글자 문서에서는 그렇지 않았습니다. 「쪽을 반으로 줄였는데 왜 그대로냐」는 물음의 답이 여기 있을 수 있습니다. 시험한 것은 이 두 파일뿐입니다. 손에 든 파일이 어느 쪽에 가까운지는 사진이 들었는지로 짐작하시되, 정확한 몫은 한 번 빼내 크기를 재 보셔야 압니다.
PyMuPDF로 빼낼 때 — 저장 옵션을 같이 줘야 합니다
PyMuPDF(fitz)에는 필요한 쪽만 남기는 select가 있습니다. 옵션 없이 저장하면 쪽은 3쪽으로 줄었는데 크기가 원본의 99.9%였습니다.
import fitz
d = fitz.open(r"C:\경로\원본.pdf")
d.select([2, 3, 4]) # 0부터 세므로 3~5쪽
d.save(r"C:\경로\3-5쪽.pdf", garbage=4, deflate=True)
d.close()save(옵션 없음) 73,030바이트 (원본의 99.9%)
save(garbage=4, deflate=True) 68,657바이트 (원본의 93.9%)
pypdf 69,214바이트 (원본의 94.7%)garbage=4, deflate=True를 같이 주면 93.9%까지 내려갔습니다. 옵션을 빼먹으면 쪽만 사라지고 크기는 그대로인 파일이 나옵니다.
프로그램을 안 깔고 빼내기 — 엣지 인쇄
파이썬이 없어도 쪽을 빼낼 수는 있습니다. 엣지에서 PDF를 열고 Ctrl+P, 프린터를 「Microsoft Print to PDF」로 고른 뒤 페이지에서 맨 아래 칸에 3-5를 적습니다. 인쇄 창 맨 위 숫자가 「합계: 3 용지」로 바뀌고 미리보기도 3쪽부터 나옵니다.

「인쇄」를 누르면 저장할 이름을 묻습니다. 나온 파일을 재 봤습니다.
| 항목 | 원본 | pypdf로 뽑은 3~5쪽 | 엣지 인쇄로 뽑은 3~5쪽 |
|---|---|---|---|
| 쪽 수 | 10 | 3 | 3 |
| 크기 | 73,111바이트 | 69,214바이트 | 11,219바이트 |
| 뽑히는 글자 | 있음 | 있음 (P03·P04·P05) | 0자 |
| 쪽 크기 | 595.0000 x 842.0000pt | 595.0000 x 842.0000pt | 595.3200 x 841.9200pt |
크기는 6분의 1로 줄었는데 글자를 한 자도 못 찾습니다. 파일 속을 들여다보니 글자도 그림도 없고 선·면 그림만 있었습니다.
엣지 인쇄로 뽑은 3~5쪽, 1쪽
글자 수 0 / 글자 상자 0개 / 그림 0개 / 선·면 그림 13개저희가 확인한 것은 뽑히는 글자가 0자라는 것까지입니다. 검색이나 복사를 직접 눌러 보지는 않았습니다. 다만 파일 안에 글자가 없으면 검색도 복사도 걸릴 것이 없고, 나중에 표를 뽑아내려 해도 뽑을 것이 없습니다. 눈으로 보여 주기만 하면 되는 자료라면 상관없지만, 받은 쪽이 글자를 찾을 문서라면 이 방법은 피하시는 편이 낫습니다. 쪽 크기도 가로 0.32pt, 세로 0.08pt 달라졌습니다.
결과
| 하고 싶은 일 | 방법 | 결과 |
|---|---|---|
| 이어진 쪽 몇 장만 (3~5쪽) | pypdf 또는 엣지 인쇄 범위 | 둘 다 3쪽. pypdf 쪽은 P03·P04·P05가 그대로, 엣지 쪽은 뽑히는 글자 0자 |
| 떨어진 쪽 (1·4·9쪽) | pypdf 에 [1, 4, 9] | 적은 차례가 그대로 순서가 됩니다 |
| 한 쪽씩 전부 | pypdf 로 반복, 이름은 %02d | 10개 파일. 합치면 원본의 9.3배 |
| 용량까지 줄이고 싶을 때 | PyMuPDF select + garbage=4, deflate=True | 글자 문서는 그래도 93.9%까지만 |
| 파이썬이 없을 때 | 엣지 Ctrl+P, 페이지 범위, Microsoft Print to PDF | 3쪽이 맞게 나왔지만 첫 쪽 기준 글자 0자, 선·면 그림 13개 |
| 회사 자료 | 위 모두 내 컴퓨터 안에서 끝납니다 | 어디에도 올리는 단계가 없습니다 |
실패한 것
- 엣지 인쇄로 뽑은 파일에서 글자를 못 찾는 이유를 「한글이라서」로 좁히지 못했습니다. 영문만 든 PDF로 같은 시험을 돌려 보지 않았습니다.
- 더미 PDF를 처음 만들 때
subset_fonts()를 부르지 않아 2쪽짜리가 13,602,850바이트로 나왔습니다. 쓴 글자만 남겨 다시 만드니 63,924바이트가 됐습니다. - 엣지 인쇄 창을 자동으로 눌러 가며 화면을 찍었는데, 저장 창에 개인 폴더 이름이 보여 그 화면은 글에도 원자료에도 두지 않았습니다. 글에 실은 그림은 인쇄 창을 자른 것입니다.
- 엣지 인쇄본과 원본을 화면에 나란히 띄워 눈으로 대조하지는 않았습니다. 쪽 수·쪽 크기·뽑히는 글자까지만 쟀습니다.
확인하지 않은 것
- 엣지가 아닌 다른 뷰어에서 인쇄 범위로 뽑았을 때도 글자가 안 남는지는 시험하지 않았습니다.
- 암호가 걸린 PDF, 서명이 든 PDF에서 쪽을 뽑으면 어떻게 되는지는 다루지 않았습니다.
- 책갈피가 달린 PDF에서 가운데 쪽만 뽑았을 때 책갈피가 어떻게 되는지는 이 글에서 재지 않았습니다.
- 100쪽·1000쪽짜리에서 걸리는 시간은 재지 않았습니다. 시험한 것은 10쪽과 6쪽짜리입니다.
- 쪽을 빼낸 파일을 다른 뷰어나 다른 컴퓨터에서 열었을 때 쪽 크기 차이가 눈에 띄는지는 보지 않았습니다.
- 여기 적은 비율은 이 더미 두 개에서 나온 값입니다. 다른 PDF에서 같은 비율이 나오는지는 확인하지 않았습니다.