This commit is contained in:
John Whitington 2021-10-25 18:48:28 +01:00
parent 5ab1d6c7d5
commit a840c9b2c1
1 changed files with 12 additions and 6 deletions

18
cpdf.ml
View File

@ -2906,24 +2906,30 @@ let impose_pages fit x y columns rtl btt center margin spacing linewidth output_
Pdfpage.resources = resources';
Pdfpage.rest = rest'}
let make_space ~fast spacing pdf =
(* For fit, we scale contents, move to middle and retain page size. For xy, we
expand mediabox and move contents to middle. *)
let make_space fit ~fast spacing pdf =
let margin = spacing /. 2. in
let endpage = Pdfpage.endpage pdf in
let all = ilist 1 endpage in
let firstpage = hd (Pdfpage.pages_of_pagetree pdf) in
let width =
let width, height =
match Pdf.parse_rectangle firstpage.Pdfpage.mediabox with
xmin, _, xmax, _ -> xmax -. xmin
xmin, ymin, xmax, ymax -> (xmax -. xmin, ymax -. ymin)
in
let sc = (width -. spacing) /. width in
if fit then
shift_pdf
~fast
(many (margin, margin) endpage)
(scale_contents ~fast (Cpdfposition.BottomLeft 0.) sc pdf all)
(scale_contents ~fast (Cpdfposition.BottomLeft 0.) ((width -. spacing) /. width) pdf all)
all
else
set_mediabox
(many (0., 0., width +. spacing, height +. spacing) endpage)
(shift_pdf ~fast (many (margin, margin) endpage) pdf all) all
let impose ~x ~y ~fit ~columns ~rtl ~btt ~center ~margin ~spacing ~linewidth ~fast pdf =
let pdf = if fit then make_space ~fast spacing pdf else pdf in
let pdf = make_space fit ~fast spacing pdf in
let endpage = Pdfpage.endpage pdf in
let firstpage = hd (Pdfpage.pages_of_pagetree pdf) in
let _, _, w, h = Pdf.parse_rectangle firstpage.Pdfpage.mediabox in