三联单长这样:

java 三联单打印插件 三联单打印模板_Click

打印出来的效果长这样:

java 三联单打印插件 三联单打印模板_java 三联单打印插件_02

正题:

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

一、打印机配置

  1. 将针式打印机连接入电脑,进入“控制面板”-》“设备和打印机”,如果打印机那一栏出现了刚连入的打印机,说明连接成功。
  2. 如图:

  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);
}

最后,当然就搞定啦!