From 149d7c439b8c1ac217baefc0d0b323df85b8e5cd Mon Sep 17 00:00:00 2001 From: John Whitington Date: Thu, 6 Mar 2025 15:33:24 +0000 Subject: [PATCH] On with toc --- cpdftoc.ml | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/cpdftoc.ml b/cpdftoc.ml index cb11858..f7aa5dc 100644 --- a/cpdftoc.ml +++ b/cpdftoc.ml @@ -288,12 +288,18 @@ let typeset_table_of_contents ~font ~fontsize ~title ~bookmark ~dotleader ~proce map (fun x -> Pdf.Indirect x) (p_struct_elem_first_page::flatten link_struct_elems_for_each_page) in (* Add the key and value structure item (any p, and that page's links) to the parent tree for each TOC page *) - iter - (fun o -> - let page = Pdf.lookup_obj pdf o in - let ptn = add_to_parent_tree pdf (Pdf.Array []) in - Pdf.addobj_given_num pdf (o, Pdf.add_dict_entry page "/StructParents" (Pdf.Integer ptn))) - toc_pageobjnums; + let toc_structure_items_per_page = + match link_struct_elems_for_each_page with + | h::t -> (p_struct_elem_first_page::h)::t + | [] -> [] + in + iter2 + (fun o ns -> + let page = Pdf.lookup_obj pdf o in + let ptn = add_to_parent_tree pdf (Pdf.Array (map (fun x -> Pdf.Indirect x) ns)) in + Pdf.addobj_given_num pdf (o, Pdf.add_dict_entry page "/StructParents" (Pdf.Integer ptn))) + toc_pageobjnums + toc_structure_items_per_page; begin match Pdf.lookup_chain pdf pdf.Pdf.trailerdict ["/Root"; "/StructTreeRoot"; "/K"] with | Some (Pdf.Array a) -> Pdf.replace_chain pdf ["/Root"; "/StructTreeRoot"; "/K"] (Pdf.Array (prepending_structitems @ a))