I'm assuming you want the whole report to fit onto one printer page, right? Then you may perform scaling from the whole form to the whole printer page. Further assuming printer DPI=300 and A4 is 8.3x11.7 inches the working prototype of scaler might be:
let printFormScaled (form: Form) (printer: PrintPageEventArgs) pageSizeInch =
let mutable target = new Rectangle(0,0,int((fst pageSizeInch)*300.),int((snd pageSizeInch)*300.))
let bitmap = new Bitmap(form.Width, form.Height)
form.DrawToBitmap(bitmap, new Rectangle(0,0, bitmap.Width, bitmap.Height))
let xScale:double = (double bitmap.Width)/(double target.Width)
let yScale:double = (double bitmap.Height)/(double target.Height)
if (xScale < yScale) then
target.Width <- int(xScale * (double target.Width) / yScale)
else
target.Height <- int(yScale * (double target.Height) / xScale)
printer.Graphics.PageUnit <- GraphicsUnit.Pixel
printer.Graphics.DrawImage(bitmap, target)
and change printer PrintPage event handler to
printer.PrintPage.Add(fun prt -> printFormScaled form prt (8.3,11.7))