-center-to-fit done

This commit is contained in:
John Whitington
2024-10-31 14:48:56 +00:00
parent 5d7da8687c
commit 27e9b12487
2 changed files with 11 additions and 10 deletions

View File

@@ -1219,7 +1219,7 @@ let setstretch s =
setop Stretch (); setop Stretch ();
args.coord <- s args.coord <- s
let setcenter s = let setcentertofit s =
setop CenterToFit (); setop CenterToFit ();
args.coord <- s args.coord <- s
@@ -2102,7 +2102,7 @@ let specs =
Arg.String setstretch, Arg.String setstretch,
" -stretch \"x y\" scales without preserving aspect ratio"); " -stretch \"x y\" scales without preserving aspect ratio");
("-center-to-fit", ("-center-to-fit",
Arg.String setcenter, Arg.String setcentertofit,
" -center-to-fit \"x y\" centers pages on page size (x, y)"); " -center-to-fit \"x y\" centers pages on page size (x, y)");
("-scale-contents", ("-scale-contents",
Arg.Float setscalecontents, Arg.Float setscalecontents,

View File

@@ -573,12 +573,6 @@ let crop_pdf ?(box="/CropBox") xywhlist pdf range =
(* Centre page content (crop box) on given page size, with no scaling. *) (* Centre page content (crop box) on given page size, with no scaling. *)
let center_to_fit sxsylist pdf range = let center_to_fit sxsylist pdf range =
let list4 = map (fun (x, y) -> (0., 0., x, y)) sxsylist in
let pdf = set_mediabox list4 pdf range in
let pdf = crop_pdf list4 pdf range in
let pdf = remove_bleed_pdf pdf range in
let pdf = remove_art_pdf pdf range in
let pdf = remove_bleed_pdf pdf range in
let dxdylist = let dxdylist =
let tx, ty = hd sxsylist in let tx, ty = hd sxsylist in
map map
@@ -590,10 +584,17 @@ let center_to_fit sxsylist pdf range =
| Some r -> r | Some r -> r
| None -> page.Pdfpage.mediabox) | None -> page.Pdfpage.mediabox)
in in
(tx -. (maxx -. minx)) /. 2., (ty -. (maxy -. miny)) /. 2.) (~-.((tx -. (maxx -. minx)) /. 2.),
~-.((ty -. (maxy -. miny)) /. 2.)))
(Pdfpage.pages_of_pagetree pdf) (Pdfpage.pages_of_pagetree pdf)
in in
shift_boxes dxdylist pdf range let list4 = map (fun (x, y) -> (0., 0., x, y)) sxsylist in
let pdf = set_mediabox list4 pdf range in
let pdf = crop_pdf list4 pdf range in
let pdf = remove_bleed_pdf pdf range in
let pdf = remove_art_pdf pdf range in
let pdf = remove_bleed_pdf pdf range in
shift_boxes dxdylist pdf range
(* Scale to fit page of size x * y *) (* Scale to fit page of size x * y *)
let scale_to_fit_pdf ?(fast=false) position input_scale xylist op pdf range = let scale_to_fit_pdf ?(fast=false) position input_scale xylist op pdf range =