对于打印页面来说,网页打印有很大的优势,因为有函数直接打印window.Print()就可以了很方便,但是对于winform除了使用一些第三方的类库之外就需要自己写代码了。
PrintDocument printDocument1 = new PrintDocument();
PrintPreviewDialog printPreviewDialog1 = new PrintPreviewDialog();
PrintDocument printDialog1 = new PrintDocument();
private void button1_Click(object sender, EventArgs e)
{
// printDocument1 为 打印控件
//设置打印用的纸张 当设置为Custom的时候,可以自定义纸张的大小,还可以选择A4,A5等常用纸型
this.printDocument1.DefaultPageSettings.PaperSize = new PaperSize("Custum", 500, 300);
this.printDocument1.PrintPage += new PrintPageEventHandler(this.MyPrintDocument_PrintPage);
//将写好的格式给打印预览控件以便预览
printPreviewDialog1.Document = printDocument1;
//显示打印预览
DialogResult result = printPreviewDialog1.ShowDialog();
//if (result == DialogResult.OK)
//this.MyPrintDocument.Print();
}
private void MyPrintDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
/*如果需要改变自己 可以在new Font(new FontFamily("黑体"),11)中的“黑体”改成自己要的字体就行了,黑体 后面的数字代表字体的大小
System.Drawing.Brushes.Blue , 170, 10 中的 System.Drawing.Brushes.Blue 为颜色,后面的为输出的位置 */
e.Graphics.DrawString("新乡市三月软件公司入库单", new Font(new FontFamily("黑体"), 11), System.Drawing.Brushes.Black, 170, 10);
e.Graphics.DrawString("供货商:河南科技学院", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Blue, 10, 12);
//信息的名称
e.Graphics.DrawLine(Pens.Black, 8, 30, 480, 30);
e.Graphics.DrawString("入库单编号", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 9, 35);
e.Graphics.DrawString("商品名称", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 160, 35);
e.Graphics.DrawString("数量", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 260, 35);
e.Graphics.DrawString("单价", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 330, 35);
e.Graphics.DrawString("总金额", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 400, 35);
e.Graphics.DrawLine(Pens.Black, 8, 50, 480, 50);
//产品信息
e.Graphics.DrawString("R2011-01-2016:06:35", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 9, 55);
e.Graphics.DrawString("联想A460", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 160, 55);
e.Graphics.DrawString("100", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 260, 55);
e.Graphics.DrawString("200.00", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 330, 55);
e.Graphics.DrawString("20000.00", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 400, 55);
e.Graphics.DrawLine(Pens.Black, 8, 200, 480, 200);
e.Graphics.DrawString("地址:新乡市河南科技学院信息工程学院", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 9, 210);
e.Graphics.DrawString("经办人:任忌", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 220, 210);
e.Graphics.DrawString("服务热线:15083128577", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 320, 210);
e.Graphics.DrawString("入库时间:" + DateTime.Now.ToString(), new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 9, 230);
}
以上就是自己拼接的打印界面,这是参考网络的一个例子很不错。
还有另外的一种方式就是将界面保存成为图片,然后打印图片。
//private void btnPrint_Click(object sender, EventArgs e)
//{
// if (this.printDialog1.ShowDialog() == DialogResult.OK)
// CaptureScreen();
// this.printDocument1.Print();
//}
打印预览
//private void btnView_Click(object sender, EventArgs e)
//{
// CaptureScreen();
// this.printPreviewDialog1.ShowDialog();
//}
打印设置
//private void btnSet_Click(object sender, EventArgs e)
//{
// this.pageSetupDialog1.ShowDialog();
//}
如果要打印整个窗体
//[System.Runtime.InteropServices.DllImport("gdi32.dll ")]
//public static extern long BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
//private void CaptureScreen()
//{
// Graphics mygraphics = this.panel1.CreateGraphics();
// Size s = this.panel1.Size; //如果要打印整个窗体Size s = this. Size;
// memoryImage = new Bitmap(s.Width, s.Height, mygraphics);
// Graphics memoryGraphics = Graphics.FromImage(memoryImage);
// IntPtr dc1 = mygraphics.GetHdc();
// IntPtr dc2 = memoryGraphics.GetHdc();
// BitBlt(dc2, 0, 0, this.Width, this.Height, dc1, 0, 0, 13369376);
// mygraphics.ReleaseHdc(dc1);
// memoryGraphics.ReleaseHdc(dc2);
//}
这也是一种方法,比那个要简单但是,自由度比较低。