From ae39f7f5c7eb2e0aa545eb25513a7bc7e33f3f14 Mon Sep 17 00:00:00 2001 From: John Whitington Date: Wed, 24 Jan 2024 19:11:49 +0000 Subject: [PATCH] Positions for -scale-to-fit --- cpdfpage.ml | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/cpdfpage.ml b/cpdfpage.ml index 4086d97..e0c6662 100644 --- a/cpdfpage.ml +++ b/cpdfpage.ml @@ -532,21 +532,27 @@ let scale_to_fit_pdf ?(fast=false) position input_scale xylist op pdf range = if maxx <= 0. || maxy <= 0. then failwith "Zero-sized pages are invalid" else let fx = x /. (maxx -. minx) in let fy = y /. (maxy -. miny) in let scale = fmin fx fy *. input_scale in - let trans_x = - match position with - Cpdfposition.Left _ -> 0. - | Cpdfposition.Right _ -> (x -. (maxx *. scale)) - | _ -> (x -. (maxx *. scale)) /. 2. - and trans_y = - match position with - | Cpdfposition.Top _ -> (y -. (maxy *. scale)) - | Cpdfposition.Bottom _ -> 0. - | _ -> (y -. (maxy *. scale)) /. 2. - in + let trans_x = (x -. (maxx *. scale)) /. 2. in + let trans_y = (y -. (maxy *. scale)) /. 2. in let fixup_trans_x = -. (minx *. scale) /. 2. in let fixup_trans_y = -. (miny *. scale) /. 2. in + let position_trans_x = + let dx = (x -. ((maxx -. minx) *. scale)) /. 2. in + match position with + | Cpdfposition.Left _ -> ~-. dx + | Cpdfposition.Right _ -> dx + | _ -> 0. + in + let position_trans_y = + let dy = (y -. ((maxy -. miny) *. scale)) /. 2. in + match position with + | Cpdfposition.Top _ -> dy + | Cpdfposition.Bottom _ -> ~-. dy + | _ -> 0. + in (Pdftransform.matrix_of_transform [Pdftransform.Translate (fixup_trans_x, fixup_trans_y); + Pdftransform.Translate (position_trans_x, position_trans_y); Pdftransform.Translate (trans_x, trans_y); Pdftransform.Scale ((0., 0.), scale, scale)]) in