From 5e48becc95e3c4a314e969fb5936165c56afc717 Mon Sep 17 00:00:00 2001 From: John Whitington Date: Mon, 22 Jul 2024 13:19:48 +0100 Subject: [PATCH] Improve struct tree splitting docs --- cpdfmanual.pdf | Bin 424269 -> 424502 bytes cpdfmanual.tex | 38 +++++++++++++++++++++++++++++--------- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/cpdfmanual.pdf b/cpdfmanual.pdf index 9dc7cde0e87cd83257e88f238e1056e44407917c..9b6396b466c07ea2c42a5e131ce79ac829eeb03c 100644 GIT binary patch delta 13035 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 diff --git a/cpdfmanual.tex b/cpdfmanual.tex index eeb6c8a..5a109c0 100644 --- a/cpdfmanual.tex +++ b/cpdfmanual.tex @@ -5176,10 +5176,10 @@ If the drawing range is a single page, and the next page already exists, the dra \noindent\verb!cpdf -print-struct-tree in.pdf! \vspace{1.5mm} - \noindent\verb!cpdf -extract-struct-tree in.pdf -o out.json]! + \noindent\verb!cpdf -extract-struct-tree in.pdf -o out.json! \vspace{1.5mm} - \noindent\verb!cpdf -replace-struct-tree in.json in.pdf -o out.pdf]! + \noindent\verb!cpdf -replace-struct-tree in.json in.pdf -o out.pdf! \vspace{1.5mm} \noindent\verb!cpdf -verify "PDF/UA-1(matterhorn)" [-json] in.pdf! @@ -5195,15 +5195,19 @@ If the drawing range is a single page, and the next page already exists, the dra \end{framed}} -PDF/UA (Universal Accessibility) is a PDF subformat whose rules consist of a set of machine-checkable and human-checkable-only requirements to make PDF documents accessible for all users - for example, those using screen readers. Cpdf has some basic facilities for manipulating the extra PDF constructs which are used in (amongst others) PDF/UA, and a basic verifier for most of the machine-checkable requirements. +PDF/UA (Universal Accessibility) is a PDF subformat whose rules consist of a set of machine-checkable and human-checkable-only requirements to make PDF documents accessible for all users - for example, those using screen readers. Cpdf has some basic facilities for manipulating the extra PDF constructs which are used in (amongst others) PDF/UA, and a basic verifier for many of the machine-checkable requirements. \section{Structure trees} -In a PDF document, the optional Structure Tree is a parallel construct which describes the logical structure of a document (as opposed to the information for rendering the document on the screen or printing it out, which every PDF of course contains). +In a PDF document, the optional Structure Tree is a parallel construct which describes the logical structure of a document (as opposed to the information for rendering the document on the screen or printing it out, which every PDF of course contains.) -We can print an abbreviated form of the structure tree to standard output with \texttt{cpdf -print-struct-tree in.pdf}: +We can print an abbreviated form of the structure tree to standard output: -\smallgap + \begin{framed} + \noindent\small\verb!cpdf -print-struct-tree in.pdf! + \end{framed} + +\noindent This might yield: \begin{minipage}{\linewidth} \begin{framed} @@ -5230,7 +5234,13 @@ We can print an abbreviated form of the structure tree to standard output with \ \end{minipage} \smallgap -\noindent The numbers in parentheses are the page numbers for structure elements, where present. To extract the full structure tree to JSON, we can use \texttt{cpdf -extract-struct-tree in.pdf -o out.json}: +\noindent The numbers in parentheses are the page numbers for structure elements, where present. We can extract the full structure tree to JSON for inspection or manupulation: + + \begin{framed} + \noindent\small\verb!cpdf -extract-struct-tree in.pdf -o out.json! + \end{framed} + +\noindent Here is a typical fragment: {\small\begin{verbatim} [ @@ -5272,9 +5282,19 @@ We can print an abbreviated form of the structure tree to standard output with \ \noindent This JSON file contains the structure tree objects from the file, using the format described in chapter \ref{chap:15}. There is a special entry in object \texttt{0} which gives the key to the page object numbers. In this example, there is one page with object number \texttt{52}. -This JSON file can be edited, for example to change text strings, and reapplied with \texttt{cpdf -replace-struct-tree out.json in.pdf -o out.pdf}. If extra objects are required, they should be introduced with negative object numbers: cpdf will renumber them on import so as not to clash with any existing numbers. +This JSON file can be edited, for example to change text strings, and reapplied to the same file from which it was extracted: -To remove a structure tree from a PDF, we can use \texttt{-remove-dict-entry} from Chapter \ref{chap:misc} i.e \texttt{cpdf -remove-dict-entry /StructTreeRoot in.pdf -o out.pdf}. + \begin{framed} + \noindent\small\verb!cpdf -replace-struct-tree out.json in.pdf -o out.pdf! + \end{framed} + +\noindent If extra objects are required, they should be introduced with negative object numbers: cpdf will renumber them on import so as not to clash with any existing numbers. + +To remove a structure tree from a PDF, we can use \texttt{-remove-dict-entry} from Chapter \ref{chap:misc}, in other words: + + \begin{framed} + \noindent\small\verb!cpdf -remove-dict-entry /StructTreeRoot in.pdf -o out.pdf! + \end{framed} \section{Verifying conformance to PDF/UA}