C# 调用打印机驱动实现打印功能

本文介绍了如何在C#中调用打印机驱动进行打印操作,包括检查和唤醒打印机、选择正确的通信端口,以及代码实现打印文档的过程。通过示例代码展示了获取打印机列表、设置打印内容和触发打印的方法,强调了驱动设置如端口选择、打印机状态等对打印成功的影响。

查看电脑上打印机驱动都有哪些,“控制面板”--找到--“设备和打印机”打开如图:选择打勾是默认打印机。

 图上打印机中有灰色和深色的打印机。灰色的一般是不可用的驱动。如何唤醒灰色图片打印机呢?

 对着打印机驱动右键点击“查看现在正在打印什么”----“打印机”---“脱机使用打印机”勾去掉即可。

如果打印任务列表里面有打印任务都全部取消掉。

 成功唤醒打印机,就可以正常调用驱动了。

 

点击“打印测试页”正常的话打印机会打印出测试页内容出来,如果打印不出来说明一点就是通信端口没有选对。点击“端口”选择对应的端口

 

 直到选择对应的打印机端口可以打印出自测页后,如果选择对应的端口了,还是不能打印,就有点击“查看现在正在打印什么”,取消所有的打印任务消息。再从新测试打印。
接下来我们就进行代码开发了。

 使用VS工具开发先创建一个项目,命名为“Drive_PrintFrom”

//获取所以打印机驱动名称
        private void getPrintDocumentlist()
        {
            PrintDocument print = new PrintDocument();
            string sDefault = print.PrinterSettings.PrinterName;//默认打印机名
            comboBox_drive.Items.Add(sDefault);

            comboBox_drive.Text = sDefault;//显示默认驱动名称
            foreach (string sPrint in PrinterSettings.InstalledPrinters)//获取所有打印机名称
            {

                if (sPrint != sDefault)
                {
                    comboBox_drive.Items.Add(sPrint); 
                }                
            }

        }

private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
        {

            Font titleFont = new Font("宋体", 9, FontStyle.Bold);//标题字体           

            Font fntTxt = new Font("宋体", 9, FontStyle.Regular);//正文文字           

            Brush brush = new SolidBrush(Color.Black);//画刷           

            Pen pen = new Pen(Color.Black);           //线条颜色           

            Point po = new Point(10, 10);
            try
            {
                e.Graphics.DrawString(GetPrintSW().ToString(), titleFont, brush, po);//打印内容

            }

            catch (Exception ex)
            {

                MessageBox.Show(this, "打印出错!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

        }
        //驱动打印
        ///GetPrintSw方法用来构造打印文本,内部StringBuilder.AppendLine在Drawstring时单独占有一行。
        public StringBuilder GetPrintSW()
        {

            StringBuilder sb = new StringBuilder();

            string tou = "达普电子科技有限公司";

            string address = "厦门达普";

            string saleID = "2010930233330";    //单号       

            string item = "项目";

            decimal price = 25.00M;

            int count = 5;

            decimal total = 0.00M;

            decimal fukuan = 500.00M;

            sb.AppendLine(" " + tou + " \n");

            sb.AppendLine("-----------------------------------------");

            sb.AppendLine("日期:" + DateTime.Now.ToShortDateString() + " " + "单号:" + saleID);

            sb.AppendLine("-----------------------------------------");

            sb.AppendLine("项目" + "    " + "数量" + "  " + "单价" + "    " + "小计");

            for (int i = 0; i < count; i++)
            {

                decimal xiaoji = (i + 1) * price;

                sb.AppendLine(item + (i + 1) + "    " + (i + 1) + "   " + price + "    " + xiaoji);

                total += xiaoji;

            }

            sb.AppendLine("-----------------------------------------");

            sb.AppendLine("数量:" + count + "  合计: " + total);

            sb.AppendLine("付款:" + fukuan);

            sb.AppendLine("现金找零:" + (fukuan - total));

            sb.AppendLine("-----------------------------------------");

            sb.AppendLine("地址:" + address + "");

            sb.AppendLine("电话:18950137415");

            sb.AppendLine("谢谢惠顾欢迎下次光临 ");

            sb.AppendLine("-----------------------------------------");

            return sb;

        }

        //打印测试
        private void printbt_Click(object sender, EventArgs e)
        {
            string qd = comboBox_drive.Text;//下拉列表选择的驱动名称
            var printDocument = new PrintDocument();
            //指定打印机
            printDocument.PrinterSettings.PrinterName = qd;// "POS58 Printer"; //驱动名称             

            printDocument.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
            try
            {
                printDocument.Print();
            }
            catch (InvalidPrinterException)
            {

            }
            finally
            {
                printDocument.Dispose();
            }
        }

 到这里就可以实现驱动开发了,很多小伙伴们遇到的问题不是在代码上,而是驱动设置问题。如驱动端口没有选择对,驱动脱机状态,打印列表阻塞。都会影响到驱动无法打印。
欢迎留言交流!

DEMO下载:https://download.csdn.net/download/huningjun/21507512

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

i_a_jun

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

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

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

打赏作者

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

抵扣说明:

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

余额充值