From 6495daba8c9da369362ec32fc99f79d88eb5628c Mon Sep 17 00:00:00 2001 From: John Whitington Date: Tue, 24 Sep 2024 15:45:32 +0100 Subject: [PATCH] remove slashes from print_struct_tree --- cpdfmanual.pdf | Bin 438514 -> 438512 bytes cpdfmanual.tex | 46 +++++++++++++++++++++++----------------------- cpdfua.ml | 5 ++++- 3 files changed, 27 insertions(+), 24 deletions(-) diff --git a/cpdfmanual.pdf b/cpdfmanual.pdf index b74c5efd371821f91b17728f5a09d589618df35b..3e595b88210c69cf6ea980a4832b2f2d9ce4b3b7 100644 GIT binary patch delta 8318 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 delta 8295 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 diff --git a/cpdfmanual.tex b/cpdfmanual.tex index 79999d1..653fe0b 100644 --- a/cpdfmanual.tex +++ b/cpdfmanual.tex @@ -5201,8 +5201,8 @@ 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} +StructTreeRoot +└── 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. @@ -5226,10 +5226,10 @@ There are two types of tag we can add manually. One kind is used to tag individu \noindent And here is the structure tree: \begin{verbatim} -/StructTreeRoot -├── /H1 (1) -├── /P (1) -└── /P (1) +StructTreeRoot +├── H1 (1) +├── P (1) +└── P (1) \end{verbatim} \noindent Content tagging is flat - every part of the content of a page is part of only one \texttt{-tag}. The logical structure of a document, however, is a tree structure -- sections contain paragraphs, and so on. To build the logical structure tree, we add structure tags using \texttt{-stag} / \texttt{-end-stag} pairs which, of course, may be nested. For example, let's put our H1, and P sections in a Section structure tag: @@ -5246,11 +5246,11 @@ There are two types of tag we can add manually. One kind is used to tag individu \noindent Here is the structure tree: \begin{verbatim} -/StructTreeRoot -└──/Section (1) - ├── /H1 (1) - ├── /P (1) - └── /P (1) +StructTreeRoot +└──Section (1) + ├── H1 (1) + ├── P (1) + └── P (1) \end{verbatim} \noindent Some PDF standards require that everything not marked as content (e.g paragraph, figure) etc. is marked as a an artifact. For example, a background image which is the same on every page, or a page border. This tells PDF processors that it is not logical content. @@ -5356,18 +5356,18 @@ We can print an abbreviated form of the structure tree to standard output: \begin{minipage}{\linewidth} \begin{framed} \begin{verbatim} -/StructTreeRoot -└── /Document - ├── /Sect - │ ├── /P (1) - │ │ ├── /Span (1) - │ └── /Figure (1) - ├── /Sect - │ ├── /H1 (2) - │ └── /TOC - │ ├── /TOCI - │ │ └── /P - │ │ └── /Link (2) +StructTreeRoot +└── Document + ├── Sect + │ ├── P (1) + │ │ ├── Span (1) + │ └── Figure (1) + ├── Sect + │ ├── H1 (2) + │ └── TOC + │ ├── TOCI + │ │ └── P + │ │ └── Link (2) . . . . . . diff --git a/cpdfua.ml b/cpdfua.ml index e717ab8..0dff577 100644 --- a/cpdfua.ml +++ b/cpdfua.ml @@ -1584,6 +1584,9 @@ let rec remove_empty = function let cs' = map remove_empty cs in E2 (n, attrs, lose (function E2 ("", _, []) -> true | _ -> false) cs') +let rec remove_slashes = function + E2 (n, attrs, cs) -> E2 ((match n with "" -> "" | n -> implode (tl (explode n))), attrs, map remove_slashes cs) + let print_struct_tree pdf = let page_lookup = hashtable_of_dictionary (combine (Pdf.page_reference_numbers pdf) (ilist 1 (Pdfpage.endpage pdf))) @@ -1599,7 +1602,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) - (remove_empty st)) + (remove_empty (remove_slashes st))) let cpdfua_args title = [ "-create-pdf";