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 7db6b3a..8fa9ea7 100644 Binary files a/cpdfmanual.pdf and b/cpdfmanual.pdf differ 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