三联单长这样:
打印出来的效果长这样:
正题:
如果在以下步骤中,有部分步骤因为打印机驱动原因没法实现,可以点我下载,或者自己根据打印机型号去官网下载相应打印机驱动。
一、打印机配置
- 将针式打印机连接入电脑,进入“控制面板”-》“设备和打印机”,如果打印机那一栏出现了刚连入的打印机,说明连接成功。
- 如图:
- 这样就配置好啦,但是还有小小的最后一个小步骤需要注意。每次使用打印机时,将左边的齿轮推至0刻度,并将单据卡在齿轮上:
二、C#代码
- 添加三个按钮:分别是“设置打印机”、“设置打印机纸张”、“直接打印”
- 添加控件printDocument:
- “设置打印机”、“设置打印机纸张”点击事件代码:
/// <summary>
/// 打印机设置
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void 打印机设置ToolStripMenuItem_Click(object sender, EventArgs e)
{
PrintDialog printDialog = new PrintDialog();
printDialog.Document = printDocument1;
printDialog.ShowDialog();
}
/// <summary>
/// 设置打印机纸张
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void 设置打印机纸张ToolStripMenuItem_Click(object sender, EventArgs e)
{
PageSetupDialog pageSetupDialog = new PageSetupDialog();
pageSetupDialog.Document = printDocument1;
pageSetupDialog.ShowDialog();
}
- “直接打印”按钮代码:
/// <summary>
/// 资金到帐单打印
/// 这里写在for循环里面调用,是为了连续打印
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void 直接打印ToolStripMenuItem_Click(object sender, EventArgs e)
{
// 获取需要打印的资金到帐单结果集
List<fundBillInfoPrint> tFundBillInfoList = getTFundBillInfoPrint();
for (int i = 0;i < tFundBillInfoList.Count; i++)
{
fundBillInfoPrint = tFundBillInfoList[i];
try
{
PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
printPreviewDialog.Document = printDocument1;
printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage);
printDocument1.Print();
// 把上面代码注释掉,下面注释的代码打开即可弹出预览框
/*PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
printPreviewDialog.Document = printDocument1;
printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage);
if (printPreviewDialog.ShowDialog() == DialogResult.OK)
{
printDocument1.Print();
}*/
}
catch (Exception excep)
{
MessageBox.Show(excep.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
/// <summary>
/// 打印使用的临时全局变量
/// </summary>
TFundBillInfo fundBillInfoPrint = null;
/// <summary>
/// 打印事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
if (fundBillInfoPrint != null)
{
Graphics g = e.Graphics;
this.Postion(g, fundBillInfoPrint);
}
}
/// <summary>
/// 资金到帐单打印公共类
/// </summary>
/// <param name="e"></param>
/// <param name="fundBillInfo">打印数据</param>
public static void Postion(Graphics e, TFundBillInfo fundBillInfo)
{
// 获取全局偏移量,作用是为了可全局调控整个打印单整体偏移,便于矫正
int x = SysContent.xGlobalOffsetValue;
int y = SysContent.yGlobalOffsetValue;
Font fontNormalContent = new Font("华文楷体", 12F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(134)));
Pen pen = new Pen(Color.Black, 1);
// 单据日期
string fDate = fundBillInfo.fDate;
// 收款银行名称
string fBankName = fundBillInfo.fBankName;
// 收款银行账号
string fBankNumber = fundBillInfo.fBankNumber;
// 总流水号
string fOrder = fundBillInfo.fOrder;
// 单位编码
string fClientNum = string.IsNullOrEmpty(fundBillInfo.fClientNum) ? "" : fundBillInfo.fClientNum;
// 单位名称
string fClientName = fundBillInfo.fClientName;
// 单位流水号
string fClientOrder = fundBillInfo.fClientOrder;
// 到账时间
string fPayDate = DateTime.Parse(fundBillInfo.fPayDate).ToString("yyyy-MM-dd");
// 付款单位
string fPayClient = fundBillInfo.fPayClient;
// 资金类别
string fFundTypeName = fundBillInfo.fFundTypeName;
// 到账金额(大写)
string fAmountBigStr = fundBillInfo.fAmountBigStr;
// 到账金额
string fAmount = Convert.ToDecimal(fundBillInfo.fAmount.ToString()).ToString("0.00");
// 补齐字符串金额为11位
if (fAmount.Contains("."))
{
fAmount = fAmount.Replace(".", "");
}
//fAmount = fAmount.PadLeft(11, '0');
// 摘要信息
string fExp = fundBillInfo.fExp;
// 收款银行名称
e.DrawString(fBankName, fontNormalContent, Brushes.Black, 145 + x, 85 + y);
// 收款银行账号
e.DrawString(fBankNumber, fontNormalContent, Brushes.Black, 330 + x, 85 + y);
// 总流水号
e.DrawString(fOrder, fontNormalContent, Brushes.Black, 635 + x, 85 + y);
// 单位编码
e.DrawString(fClientNum, fontNormalContent, Brushes.Black, 145 + x, 115 + y);
// 单位名称
e.DrawString(fClientName, fontNormalContent, Brushes.Black, 330 + x, 115 + y);
// 单位流水号
e.DrawString(fClientOrder, fontNormalContent, Brushes.Black, 635 + x, 115 + y);
// 到账时间
e.DrawString(fPayDate, fontNormalContent, Brushes.Black, 145 + x, 145 + y);
// 付款单位
e.DrawString(fPayClient, fontNormalContent, Brushes.Black, 330 + x, 145 + y);
// 资金类别
e.DrawString(fFundTypeName, fontNormalContent, Brushes.Black, 635 + x, 145 + y);
// 到账金额(大写)
e.DrawString(fAmountBigStr, fontNormalContent, Brushes.Black, 190 + x, 185 + y);
// 到账金额-每两个字符间添加空格填充
int fAmountXLocation = ((11 - fAmount.Length) * 18) + 545;
fAmount = Regex.Replace(fAmount, @"(?<=.{1}).{1}", " $0");
e.DrawString(fAmount, fontNormalContent, Brushes.Black, fAmountXLocation + x, 195 + y);
// 摘要信息
e.DrawString(fExp, fontNormalContent, Brushes.Black, 550 + x, 230 + y);
// 单据日期
DateTime dt = DateTime.Parse(fDate);
string year = dt.Year.ToString();
string month = dt.Month.ToString();
string day = dt.Day.ToString();
e.DrawString(year, fontNormalContent, Brushes.Black, 315 + x, 60 + y);
e.DrawString(month, fontNormalContent, Brushes.Black, 375 + x, 60 + y);
e.DrawString(day, fontNormalContent, Brushes.Black, 420 + x, 60 + y);
}
最后,当然就搞定啦!