我在一个项目中用到了票据的套打,现在把套打部门专门写了个小程序,内容比较简单,仅供大家参考
下面是界面截图:
这个小程序的目的是将文本框的内容打印到票据的不同位置。
1、首先我们需要定义一些打印的参数,包括X坐标偏移、Y坐标偏移、打印字体和打印控件。
private decimal decX = 0.4m;//修正
private decimal decY = 0.4m; //修正
Font printFont = new Font("宋体", 11);//打印字体
private PrintDocument printdoc;//打印控件
2、然后实现打印按钮
/// <summary>
/// 打印
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
this.printdoc = new System.Drawing.Printing.PrintDocument();
this.printdoc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printdoc_PrintPage);
try
{
this.printdoc.Print();
}
catch (Exception ex)
{
MessageBox.Show("打印出错!" + ex.StackTrace, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
printdoc.PrintController.OnEndPrint(printdoc, new PrintEventArgs());
}
}
3、定义打印的具体实现
/// <summary>
/// 套打--打印到指定位置
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void printdoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
//将文本框的内容打印到单据的指定位置,具体实践的时候需要慢慢调整位置,很难一次成功
DrawString(e, this.textBox1.Text, GetPoint(2.8m - decX, 2.0m - decY));
//打印内容2
DrawString(e, this.textBox2.Text, GetPoint(5.8m - decX, 4.8m - decY));
}
4、重写绘图方法
/// <summary>
/// 重写绘图方法
/// </summary>
/// <param name="e"></param>
/// <param name="s"></param>
/// <param name="point"></param>
private void DrawString(PrintPageEventArgs e, string s, Point point)
{
e.Graphics.DrawString(s , printFont, Brushes.Black, GetRect(point));
}
5、像素变换及绘制文本位置
/// <summary>
/// 输入厘米转换成像素
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
private Point GetPoint(Decimal x, Decimal y)
{
return new Point((int)(x * 0.3937m * 100), (int)(y * 0.3937m * 100));
}
/// <summary>
/// 绘制文本的位置
/// </summary>
/// <param name="point"></param>
/// <returns></returns>
private RectangleF GetRect(Point point)
{
return new RectangleF(point.X, point.Y, (float)(15 * 0.3937 * 100), printFont.Height + 1);
}
源码工程下载地址:
http://download.csdn.net/source/3479070