AI 해결 노트 · 2026-09-18 · 실측 2026-09-18
PDF 여러 개를 원하는 순서로 합치기 — 윈도우에서 설치 없이 되는지까지 확인했습니다
한 줄로
저희가 해 본 범위에서는 윈도우 11에 기본으로 들어 있는 것만으로 PDF 여러 개를 한 파일로 합치지 못했습니다. 탐색기가 PDF 파일에 붙여 주는 명령에 「인쇄」가 아예 없고, 엣지는 탭을 세 개 열어 놓아도 지금 보고 있는 탭 하나만 인쇄 대상으로 셉니다. 워드로 열어 이어 붙이는 길은 되기는 되는데 10쪽짜리가 13쪽이 되고 글자와 테두리가 달라졌습니다. 쪽 수와 순서를 그대로 지킨 것은 파이썬(pypdf)뿐이었습니다.
이런 분께
- 스캔한 표지, 본문, 별첨을 한 파일로 묶어 제출해야 하는데 합치기 프로그램을 깔 수 없는 분
- 회사 자료라서 「PDF 합치기」 사이트에 올리기가 꺼려지는 분
- 합치긴 했는데 순서가 뒤바뀌거나 쪽 수가 안 맞는 분
실측 환경
| 항목 | 값 |
|---|---|
| OS | Windows 11 Home 25H2 (10.0.26200.9457) |
| 셸 | PowerShell 7 / Git Bash |
| 엣지 | 153.0.4234.32 |
| Word | 16.0 (Build 16.0.20326) |
| Python | 3.12.10 |
| 파이썬 꾸러미 | pypdf 6.14.2, PyMuPDF 1.28.0 |
| 시험 파일 | 시험용으로 만든 더미 PDF 3개. 회사 자료는 쓰지 않았습니다 |
시험에 쓴 파일
쪽마다 어느 파일의 몇 번째 쪽인지 큼직하게 찍어 둔 PDF 세 개를 만들었습니다. 합친 뒤에 순서가 맞는지 눈으로 바로 셀 수 있게 하려고 이렇게 했습니다.
| 파일 | 쪽 수 | 쪽에 찍힌 글자 | 크기 |
|---|---|---|---|
| Y1_A_표지.pdf | 2 | A-1, A-2 | 63,924바이트 |
| Y1_B_본문.pdf | 5 | B-1 ~ B-5 | 65,899바이트 |
| Y1_C_별첨.pdf | 3 | C-1, C-2, C-3 | 64,879바이트 |
합쳐서 10쪽입니다. 이 숫자가 결과를 보는 기준입니다.
먼저 확인한 것 — 윈도우 기본 기능으로 되나
탐색기에서 여러 개 골라 「인쇄」
탐색기가 파일마다 붙여 주는 명령 목록을 그대로 뽑아 PDF와 다른 형식을 견줬습니다.
PDF : 열기(O) | Notepad++로 편집 | 즐겨찾기에 추가(F) | ... | 속성(R)
PNG : 열기(O) | 바탕 화면 배경으로 설정(B) | 인쇄(P) | 오른쪽으로 회전(T) | ...
TXT : 열기(O) | 편집 | 인쇄 | ...PNG와 TXT에는 「인쇄」가 있고 PDF에는 없습니다. 여러 개를 골랐을 때 뜨는 메뉴는 따로 확인하지 못했습니다만, 파일 하나에도 없는 명령이 여러 개를 골랐다고 생기지는 않습니다. 이 컴퓨터에서 PDF를 여는 기본 프로그램은 엣지(MSEdgePDF)인데, 등록된 명령이 open과 runas 둘뿐이라 인쇄 명령 자체가 없습니다. 명령줄로 억지로 불러도 같은 자리에서 막힙니다.
> Start-Process -FilePath Y1_A_표지.pdf -Verb Print
오류: 이 작업을 하기 위해 지정된 파일로 아무 응용 프로그램도 연결되어 있지 않습니다.기본 프로그램을 다른 PDF 뷰어로 바꾸면 「인쇄」가 생길 수는 있습니다. 다만 그건 그 뷰어를 깐 상태라는 뜻입니다. 그쪽에서 여러 개를 골라 인쇄하면 어떻게 되는지는 저희가 시험하지 않았습니다.
엣지에서 세 개를 탭으로 열고 인쇄
엣지 창 하나에 PDF 세 개를 탭으로 띄우고 Ctrl+P를 눌렀습니다. 인쇄 창 맨 위에 「합계: 2 용지」라고 나옵니다. 지금 보고 있는 탭(A, 2쪽)만 셈에 들어갔습니다. 프린터를 「Microsoft Print to PDF」로 바꿔도 그대로였습니다.

