Optional absolute rectangles

This commit is contained in:
John Whitington 2024-09-24 20:40:14 +01:00
parent 6495daba8c
commit b676ab4923
3 changed files with 25 additions and 7 deletions

View File

@ -19,6 +19,10 @@ New features:
o -stretch scales without preserving aspect ratio o -stretch scales without preserving aspect ratio
o -redact removes whole pages o -redact removes whole pages
Extended features:
o Rectangle may be specified as x y x2 y2 rather than x y w h
* = Supported by a grant from NLnet * = Supported by a grant from NLnet
2.7.1 (July 2024) 2.7.1 (July 2024)

View File

@ -207,20 +207,33 @@ let parse_units_string pdf page s =
fs fs
let parse_rectangle pdf s = let parse_rectangle pdf s =
try (* If it begins with ? it's absolute *)
match parse_units_string pdf emptypage s with let s, absolute =
| [x; y; w; h] -> x, y, w, h match explode s with
| _ -> error ("Bad rectangle specification " ^ s) | '?'::r -> implode r, true
with | _ -> s, false
e -> error ("Bad rectangle specification " ^ s ^ " : " ^ Printexc.to_string e) in
try
match parse_units_string pdf emptypage s with
| [x; y; w; h] ->
if absolute then x, y, w -. x, h -. y else x, y, w, h
| _ -> error ("Bad rectangle specification " ^ s)
with
e -> error ("Bad rectangle specification " ^ s ^ " : " ^ Printexc.to_string e)
let parse_rectangles pdf s = let parse_rectangles pdf s =
(* If it begins with ? it's absolute *)
let s, absolute =
match explode s with
| '?'::r -> implode r, true
| _ -> s, false
in
try try
let pages = Pdfpage.pages_of_pagetree pdf in let pages = Pdfpage.pages_of_pagetree pdf in
let groups = List.map (fun page -> parse_units_string pdf page s) pages in let groups = List.map (fun page -> parse_units_string pdf page s) pages in
List.map List.map
(function (function
| [x; y; w; h] -> (x, y, w, h) | [x; y; w; h] -> if absolute then x, y, w -. x, h -. y else x, y, w, h
| _ -> error ("Bad rectangle specification " ^ s)) | _ -> error ("Bad rectangle specification " ^ s))
groups groups
with with

View File

@ -1,5 +1,6 @@
%Document -stretch %Document -stretch
%Document -redact %Document -redact
%Document ?x0 y0 x1 y1 rectangle specifications
\documentclass{book} \documentclass{book}
% Edit here to produce cpdfmanual.pdf, cpdflibmanual.pdf, pycpdfmanual.pdf, % Edit here to produce cpdfmanual.pdf, cpdflibmanual.pdf, pycpdfmanual.pdf,
% dotnetcpdflibmanual.pdf, jcpdflibmanual.pdf jscpdflibmanual.pdf etc. % dotnetcpdflibmanual.pdf, jcpdflibmanual.pdf jscpdflibmanual.pdf etc.