Splitting a PDF at fixed page intervals is easy and usually wrong. What you actually want, most of the time, is to split it at the structural boundaries — one file per chapter, per contract, per statement, per applicant. If the document has bookmarks, those boundaries are already recorded in the file. This guide covers splitting on them, and what to do when the bookmarks are missing or lying.
Why bookmark splitting beats page splitting
A 600-page bank statement export contains twelve months of statements of varying length. A merged tender pack contains nineteen supplier submissions, none the same size. A scanned batch of employee files runs to whatever each person's file happens to be. Splitting every 50 pages gives you slices that cut through the middle of documents. Splitting on bookmarks gives you the documents.
The bookmarks — formally, the document outline — are a tree of entries, each pointing at a destination, usually a specific page. A top-level entry per section is exactly the boundary list you need. If the file has them, the split is deterministic and needs no guessing.
Check what bookmarks you actually have
Before splitting, look at the outline. Two quick ways:
- Open the file and show the bookmarks pane (Acrobat: View → Show/Hide → Navigation Panes → Bookmarks; most viewers have a sidebar toggle).
- From the command line,
pdftk input.pdf dump_dataprints every bookmark with its title, nesting level, and page number.
The dump_data output is worth reading closely. You are checking three things:
- Are the level-1 entries the boundaries you want? Sometimes the top level is "Part One / Part Two" and the real per-document boundaries are at level 2.
- Do the page numbers make sense? Bookmarks can point at the wrong page after a document has been edited, because the destination survived a page insertion that shifted everything.
- Are there duplicates or empty titles? Both will produce ugly or colliding output filenames.
Splitting with a script and pdftk or qpdf
There is no single tool that ships with a "split by bookmark" button on the command line, so the standard approach is two steps: read the outline, then cut the ranges.
Get the outline:
pdftk input.pdf dump_data | grep -A2 "BookmarkBegin"
You will get triples of BookmarkTitle, BookmarkLevel, BookmarkPageNumber. Filter to BookmarkLevel: 1, collect the page numbers, and turn consecutive pairs into ranges: a bookmark at page 1 followed by one at page 34 means the first document is pages 1–33.
Then cut each range:
qpdf input.pdf --pages . 1-33 -- "01 - Acme Ltd.pdf"
qpdf input.pdf --pages . 34-58 -- "02 - Borden Group.pdf"
Twenty lines of shell or Python wraps this into something reusable. Two details that will bite you if you skip them: sanitise the titles before using them as filenames (slashes and colons are illegal on most systems, and a bookmark reading "Q1 2026 / Q2 2026" will fail), and zero-pad the index so the output sorts correctly in a file manager.
For the underlying tools, see pdftk introduction and qpdf introduction.
Doing it in a GUI
If a script is not on the table:
- Adobe Acrobat: Organise Pages → Split → Split by → Top-level bookmarks. It is the single cleanest implementation of this feature anywhere, and it will name the output files after the bookmark titles automatically.
- PDFsam Basic (free, open source): the Split by bookmarks module lets you choose the outline level to split at, which Acrobat does not. If your boundaries are at level 2, this is the tool.
- PDF-XChange Editor: has bookmark-based extraction in the paid tier.
Browser-based editors generally do not offer this, because reading and walking the outline tree is a good deal more work than slicing at page numbers. For manual page-range splitting in the browser, how to split a PDF covers the ground.
When there are no bookmarks
Frequently the merged file you have been handed has no outline at all — merging tools routinely discard it. Options, roughly in order of reliability:
Recreate the bookmarks first, then split. If the document has consistent headings, you can generate an outline from them; how to create bookmarks from headings covers the approach. Once the outline exists, everything above applies.
Split on a text pattern instead. If each sub-document starts with a recognisable line — "INVOICE", "Statement of Account", a supplier name in a fixed position — extract per-page text with pdftotext -f N -l N and mark a boundary wherever the pattern appears on a page. This is more robust than it sounds, because these documents are usually machine-generated and rigidly consistent.
Split on a separator sheet. In scanning workflows the operator often inserts a barcode or blank separator between documents. Detect those pages and split there — the detection techniques in how to remove blank pages from a PDF transfer directly.
Split on page-count metadata, if the source system published a manifest. Boring, but exact.
What splitting loses
Every split drops things, and it is worth knowing which before you delete the source:
- The outline of the parent is not carried into the children by default; sub-bookmarks below your split level are usually lost unless the tool explicitly preserves them. Acrobat and PDFsam do; a naive
qpdf --pagesdoes not. - Form fields that were part of a document-wide AcroForm may lose their field data or their sibling relationships.
- Internal links pointing at pages outside the piece you extracted become dead.
- Attachments and document-level metadata stay with the parent unless copied.
- Digital signatures are invalidated, necessarily and correctly — the signed byte range no longer exists.
For a straightforward chapter-per-file split of a report, none of this matters. For splitting a signed, form-bearing legal pack, all of it does.
A workable process for repeat jobs
If this is something you do monthly rather than once, invest half a day and stop re-deriving it:
- Standardise the input. Ask the source system for bookmarks, or for separate files in the first place. Half the time this is available and nobody asked.
- Write the split as a script, not a click-path, so the naming convention is consistent across months. File naming pays off later — see naming and versioning shared files.
- Assert on the output. Count the files produced and compare against the expected number. A split that silently produces 11 files from 12 statements is the failure mode that goes unnoticed for a quarter.
- Keep the parent for a defined period, then let your retention policy remove it — see document retention policies.
Summary
If the file has an outline, split on it: Acrobat and PDFsam do this natively, and pdftk dump_data plus qpdf --pages does it in a script. If it does not, build the boundary list from a text pattern or a separator page — which is usually more reliable than it sounds, because the documents that need splitting are almost always machine-generated in the first place.