宽度和高度都等比例缩放,这个之前咱们帖子中讨论的代码已经没有问题了,
之前讨论的代码是分别计算宽高的缩放比例,按照较小的那个比例设置缩放,比如这个表格,会按照高度进行缩放比例为64%(上下左右边距都设置为0)。
- var worksheet = workbook.Worksheets[0];
- worksheet.PageSetup.PaperSize = GrapeCity.Documents.Excel.PaperSize.A4;
- worksheet.PageSetup.LeftMargin = 0;
- worksheet.PageSetup.TopMargin = 0;
- worksheet.PageSetup.RightMargin = 0;
- worksheet.PageSetup.BottomMargin = 0;
- //将表格缩小到一张纸中打印
- worksheet.PageSetup.FitToPagesTall = 1;
- worksheet.PageSetup.FitToPagesWide = 1;
-
- //获取打印区域的原始宽高
- var size = new PrintManager().GetSize(worksheet.UsedRange);
- //以A4纸宽度为例,转毫米为point,
- double paperwidth = 210 / 25.4 * 72 - worksheet.PageSetup.LeftMargin- worksheet.PageSetup.RightMargin;
- double paperheight = 297 / 25.4 * 72 - worksheet.PageSetup.TopMargin - worksheet.PageSetup.BottomMargin;
- //计算缩放比例
- //按宽度
- int zoomW = (int)(paperwidth / size.Width * 100);
- //按高度
- int zoomH = (int)(paperheight / size.Height * 100);
- //设置缩放比例,取更小比例
- worksheet.PageSetup.Zoom = zoomW> zoomH?zoomH:zoomW;
复制代码
也就是说高度撑满,宽度会有剩余,默认会靠左显示,如下图
下一步需要做的也就计算一个左边距,以将左右居中
可以用以下代码
- worksheet.PageSetup.LeftMargin = paperwidth*(1-zoomH/100.0)/2;
复制代码
最终效果如下,如果上下左右本来就需要设置一定的最小边距,比如此例中需要设置一些上下边距的话,在第一步设置后再进行比例计算就行
|