From 4e9fdbe21cc0426ed0299b78c5d486f024b3796c Mon Sep 17 00:00:00 2001 From: John Whitington Date: Mon, 23 Sep 2024 17:45:22 +0100 Subject: [PATCH] Flatter E2, hence better -print-struct-tree --- cpdfmanual.pdf | Bin 436566 -> 436484 bytes cpdfmanual.tex | 44 ++++++++++++++++++-------------------------- cpdfua.ml | 11 +++++++++-- 3 files changed, 27 insertions(+), 28 deletions(-) diff --git a/cpdfmanual.pdf b/cpdfmanual.pdf index b887b6a1a29c86a4aa8de9baab41179272d60207..4cecd1f04457bcb7256292d28045e68ec947308c 100644 GIT binary patch delta 17832 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

`VN8R*9O>} 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 delta 17885 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

litf=!_nhJg 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 diff --git a/cpdfmanual.tex b/cpdfmanual.tex index 8226c1e..e7b0851 100644 --- a/cpdfmanual.tex +++ b/cpdfmanual.tex @@ -5202,9 +5202,7 @@ To enable the generation of structure information, we may add \texttt{-draw-stru \begin{verbatim} $cpdf -print-struct-tree out.pdf /StructTreeRoot -└── - └── /P (1) - └──\end{verbatim} +└── /P (1)\end{verbatim} \noindent To prevent such automatic tagging, relying only on manual tags, use \texttt{-no-auto-tags}. The effect may be reversed at any point with \texttt{-auto-tags}. Unless told otherwise, Cpdf auto-tags text as paragraphs /P, and images as /Figure. @@ -5229,13 +5227,9 @@ There are two types of tag we can add manually. One kind is used to tag individu \begin{verbatim} /StructTreeRoot -└── - ├── /H1 (1) - │ └── - ├── /P (1) - │ └── - └── /P (1) - └── +├── /H1 (1) +├── /P (1) +└── /P (1) \end{verbatim} @@ -5344,22 +5338,20 @@ We can print an abbreviated form of the structure tree to standard output: \begin{framed} \begin{verbatim} /StructTreeRoot -└── - └── /Document - ├── /Sect - │ ├── /P (1) - │ │ ├── /Span (1) - │ │ └── - │ └── /Figure (1) - ├── /Sect - │ ├── /H1 (2) - │ └── /TOC - │ ├── /TOCI - │ │ └── /P - │ │ └── /Link (2) - . . - . . - . +└── /Document + ├── /Sect + │ ├── /P (1) + │ │ ├── /Span (1) + │ └── /Figure (1) + ├── /Sect + │ ├── /H1 (2) + │ └── /TOC + │ ├── /TOCI + │ │ └── /P + │ │ └── /Link (2) + . . + . . + . . \end{verbatim} \end{framed} \end{minipage} diff --git a/cpdfua.ml b/cpdfua.ml index 5cdc3b5..e717ab8 100644 --- a/cpdfua.ml +++ b/cpdfua.ml @@ -135,7 +135,9 @@ let read_st_basic pdf = | Pdf.Dictionary d -> begin match lookup "/StructTreeRoot" d with | None -> E2 ("/StructTreeRoot", [], []) - | Some st -> E2 ("/StructTreeRoot", [], [read_st_inner pdf st]) + | Some st -> + match read_st_inner pdf st with + | E2 (_, a, b) -> E2 ("/StructTreeRoot", a, b) end | _ -> error "read_st no root" @@ -1577,6 +1579,11 @@ let replace_struct_tree pdf json = with e -> error (Printf.sprintf "replace_struct_tree: %s" (Printexc.to_string e)) +let rec remove_empty = function + E2 (n, attrs, cs) -> + let cs' = map remove_empty cs in + E2 (n, attrs, lose (function E2 ("", _, []) -> true | _ -> false) cs') + let print_struct_tree pdf = let page_lookup = hashtable_of_dictionary (combine (Pdf.page_reference_numbers pdf) (ilist 1 (Pdfpage.endpage pdf))) @@ -1592,7 +1599,7 @@ let print_struct_tree pdf = (Cpdfprinttree.to_string ~get_name:(fun (E2 (x, a, _)) -> if int_of_string (get_page a) > 0 then x ^ " (" ^ get_page a ^ ")" else x) ~get_children:(fun (E2 (_, _, cs)) -> cs) - st) + (remove_empty st)) let cpdfua_args title = [ "-create-pdf";