C# winform 打印窗体内控件(以图片缩放的形式),核心部分代码
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); } }