最近做了一个winForm的打印功能。由于初次制作,对这个也不太了解。所以在网上找了很多资料。最后整理出处如下代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Printing;
namespace WindowsApplication1
{
public partial class daochu : Form
{
public daochu()
{
InitializeComponent();
}
PrintDocument printDocument;
private void daochu_Load(object sender, EventArgs e)
{
PrintDocuments();
}
private void PrintDocuments()//封装事件
{
printDocument = new PrintDocument();
printDocument.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);//打印页面需指定相应的PrintDocument_PrintPrintPage事件委托
}
int iWidth=800;
int iHeight = 600;
int left=150;
int right=150;
int top=100;
int bottom = 100;
Graphics g;
Brush b;
Font titleFont;
Font fntTxt;
System.Drawing.Printing.PrintPageEventArgs x;
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
PrintStyle(e);
}
private void PrintStyle(System.Drawing.Printing.PrintPageEventArgs e)//打印样式的方法封装
{
this.printDocument1.DefaultPageSettings.PaperSize = new
System.Drawing.Printing.PaperSize("NewPrint", iWidth, iHeight); //设置打印纸的大小
titleFont = new Font("宋体", 18, FontStyle.Bold);//标题字体
fntTxt = new Font("宋体", 16, FontStyle.Regular);//正文文字
Margins margins = new Margins(left, right, top, bottom);//设置上下左右边距
printDocument.DefaultPageSettings.Margins = margins;
x = e;
float leftMargin = e.MarginBounds.Left;//左边距
float topMargin = e.MarginBounds.Top;//上边距
Brush brush = new SolidBrush(Color.Black);//画刷
//Pen pen = new Pen(Color.Black); //线条颜色
g = e.Graphics;
b = new SolidBrush(Color.Black);
Point po = new Point(10, 10);
try
{
e.Graphics.DrawString(GetPrintSW().ToString(), fntTxt, brush, po); //DrawString方式进行打印。
}
catch (Exception ex)
{
MessageBox.Show(this, "打印出错!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
///GetPrintSw方法用来构造打印文本,内部StringBuilder.AppendLine在Drawstring时单独占有一行。
// public StringBuilder GetPrintSW(string name, string IDcard, int Num) //外部传入值时用
public StringBuilder GetPrintSW() //直接在内部定义值
{
StringBuilder sb = new StringBuilder();
string AdrName = txtNames.Text.Trim();
if (AdrName == "")
{
AdrName = "中华人民共和国";
}
string title = "大中华" + AdrName + "动迁配套商品房";
string titles = "顺序号抽签资格确认单";
string IDcard = "622825198910223315"; //身份证
string name = "";
string names="";
if (name.Length == 2)
{
names= "\0\0"+name+"\0\0";
}
else if (name.Length == 3)
{
names ="\0"+ name+"\0" ;
}
else if (name.Length == 4)
{
names = name ;
}
else
{
names = "\0\0\0\0\0\0\0";
}
string Num="25"; //号码
string item1 = "\0\0\0\0经本单位审核确认,抽签人\0" + names + "\0有资格按《中华人民共";
string item2 = "和国国务院动迁配套商品房抽签公告》的规定参加顺序号抽签活动。";
string item3 = "请公证处按抽签公告的规定,为其办理顺序号电脑抽签公证。";
string item4 ="备注:\0证件号码为:\0" + IDcard + "\0抽签顺序号为:\0" + Num;
string item5 = " \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + AdrName + "民委员会";
//string item6 = "(抽签人暂存并交相关单位签约联)";
/*横向打印文本控制,后面的x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 2控制左右,20控制上下
g.DrawString("\r\n\r\r\n\r\n\r\n" + title , titleFont, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 2, 20));//标题
g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\n\r\n" + item1 + " \r\n\r\n\r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 4, 50));
*
g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\n" + item2 + " \r\n\r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 4, 120));
g.DrawString("\r\n\r\r\n\r\n\r\n\r\n" + item3 + " \r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 4, 190));
*
g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\n" + item4 + " \r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 2, 220));
*
g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\n\r\n \0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0日期:" + DateTime.Now.ToShortDateString(), fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 2, 250));
g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n" + item5 + " \r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 3, 300));
*/
for (int j = 1; j <= 2; j++)
{
int m = 0;
if (j == 1)
{
m = 0;
}
else
{
m = 580;
}
g.DrawString("\r\n\r\r\n\r\n\r\r" + title, titleFont, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 2, 10+m));//标题1
g.DrawString("\r\n\r\r\n\r\n\r\r\r\0\0\0\0\0\0\0\0\0\0\0\0" + titles, titleFont, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 3, 45 + m));//标题2
g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\n\r\0" + item1 + " \r\n\r\n\r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 6, 50 + m));
g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\0" + item2 + " \r\n\r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 6, 120 + m));
g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\r\0" + item3 + " \r\n\r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 6, 170 + m));
g.DrawString("\r\n\r\r\n\r\n\r\n\r\0" + item4 + " \r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 6, 240 + m));
g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\0\0" + item5 + " \r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 4, 290 + m));
g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\n\r\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0日期:" + DateTime.Now.ToShortDateString(), fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 2, 300 + m));
// g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\n\r\n\r\0" + item6 + " \r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 6, 310 + m));
}
/*以下方式属于第二种打印方式
sb.AppendLine("\r\n\r");//“\n”为换行符;“\r”为回车符
sb.AppendLine("\r\n\r");
sb.AppendLine("\r\n\r");
sb.AppendLine("\r\n");
//标题,主要是为了控制字体的样式方便
g.DrawString("\r\n\r\r\n\r\n\r\n" + title, titleFont, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 2, 15));
//sb.AppendLine("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + title + " \r\n\r");
sb.AppendLine("\0\0\0\0\0" + item1 + "\r\n\r");
sb.AppendLine("\0\0\0\0\0" + item2 + "\r\n\r");
sb.AppendLine("\0\0\0\0\0" + item3 + "\r\n");
sb.AppendLine("\r\n\r");
// sb.AppendLine("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + item4 + "\r\n\r");
g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\n\0\0\0\0\0\0" + item4 + " \r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 4, 240));
sb.AppendLine("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0日期:" + DateTime.Now.ToShortDateString());
sb.AppendLine("\r");
sb.AppendLine("\0\0\0\0\0\0\0\0\0\0" + item5);
// sb.AppendLine("-----------------------------------------");
*/
return sb;
}
private void btntxt_Click(object sender, EventArgs e)//打印
{
Printing();
}
private void Printing()//打印的方法
{
PrintDialog printDialog = new PrintDialog();
printDialog.Document = printDocument;
if (printDialog.ShowDialog() == DialogResult.OK)
{
try
{
printDocument.Print();
}
catch (Exception excep)
{
MessageBox.Show(excep.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
printDocument.PrintController.OnEndPrint(printDocument, new PrintEventArgs());
}
}
}
private void show_Click(object sender, EventArgs e)//打印预览
{
PrintPreview();
}
private void PrintPreview()//打印预览的方法
{
PageSetupDialog psd = new PageSetupDialog();
psd.Document = printDocument;
PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
printPreviewDialog.Document = printDocument;
/*横向打印预览设置 ps:默认为纵向
printDocument.PrinterSettings.PrintToFile = false;
printDocument.DefaultPageSettings.Landscape = true;
printDocument.PrinterSettings.DefaultPageSettings.Landscape = true;
printDocument.DefaultPageSettings.PrinterSettings.DefaultPageSettings.Landscape = true;
PrintDialog pDialog = new PrintDialog();
pDialog.Document = printDocument;
pDialog.PrinterSettings.DefaultPageSettings.Landscape = true;
pDialog.PrinterSettings.PrintToFile = false;
pDialog.Document.DefaultPageSettings.Landscape = true;
*/
try
{
printPreviewDialog.ShowDialog();
}
catch (Exception excep)
{
MessageBox.Show(excep.Message, "预览出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}