diff --git a/Changes b/Changes index 49a056e..7bf9994 100644 --- a/Changes +++ b/Changes @@ -11,6 +11,7 @@ o Identify PDF/A, PDF/X, PDF/E, PDF/VT, PDF/UA in -info o Identify AcroForm in -info o Extract font files from a document o List images on a page with -list-images[-json] +o Chop pages up into sections with -chop Extended features: diff --git a/cpdfchop.ml b/cpdfchop.ml index 8b9b0c9..1bfbfed 100644 --- a/cpdfchop.ml +++ b/cpdfchop.ml @@ -2,11 +2,24 @@ open Pdfutil open Cpdferror (* Resources - what to do with each. Bookmarks? Annotations - must be duplicated... *) -(* Test how the sharing affects other cpdf operations. *) +(* Test how the sharing affects other cpdf operations - especially with -fast! *) +(* Allow different orders - btt / ltr etc. *) (* Chop a single page into pieces. We prefer the cropbox when available. We set mediabox only, and delete any other boxes. *) -let chop_boxes x y p = [p; p] +(* FIXME check non-zero based boxes *) +let chop_boxes x y p = + if x < 1 || y < 1 then Cpdferror.error "chop_boxes bad specification" else + let move_page p dx dy = Printf.printf "move_page %f %f\n" dx dy; p in + let minx, miny, maxx, maxy = 0., 0., 540., 666. in + let w, h = (maxx -. minx) /. float_of_int x, (maxy -. miny) /. float_of_int y in + let ps = ref [] in + for ty = 0 to x do + for tx = 0 to y do + ps =| move_page p (w *. float_of_int tx) (h *. float_of_int ty *. ~-.1.) + done + done; + rev !ps (* Chop pages in the range into pieces *) let chop ~x ~y pdf range =