# `delete_bookmarks` Delete bookmarks ## Usage > pdftl `` `delete_bookmarks` `[...]` `[recursive]` `[no_dest]` `output` `` `[...]` ## Details Delete bookmarks (outline entries) from a PDF. Without a page spec, all bookmarks are removed. With one or more page specs, only bookmarks whose destination falls within the matched pages are targeted for deletion. Multiple page specs are treated as a union — a bookmark is matched if its destination page falls within any of the given specs. Page specs use the standard pdftl syntax; see `pdftl help pages` for details. Flags (`recursive`, `no_dest`) apply to the entire operation, not per page spec. ### Deletion model Bookmarks are matched by destination page. A bookmark is "matched" if the page it points to falls within the union of all given page specs. Two modes control how matched bookmarks with unmatched descendants are handled: **safe (default)** A matched bookmark is only deleted if all of its descendants are also matched (and will therefore also be deleted). If a matched bookmark has any unmatched descendant anywhere in its subtree, it is skipped and a warning is emitted. The tree structure of surviving bookmarks is always preserved exactly — no promotion occurs. **recursive** A matched bookmark and its entire subtree are deleted, regardless of whether any descendants are matched. Use with care. The algorithm processes the tree bottom-up (post-order), so children are evaluated before their parents. This means a matched parent whose children are all independently matched will be cleanly deleted in safe mode, even without specifying `recursive`. ### Destination-less bookmarks Some bookmarks have no page destination — they are purely structural, grouping children without linking to any page. By default these are treated as unmatched: they survive, and they block deletion of matched ancestors in safe mode. **no_dest** Treat destination-less bookmarks as matched. They no longer block ancestor deletion in safe mode, and are themselves deleted if all their descendants are also matched (or they have no surviving children after deletion). With `recursive`, `no_dest` is redundant — descendants are swept up regardless. ### Worked examples Given the outline tree (page numbers shown, nested lists are children): [1, [2, 3], 4, [5, [6]]] delete_bookmarks 2 => [1, [3], 4, [5, [6]]] bookmark 2 has no unmatched children, deleted cleanly. delete_bookmarks 1 => [1, [2, 3], 4, [5, [6]]] (unchanged) safe: bookmark 1 skipped+warned because child 3 is unmatched. delete_bookmarks 1-3 => [4, [5, [6]]] safe: 2 deleted first (no unmatched children); 3 deleted (no children); 1 now has no unmatched descendants, deleted too. delete_bookmarks 1 recursive => [4, [5, [6]]] bookmark 1 and entire subtree [2, 3] deleted. delete_bookmarks 5 => [1, [2, 3], 4, [5, [6]]] (unchanged) safe: bookmark 5 skipped+warned because child 6 is unmatched. delete_bookmarks 5-6 => [1, [2, 3], 4] safe: 6 deleted first; 5 now has no unmatched descendants, deleted. delete_bookmarks 1-3 5-6 => [4] multiple page specs, union of pages 1,2,3,5,6 matched. ### Clearing all bookmarks To remove the entire outline, omit the page spec: pdftl in.pdf delete_bookmarks output out.pdf ## Examples > Delete all bookmarks ``` pdftl in.pdf delete_bookmarks output out.pdf ``` > Delete bookmarks pointing to pages 1 through 5 (safe mode) ``` pdftl in.pdf delete_bookmarks 1-5 output out.pdf ``` > Delete bookmarks pointing to pages 1-5 or odd pages 7-20 ``` pdftl in.pdf delete_bookmarks 1-5 7-20odd output out.pdf ``` > Delete bookmarks pointing to page 3 and all their descendants ``` pdftl in.pdf delete_bookmarks 3 recursive output out.pdf ``` > Delete bookmarks pointing to pages 1-5, treating destination-less bookmarks as matched ``` pdftl in.pdf delete_bookmarks 1-5 no_dest output out.pdf ``` > Delete bookmarks pointing to odd pages, including all descendants ``` pdftl in.pdf delete_bookmarks odd recursive output out.pdf ``` **Tags**: in_place, bookmarks, outlines, delete *Source: pdftl.operations.delete_bookmarks* *Read online: [https://pdftl.readthedocs.io/en/stable/operations/delete_bookmarks.html](https://pdftl.readthedocs.io/en/stable/operations/delete_bookmarks.html)* *Type: Operation*