C#打印机套打三联单

三联单长这样:

在这里插入图片描述

打印出来的效果长这样:

在这里插入图片描述

正题:

如果在以下步骤中,有部分步骤因为打印机驱动原因没法实现,可以点我下载,或者自己根据打印机型号去官网下载相应打印机驱动。

一、打印机配置

  1. 将针式打印机连接入电脑,进入“控制面板”-》“设备和打印机”,如果打印机那一栏出现了刚连入的打印机,说明连接成功。
  2. 如图:
    在这里插入图片描述
    List item
    在这里插入图片描述
  3. 这样就配置好啦,但是还有小小的最后一个小步骤需要注意。每次使用打印机时,将左边的齿轮推至0刻度,并将单据卡在齿轮上:
    在这里插入图片描述

二、C#代码

  1. 添加三个按钮:分别是“设置打印机”、“设置打印机纸张”、“直接打印”
    在这里插入图片描述
  2. 添加控件printDocument:
    在这里插入图片描述
  3. “设置打印机”、“设置打印机纸张”点击事件代码:
/// <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();
}
  1. “直接打印”按钮代码:
/// <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);
}

最后,当然就搞定啦!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哎呦喂O_o嗨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值