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;
}
}
}
,