new Rectangle((pWidth - zWidth) / 2

时间:2022-04-27 02:14:51

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Printing;

int currentY = 0; private void PrintDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) {//打印文档 Graphics g = e.Graphics;//获得绘图东西 //待打印区域宽高打印splitContainer1.Panel1中的内容 int aWidth = splitContainer1.Panel1.DisplayRectangle.Width; int aHeight = splitContainer1.Panel1.DisplayRectangle.Height; System.Drawing.Printing.PrintDocument pd = sender as System.Drawing.Printing.PrintDocument; //页宽高,Bounds自动会考虑到打印页是横向还是纵向打印  int pWidth = pd.DefaultPageSettings.Bounds.Width; int pHeight = pd.DefaultPageSettings.Bounds.Height;//如果打印区域宽度大于纸张,进行缩放 double scale = 0.9;//缩放倍数 int zWidth = aWidth; int zHeight = aHeight; if (aWidth >= pWidth * scale) {//缩小图片 zWidth = Convert.ToInt32(aWidth * scale); zHeight = Convert.ToInt32((zWidth * aHeight) / aWidth); } if (currentY < aHeight) {//新建位图存放打印部分 Bitmap bmp = new Bitmap(aWidth, aHeight); //将表格转换为位图 splitContainer1.Panel1.DrawToBitmap(bmp, new Rectangle(0, 0, aWidth, aHeight)); //打印指定位图的指定区域 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half; g.DrawImage(bmp, new Rectangle((pWidth - zWidth) / 2, currentY, zWidth, zHeight),//缩放图 new Rectangle(0, currentY, bmp.Width, bmp.Height),//源图 GraphicsUnit.Pixel); // 将当前打印内容的Y坐标设置为打印页高(如有多页,每次城市从当前(0, currentY)开始打印 currentY += pHeight; //当整个待打印区域超过了打印页,将暗示有多页 if (aHeight - currentY > 0) { e.HasMorePages = true; } else { e.HasMorePages = false; } } }