当前位置:编程学习 > C#/ASP.NET >>

求高手解答关于打印机的问题

   现在程式使用网络打印机打印小票,但是现在要检测打印机是否可以正常打印,在网上找到了方法可以获取打印机的状态,但是获取的状态必须 打印一次才可以检测到打印是否正常,必须出纸以后才知道打印机是否正常运作。

现在想要的是 在不出纸的情况下能风检测到打印机的缺纸和错误状态



目前使用的打印机是 EPSON TM-T88IV

程式是winfrom

现在使用的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Printing;
using System.Management;

namespace taihing_order.print
{
    public class CSCPrintClass
    {
        /// <summary>
        /// 打印机状态
        /// </summary>
        public enum PrinterStatus
        {
            其他状态 = 1,
            未知,
            空闲,
            正在打印,
            预热,
            停止打印,
            打印中,
            离线
        }
        /// <summary>
        /// 获取打印机的当前状态
        /// </summary>
        /// <param name="PrinterDevice">打印机设备名称</param>
        /// <returns>打印机状态</returns>
        public static PrinterStatus GetPrinterStat(string PrinterDevice)
        {
            PrinterStatus ret = 0;
            string path = @"win32_printer.DeviceId='" + PrinterDevice + "'";
            ManagementObject printer = new ManagementObject(path);
            printer.Get();
            ret = (PrinterStatus)Convert.ToInt32(printer.Properties["PrinterStatus"].Value);

            return ret;
        }

        /// <summary>
        /// 清除打印机队列
        /// </summary>
        /// <param name="PrinterName">打印机名称</param>
        public static void ClearPrint(string PrinterName)
        {
            PrintServer localPrintServer = new LocalPrintServer();
            PrintQueue pq = localPrintServer.GetPrintQueue(PrinterName);
            pq.Refresh();
            PrintJobInfoCollection allPrintJobs = pq.GetPrintJobInfoCollection();
            foreach (PrintSystemJobInfo printJob in allPrintJobs)
            {
                printJob.Cancel();
            }
        }
    }
}


        //檢查打印機
        public bool PrintStart(string name)
        {
            PrintDocument pd = new PrintDocument();
            //实例化控制器,将无任何提示
            pd.PrintController = new StandardPrintController();
            //指定打印机
            pd.PrinterSettings.PrinterName = name;
            //设置边距
            Margins margin = new Margins(20, 20, 20, 20);
            pd.DefaultPageSettings.Margins = margin;
            //纸张设置默认
            PaperSize pageSize = new PaperSize("First custom size", getYc(58), 600);
            pd.DefaultPageSettings.PaperSize = pageSize;
            //打印事件设置 
            pd.PrintPage += new PrintPageEventHandler(this.printDocument2_PrintPage);
            bool state = true; ;
            try
            {
                if (CSCPrintClass.GetPrinterStat(name) != CSCPrintClass.PrinterStatus.未知 && name == Helper.smallPrintName)
                {
                    //启动打印机开始打印
                    pd.Print();
                    if (CSCPrintClass.GetPrinterStat(name) == CSCPrintClass.PrinterStatus.正在打印)
                    {
                       //清除打印列表
                        CSCPrintClass.ClearPrint(name);
                        timer2.Stop();
                    }
                    else
                    {
                        state = false;
                    }
                }
                else
                {
                    state = false;
                }
            }
            catch (Exception ee)
            {
                state = false;
            }
            return state;
        }

分不多,希望大神们帮帮忙 C# 打印机 winfrom --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 1 楼 liuqian4243 的回复:
帮顶。一次。

谢谢 --------------------编程问答-------------------- 没有人帮忙解答下吗?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,