如何从打印机接收数据(HP LaserJet Pro M305d);例如,在Windows窗体中加载纸张 应用程序.Net 4.5 C#

How to receive data from the printer(HP LaserJet Pro M305d); for example Load Paper, In windows form Application .Net 4.5 C#

提问人:Hadi Bassam 提问时间:10/12/2023 更新时间:10/12/2023 访问量:23

问:

正如我所说,我正在使用 .Net 4.5 C# 开发 Windows 表单应用程序,现在我想接收有关打印机状态的信息,我使用了我发现的一种方式,这是它:

 private bool IsPrinterPaperAvailable()
    {
        // Get the default printer
        PrintDocument printDocument = new PrintDocument();
        string defaultPrinterName = printDocument.PrinterSettings.PrinterName;

        // Create a PrintServer object to manage the printer queue
        using (PrintServer printServer = new PrintServer())
        {
            // Get the printer queue for the default printer
            PrintQueue printQueue = new PrintQueue(new PrintServer(), defaultPrinterName);
            
            printQueue.Refresh();

            // Check if the printer queue has paper
            if (printQueue.IsOutOfPaper)
            {
                return false;
            }
        }

        return true;
    }

此表达式:printQueue.IsOutOfPaper 始终返回 false 和 printQueue 提供的所有其他选项,我认为问题不在于我的代码,我认为问题是我没有发送或让打印机发送打印机状态,是否有我必须安装的特定驱动器。PS:即使当我从Windows打开打印机时,它也会给我这个状态:队列中的0文档,我希望你们能帮助我,我正在尝试解决这个问题大约一个星期。

C# 打印 Net-4.5

评论

0赞 NineBerry 10/12/2023
您使用什么打印机进行测试?大多数打印机不支持此属性。只有真正昂贵的。此外,如果打印机队列中没有打开的打印作业,则通常不会填充该属性。
0赞 Hadi Bassam 10/12/2023
我正在使用 HP LaserJet Pro M305d,我想先检查打印机中是否有纸张,然后我会发送打印作业,希望您能理解我。
0赞 NineBerry 10/12/2023
这并不像您预期的那样工作。大多数打印机(如果有的话)只有在该打印机确实存在打开的打印作业时才设置 PaperOut 属性。
0赞 Hadi Bassam 10/12/2023
好的,有没有其他方法可以做到这一点?
0赞 NineBerry 10/12/2023
据我所知,没有查询打印机是否有纸张的一般方法。

答: 暂无答案