Positions for -scale-to-fit

This commit is contained in:
John Whitington 2024-01-24 19:11:49 +00:00
parent b2d931da18
commit ae39f7f5c7
1 changed files with 17 additions and 11 deletions

View File

@ -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