명령줄로 한꺼번에 넘겨도 막힙니다.
> msedge.exe --headless --disable-gpu --print-to-pdf=C:\...\합본.pdf --no-pdf-header-footer
file:///C:/.../Y1_A_표지.pdf file:///C:/.../Y1_B_본문.pdf file:///C:/.../Y1_C_별첨.pdf
[0918/110125.664:ERROR:chrome\app\chrome_main.cc:321] Multiple targets are not supported in headless mode.
종료코드=13 합본.pdf 는 만들어지지 않음파일 하나만 넘기면 종료코드 0으로 끝나고 파일이 생기기는 합니다. 그 파일은 1쪽에 1,101바이트이고, 뽑히는 글자 0자, 그림 0개, 선 1개였습니다. 원본 2쪽이 담기지 않았습니다. 왜 그런지는 캐지 않았습니다.
하나씩 「Microsoft Print to PDF」로 인쇄하면
창을 띄워 놓고 「인쇄」를 누르면 「다른 이름으로 프린터 출력 저장」 창이 떠서 이름을 묻고, 경로를 적으면 그 자리에 파일이 하나 생깁니다. 저희가 이 절차를 두 번 밟아 본 결과가 그랬습니다. 10쪽짜리에서 3~5쪽만 인쇄해 11,219바이트 파일 하나, 사진 문서를 전부 인쇄해 1,641,339바이트 파일 하나입니다. 한 번 인쇄에 한 파일이고, 여러 파일을 이어 붙이는 자리가 이 절차 안에 없습니다.
되기는 되는 길 — 워드로 열어 이어 붙이기
워드는 PDF를 편집할 수 있는 문서로 바꿔 줍니다. 빈 문서에 PDF 세 개를 차례로 끼워 넣고 PDF로 다시 내보내면 한 파일이 됩니다. 저희는 화면 메뉴를 누르지 않고 자동화(COM)로 파일 끼워 넣기(Selection.InsertFile)와 내보내기(ExportAsFixedFormat)를 시켜 시간과 쪽 수를 쟀습니다.
InsertFile Y1_A_표지.pdf -> 성공, 1.1초, 누적 쪽수=5
InsertFile Y1_B_본문.pdf -> 성공, 0.7초, 누적 쪽수=10
InsertFile Y1_C_별첨.pdf -> 성공, 0.7초, 누적 쪽수=13
저장한 합본 크기=62,721바이트, 쪽수=1310쪽이 13쪽이 됐습니다. 1쪽, 3쪽, 5쪽이 빈 쪽입니다.

