From bddda88b7197657fa01aff89a7c617a5f8dc1e9a Mon Sep 17 00:00:00 2001 From: John Whitington Date: Tue, 5 Nov 2024 11:51:47 +0000 Subject: [PATCH] Add piece info to composition --- Changes | 3 ++- cpdfcomposition.ml | 28 ++++++++++++++++++++++++---- cpdfmanual.pdf | Bin 440682 -> 440688 bytes cpdfmanual.tex | 4 +++- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/Changes b/Changes index 58148f5..02a8c5c 100644 --- a/Changes +++ b/Changes @@ -1,9 +1,10 @@ 2.7.3 (to come) o New -center-to-fit centres pages on a given paper size -o Allow bold, italic, colours for bookmarks +o Allow bold, italic, colours for JSON bookmarks o Clean up @B implementation for -split-on-bookmarks o Add @b@ for trimming bookmark text to given length +o Add Piece Info to -composition[-json] 2.7.2 (October 2024) diff --git a/cpdfcomposition.ml b/cpdfcomposition.ml index 6aa2342..005d982 100644 --- a/cpdfcomposition.ml +++ b/cpdfcomposition.ml @@ -18,6 +18,23 @@ let find_composition_structure_info pdf marked = end | _ -> [] +let find_composition_piece_info pdf marked = + let l = ref [] in + Pdf.objiter + (fun i obj -> + match Pdf.lookup_direct pdf "/PieceInfo" obj with + | Some x -> + let objs = Pdf.objects_referenced [] [] pdf x in + iter + (fun i -> + match Hashtbl.find marked i with + | () -> () + | exception Not_found -> l := i::!l; Hashtbl.add marked i ()) + objs + | None -> ()) + pdf; + !l + let find_composition_images pdf i obj marked = match Hashtbl.find marked i with () -> [] | exception Not_found -> match Pdf.lookup_direct pdf "/Subtype" obj with @@ -91,7 +108,8 @@ let find_composition pdf = fonts := find_composition_fonts pdf i obj marked @ !fonts) pdf; let structure_info = find_composition_structure_info pdf marked in - (!images, !fonts, !content_streams, structure_info) + let piece_info = find_composition_piece_info pdf marked in + (!images, !fonts, !content_streams, structure_info, piece_info) let size pdf i = String.length (Pdfwrite.string_of_pdf_including_data (Pdf.lookup_obj pdf i)) @@ -119,22 +137,24 @@ let compressed_xref_table_size pdf = let show_composition_json filesize pdf = let perc x = float_of_int x /. float_of_int filesize *. 100. in - let o_images, o_fonts, o_content_streams, o_structure_info = find_composition pdf in - let images, fonts, content_streams, structure_info, attached_files, xref_table = + let o_images, o_fonts, o_content_streams, o_structure_info, o_piece_info = find_composition pdf in + let images, fonts, content_streams, structure_info, attached_files, piece_info, xref_table = compressed_size pdf o_images, compressed_size pdf o_fonts, compressed_size pdf o_content_streams, compressed_size pdf o_structure_info, Cpdfattach.size_attached_files pdf, + compressed_size pdf o_piece_info, compressed_xref_table_size pdf in - let r = images + fonts + content_streams + structure_info + attached_files + xref_table in + let r = images + fonts + content_streams + structure_info + attached_files + xref_table + piece_info in `List [`List [`String "Images"; `Int images; `Float (perc images)]; `List [`String "Fonts"; `Int fonts; `Float (perc fonts)]; `List [`String "Content streams"; `Int content_streams; `Float (perc content_streams)]; `List [`String "Structure Info"; `Int structure_info; `Float (perc structure_info)]; `List [`String "Attached Files"; `Int attached_files; `Float (perc attached_files)]; `List [`String "XRef Table"; `Int xref_table; `Float (perc xref_table)]; + `List [`String "Piece Info"; `Int piece_info; `Float (perc piece_info)]; `List [`String "Unclassified"; `Int (filesize - r); `Float (perc (filesize - r))]] let show_composition_json_blob filesize pdf = diff --git a/cpdfmanual.pdf b/cpdfmanual.pdf index 7db6b3abc9db92d9245bd7490618fba3c8f0e9f5..8fa9ea7447a113a3c7b1688646bb9ff19217c657 100644 GIT binary patch delta 7815 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 diff --git a/cpdfmanual.tex b/cpdfmanual.tex index 47b9c8f..fc8a3f0 100644 --- a/cpdfmanual.tex +++ b/cpdfmanual.tex @@ -3600,6 +3600,7 @@ Content streams: 132767 bytes (42.85%) Structure Info: 0 bytes (0.00%) Attached Files: 0 bytes (0.00%) XRef Table: 21082 bytes (6.80%) +Piece Info: 0 bytes (0.00%) Unclassified: 11229 bytes (3.62%) \end{verbatim} \end{framed}\pagestyle{empty}\thispagestyle{fancy} @@ -3614,12 +3615,13 @@ Unclassified: 11229 bytes (3.62%) ("Structure Info", 0, 0.0), ("Attached Files", 0, 0.0), ("XRef Table", 21082, 6.8048378194306816), + ("Piece Info", 0, 0.0), ("Unclassified", 11229, 3.6244912187831857) ] \end{verbatim} \end{framed}\pagestyle{empty}\thispagestyle{fancy} -\noindent Note that, due to small inaccuracies in the method, it is possible for the \texttt{Unclassified} number to be negative. +\noindent Note that, due to small inaccuracies in the method, it is possible for the \texttt{Unclassified} numbers to be negative. \begin{cpdflib} \clearpage