If you have dozens or hundreds of PDF files that each need to be split the same way — into individual pages, into N-page chunks, or at the same page boundaries — doing them one at a time in a GUI tool is impractical. Batch splitting requires command-line tools or scripts.
This guide covers the three most practical approaches: pdftk, Ghostscript, and Python, with working command examples for each common batch split scenario.
Single File? Use the Extension
For one PDF at a time, PDF Merge & Split is the simplest option.
Add to Chrome — FreeInstalling the Tools
pdftk
- Windows: Download from pdflabs.com
- macOS:
brew install pdftk-java - Ubuntu/Debian:
sudo apt install pdftk
Ghostscript
- Windows: Download from ghostscript.com
- macOS:
brew install ghostscript - Ubuntu/Debian:
sudo apt install ghostscript
Python + PyPDF2
pip install PyPDF2
Batch Split 1: Split Every PDF into Individual Pages
Using pdftk (bash/macOS/Linux)
#!/bin/bash
# Split all PDFs in current folder into individual pages
mkdir -p split-output
for f in *.pdf; do
name="${f%.pdf}"
mkdir -p "split-output/$name"
pdftk "$f" burst output "split-output/$name/${name}-page-%04d.pdf"
done
Using pdftk (Windows PowerShell)
$files = Get-ChildItem -Filter "*.pdf"
foreach ($file in $files) {
$name = $file.BaseName
New-Item -ItemType Directory -Force "split-output\$name" | Out-Null
pdftk $file.FullName burst output "split-output\$name\${name}-page-%04d.pdf"
}
Batch Split 2: Split Every PDF into N-Page Chunks
Python script — split all PDFs into 10-page chunks
import os
from PyPDF2 import PdfReader, PdfWriter
PAGES_PER_CHUNK = 10
INPUT_DIR = "."
OUTPUT_DIR = "split-output"
os.makedirs(OUTPUT_DIR, exist_ok=True)
for filename in os.listdir(INPUT_DIR):
if not filename.endswith(".pdf"):
continue
filepath = os.path.join(INPUT_DIR, filename)
reader = PdfReader(filepath)
total_pages = len(reader.pages)
base_name = filename[:-4]
chunk_num = 1
for start in range(0, total_pages, PAGES_PER_CHUNK):
end = min(start + PAGES_PER_CHUNK, total_pages)
writer = PdfWriter()
for page_num in range(start, end):
writer.add_page(reader.pages[page_num])
out_file = os.path.join(OUTPUT_DIR, f"{base_name}-part-{chunk_num:03d}.pdf")
with open(out_file, "wb") as f:
writer.write(f)
chunk_num += 1
print(f"Done. Output in: {OUTPUT_DIR}")
Change PAGES_PER_CHUNK = 10 to any value. The script processes every PDF in the current directory and writes chunks to the split-output folder.
Batch Split 3: Extract a Fixed Page Range from Every PDF
Useful when you have a consistent structure across many PDFs — for example, extracting the first 5 pages (executive summary) from every report in a folder.
Ghostscript loop (bash)
#!/bin/bash
# Extract pages 1-5 from every PDF
mkdir -p extracted
for f in *.pdf; do
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite \
-dFirstPage=1 -dLastPage=5 \
-sOutputFile="extracted/${f%.pdf}-summary.pdf" "$f"
done
Batch Split 4: Split PDFs by File Size Target
Splitting to meet an email attachment size limit requires knowing page sizes first. This Python script estimates pages per chunk based on file size:
import os
from PyPDF2 import PdfReader, PdfWriter
TARGET_SIZE_MB = 10 # Target chunk size in MB
INPUT_DIR = "."
OUTPUT_DIR = "split-by-size"
os.makedirs(OUTPUT_DIR, exist_ok=True)
for filename in os.listdir(INPUT_DIR):
if not filename.endswith(".pdf"):
continue
filepath = os.path.join(INPUT_DIR, filename)
file_size_mb = os.path.getsize(filepath) / (1024 * 1024)
reader = PdfReader(filepath)
total_pages = len(reader.pages)
if file_size_mb <= TARGET_SIZE_MB:
print(f"Skipping {filename} (already under {TARGET_SIZE_MB}MB)")
continue
avg_page_size = file_size_mb / total_pages
pages_per_chunk = max(1, int(TARGET_SIZE_MB / avg_page_size))
base_name = filename[:-4]
chunk_num = 1
for start in range(0, total_pages, pages_per_chunk):
end = min(start + pages_per_chunk, total_pages)
writer = PdfWriter()
for page_num in range(start, end):
writer.add_page(reader.pages[page_num])
out_file = os.path.join(OUTPUT_DIR, f"{base_name}-chunk-{chunk_num:03d}.pdf")
with open(out_file, "wb") as f:
writer.write(f)
chunk_num += 1
print(f"Split {filename} into {chunk_num-1} chunks")
One File to Split? Use the Extension
For individual PDFs, PDF Merge & Split is faster than command-line tools.
Install PDF Merge & SplitRelated Guides
- How to Split a PDF by Page Numbers
- How to Extract Specific Pages from a PDF
- How to Split a Large PDF for Email
Frequently Asked Questions
Can I split multiple PDF files at once?
Yes. Use pdftk burst in a loop, Ghostscript in a bash loop, or a Python script with PyPDF2. The PDF Merge & Split Chrome extension handles one file at a time — for batch work, command-line tools are faster.
How do I split all PDFs in a folder into individual pages?
Use pdftk: for f in *.pdf; do pdftk "$f" burst output "${f%.pdf}-page-%04d.pdf"; done. This processes every PDF in the current folder.
How do I batch split PDFs by a fixed page count?
Use the Python script in this guide. Set PAGES_PER_CHUNK to your desired value, point the script at your input folder, and it will split every PDF into equal-sized chunks.
What is the fastest tool for batch splitting large numbers of PDFs?
pdftk is generally the fastest for batch splitting due to low overhead per file. For very large batches (thousands of files), Ghostscript is comparably fast.
Can I batch split PDFs on Windows without installing extra software?
Windows does not include a built-in batch PDF splitter. You need to install pdftk, Ghostscript, or Python — all three are free. For individual files, the PDF Merge & Split Chrome extension requires no additional installation.