쪽마다 글자를 뽑아 원본과 견줬더니 이렇게 달라져 있었습니다.
| 본 것 | 원본 | 워드를 거친 뒤 |
|---|---|---|
| 첫 쪽 글자줄 | 「A 표지」 / 「A-1」 두 줄 | 「A 표지 A-」 한 줄 + 「1」 다음 줄 |
| B·C 쪽 위의 제목 줄 | 「B 본문」·「C 별첨」 있음 | 사라짐 |
| A 1쪽의 선·면 그림 개수 | 1개 | A 내용이 든 쪽 12개, B·C 내용이 든 쪽 0개 |
| 쪽에서 가장 큰 글자 | 재지 않음 | B-1~B-4 쪽 72pt, B-5·C-3 쪽만 16pt |
쪽 수를 세는 일, 「몇 쪽의 무슨 항목」을 가리키는 일이 걸려 있다면 이 길은 위험합니다. 반대로 합친 뒤 어차피 글을 고쳐야 하는 문서라면 워드에서 손보고 다시 PDF로 내보내는 편이 편할 수 있습니다.
쪽 수와 순서를 지키려면 — pypdf
파이썬이 깔려 있다면 이쪽이 확실합니다. 설치는 한 줄입니다.
pip install pypdf합치는 코드도 짧습니다. append는 파일을 통째로 뒤에 붙입니다.
from pypdf import PdfWriter
w = PdfWriter()
for p in [r"C:\경로\표지.pdf", r"C:\경로\본문.pdf", r"C:\경로\별첨.pdf"]:
w.append(p)
with open(r"C:\경로\합본.pdf", "wb") as f:
w.write(f)목록에 적은 차례가 그대로 결과 순서입니다. 10쪽이 나왔고 쪽에 찍힌 글자도 그대로였습니다.
A -> B -> C : 10쪽, 196,998바이트
A-1, A-2, B-1, B-2, B-3, B-4, B-5, C-1, C-2, C-3
C -> A -> B : 10쪽
C-1, C-2, C-3, A-1, A-2, B-1, B-2, B-3, B-4, B-5
책갈피는 어떻게 되나
합치기 전 세 파일에는 책갈피가 하나도 없었고, append로 합친 결과에도 없었습니다. 없던 것이 생기지는 않습니다.
원본에 책갈피가 있으면 이야기가 다릅니다. B 파일에 「B 1장」(1쪽), 「B 3장」(3쪽) 두 개를 달아 놓고 A 뒤에 붙였더니, 합본에서 각각 3쪽과 5쪽을 가리켰습니다. A가 2쪽이니 두 쪽씩 밀린 자리입니다. 쪽 번호를 알아서 고쳐 줍니다.
합치면서 파일 이름으로 책갈피를 달아 두면 뒤에 찾기가 편합니다.
from pypdf import PdfReader, PdfWriter
import os
w, 시작 = PdfWriter(), 0
for p in [r"C:\경로\표지.pdf", r"C:\경로\본문.pdf", r"C:\경로\별첨.pdf"]:
r = PdfReader(p)
for pg in r.pages:
w.add_page(pg)
w.add_outline_item(os.path.splitext(os.path.basename(p))[0], 시작)
시작 += len(r.pages)
with open(r"C:\경로\합본.pdf", "wb") as f:
w.write(f)합본 10쪽, 197,715바이트
책갈피 : Y1_A_표지 -> 1쪽 / Y1_B_본문 -> 3쪽 / Y1_C_별첨 -> 8쪽이 코드는 add_page로 한 쪽씩 옮기는 방식이라 원본에 달려 있던 책갈피는 따라오지 않습니다. 책갈피 두 개가 달린 B를 add_page로만 옮겨 봤더니 합본은 10쪽인데 책갈피가 하나도 없었습니다. 둘 다 살리려면 append에 이름을 같이 넘기면 됩니다. 파일별 책갈피 아래에 원본 책갈피가 한 단 들어간 모양으로 나왔습니다.
w.append(r"C:\경로\Y1_A_표지.pdf", outline_item="표지")
w.append(r"C:\경로\Y1_B_본문_책갈피.pdf", outline_item="본문") # 「B 1장」·「B 3장」이 달린 파일
w.append(r"C:\경로\Y1_C_별첨.pdf", outline_item="별첨")합본 10쪽, 198,133바이트
표지 -> 1쪽
본문 -> 3쪽
B 1장 -> 3쪽
B 3장 -> 5쪽
별첨 -> 8쪽폴더째 합칠 때 순서가 꼬이는 자리
「폴더에 있는 PDF를 이름순으로 다 합쳐라」로 짜면 한 군데서 걸립니다.
>>> sorted(["10_열번째.pdf", "2_두번째.pdf", "1_첫번째.pdf"])
['10_열번째.pdf', '1_첫번째.pdf', '2_두번째.pdf']숫자가 아니라 글자로 견주기 때문에 10_이 1_보다 앞에 섭니다. 이름을 자릿수에 맞춰 다시 붙이면 제자리를 찾습니다.
>>> sorted(["10_열번째.pdf", "02_두번째.pdf", "01_첫번째.pdf"])
['01_첫번째.pdf', '02_두번째.pdf', '10_열번째.pdf']어느 방법으로 합치든 합친 뒤 쪽 수와 첫 쪽·마지막 쪽은 세어 보시는 편이 안전합니다.
결과
| 방법 | 설치 필요 | 쪽 수 | 순서 | 내용 |
|---|---|---|---|---|
| 탐색기에서 여러 개 골라 인쇄 | — | — | — | PDF에는 「인쇄」 명령 자체가 없습니다 |
| 엣지에서 탭 여러 개 열고 Ctrl+P | 없음 | — | — | 보고 있는 탭 하나만 인쇄됩니다(합계 2 용지) |
| 하나씩 Microsoft Print to PDF | 없음 | — | — | 한 번 인쇄에 파일 하나. 이어 붙이는 자리가 없습니다 |
| 워드에 끼워 넣고 PDF로 저장 | 워드 | 10 → 13 | 지켜짐 | 빈 쪽 3개, 제목 줄 사라짐, 테두리·글자 크기 달라짐 |
| pypdf | 파이썬 + pypdf | 10 → 10 | 지켜짐 | 쪽에 찍힌 글자 그대로. 책갈피는 따로 달 수 있습니다 |
실패한 것
- 처음 만든 더미 PDF가 2쪽짜리인데 13MB가 넘었습니다. 나중에 같은 파일을 두 가지로 만들어 견줘 봤습니다.
subset_fonts()없이 그냥 저장하면 13,602,850바이트(13.0MB),subset_fonts()를 부른 뒤save(garbage=4, deflate=True)로 저장하면 63,924바이트로 0.47%였습니다. 한글 글꼴을 쓴 글자만 남기는 손질이 빠지면 이렇게 됩니다. - 엣지 인쇄 창의 프린터 목록을 처음 열었을 때 기본값이 다른 프린터로 잡혀 있어 화면을 한 번 다시 찍었습니다.
- 워드를 거친 합본이 왜 13쪽이 됐는지, 빈 쪽 셋이 어느 단계에서 생겼는지는 밝히지 못했습니다. 로그에 남은 것은 파일을 하나 넣을 때마다 누적 쪽수가 5, 10, 13으로 늘었다는 사실까지입니다.
확인하지 않은 것
- PDF 기본 프로그램을 엣지가 아닌 다른 뷰어로 바꿨을 때 탐색기에 「인쇄」가 생기는지, 여러 개를 한 번에 골라 인쇄하면 한 파일로 나오는지는 시험하지 않았습니다.
- 탐색기에서 파일 여러 개를 골랐을 때 뜨는 메뉴는 따로 뽑아 보지 못했습니다. 저희가 읽은 것은 파일 하나마다 붙는 명령 목록입니다.
- 워드에서 화면 메뉴로 PDF를 끼워 넣는 경로는 밟지 않았습니다. 자동화 명령으로만 넣었으므로 메뉴 이름은 적지 않습니다.
- 암호가 걸린 PDF, 서명이 들어간 PDF, 양식 칸이 있는 PDF는 다루지 않았습니다.
- 100쪽 넘는 파일이나 스캔본처럼 사진으로 된 PDF를 합쳤을 때 걸리는 시간은 재지 않았습니다.
- 합본을 다른 PDF 뷰어에서 열었을 때 책갈피가 똑같이 보이는지는 확인하지 않았습니다. 쪽 번호는 파이썬으로만 읽었습니다.