Splitting and merging PDFs are two of the most requested PDF operations. Splitting takes a multi-page PDF and divides it — by page range, by chapter, or into individual pages. Merging takes multiple PDF files and combines them into one. Both operations appear simple, but the details matter: bookmarks, form fields, digital signatures, metadata, and PDF/A conformance can all be affected by naïve split or merge operations. This guide covers every method and tool for splitting and merging PDFs — from browser-based tools to command-line utilities and libraries — with specific advice on preserving document structure, handling digitally signed PDFs, and choosing the right approach for different use cases.

Splitting a PDF: methods and tools

There are several distinct splitting operations, each with different tools: **Split by page range** — Extract pages 5–10 from a 50-page document. This is the most common split operation, used to separate chapters, extract invoices from a batch, or share a subset of a report. **Split into individual pages** — Produce one PDF per page. Useful for processing pipelines where each page is handled independently. **Split by bookmark/chapter** — Divide at each top-level bookmark. Produces one PDF per chapter. Useful for distributing individual chapters of a technical manual. **Split by file size** — Divide into chunks under a maximum size. Used for email attachments with size limits or upload limits. **Command-line tools:** QPDF — the most reliable command-line option: ```bash # Extract pages 5–10 qpdf --pages input.pdf 5-10 -- output.pdf # Split into individual pages qpdf --split-pages input.pdf output-page-%d.pdf ``` PDFtk: ```bash pdftk input.pdf cat 5-10 output extracted.pdf pdftk input.pdf burst output page_%04d.pdf ``` pdfseparate (Poppler): ```bash pdfseparate input.pdf page-%d.pdf ``` **Python:** ```python from pypdf import PdfReader, PdfWriter reader = PdfReader("input.pdf") writer = PdfWriter() for i in range(4, 10): # pages 5–10 (0-indexed) writer.add_page(reader.pages[i]) with open("output.pdf", "wb") as f: writer.write(f) ```

Merging PDFs: methods and tools

Merging combines multiple PDFs into a single file. Common use cases: combining monthly reports into an annual archive, assembling a job application (CV + cover letter + certificates), or merging scanned pages into a multi-page document. **Command-line tools:** QPDF: ```bash qpdf --empty --pages a.pdf b.pdf c.pdf -- merged.pdf ``` PDFtk: ```bash pdftk a.pdf b.pdf c.pdf cat output merged.pdf ``` Ghostscript: ```bash gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=merged.pdf -dBATCH a.pdf b.pdf c.pdf ``` **Python with pypdf:** ```python from pypdf import PdfMerger merger = PdfMerger() for pdf in ["a.pdf", "b.pdf", "c.pdf"]: merger.append(pdf) merger.write("merged.pdf") merger.close() ``` **Online tools:** - PDFTheGuide Merge PDF — browser-based, no upload, free - iLovePDF — online, files uploaded to server - Smallpdf — online, files uploaded to server

What splitting and merging can break

Naïve split/merge operations can damage important document features. Know what to watch out for: **Bookmarks (document outline)** — Bookmarks reference pages by position. When you split pages 1–10 from a 50-page document, any bookmarks pointing to pages 11–50 in the original still exist in the output file but reference non-existent pages. QPDF preserves bookmarks from the extracted range but removes ones pointing outside it; PDFtk may leave broken bookmark references. **Digital signatures** — Splitting or modifying a digitally signed PDF invalidates the signature. The signature covers specific byte ranges of the file; any structural change breaks the cryptographic hash. Always work with unsigned copies for split/merge operations; apply signatures to the final assembled document. See PDF Digital Signatures. **AcroForm fields** — Form fields have names. If you merge two PDFs that contain fields with the same name (common in template-based forms), the names collide in the merged document and form behaviour becomes unpredictable. Rename fields before merging, or use PDF tools that handle field renaming automatically (pypdf's `PdfMerger` renames duplicates; PDFtk does not). **PDF/A conformance** — Merging a PDF/A document with a non-PDF/A document produces a non-conformant output. The output inherits the lowest conformance level. If PDF/A output is required, validate with veraPDF after merging. **Shared resources** — Large PDFs sometimes share font and image resources across pages via inherited resource dictionaries. Some splitting tools correctly copy shared resources to each output file; others produce outputs that are missing resources and render incorrectly. QPDF and pypdf handle this correctly; older tools may not.

Splitting by bookmark: chapter-level splitting

Many long documents (manuals, reports, books) have a top-level bookmark per chapter. Splitting at these bookmarks is a common requirement for distributing individual chapters. There is no standard command-line flag for "split at bookmarks" — it requires either a dedicated tool or a scripted approach: **Python approach (pypdf):** ```python from pypdf import PdfReader, PdfWriter reader = PdfReader("book.pdf") outline = reader.outline def get_page_num(dest): return reader.get_destination_page_number(dest) # Get chapter start pages from top-level bookmarks chapters = [(item.title, get_page_num(item)) for item in outline if not isinstance(item, list)] chapters.append(("END", len(reader.pages))) for i, (title, start) in enumerate(chapters[:-1]): end = chapters[i + 1][1] writer = PdfWriter() for page_num in range(start, end): writer.add_page(reader.pages[page_num]) with open(f"{i:02d}_{title}.pdf", "wb") as f: writer.write(f) ``` **Adobe Acrobat Pro** — Tools > Organise Pages > Split > Split by Top-Level Bookmarks — provides a GUI for this operation without scripting. PDFtk Server with a custom data file can also split by bookmark if you extract the bookmark page numbers first using `pdftk input.pdf dump_data`.
Splitting and merging PDFs is straightforward for simple cases but requires care when the documents contain bookmarks, digital signatures, form fields, or need to remain PDF/A conformant. QPDF is the most reliable command-line tool for both operations. pypdf provides the most flexible scripting interface. Online tools are convenient for one-off tasks but upload your files to external servers. For privacy-sensitive documents, use local tools — or the in-browser options that process files on your device without any upload.