首页 文章

C#批处理图应用程序(PrintServer和PrintQueue问题)

提问于
浏览
4

我有一个问题,我需要帮助 . 对于我当前的项目,我需要制作Batch Plot应用程序 . 该应用程序将有大约约2000个AutoCAD图纸,需要打印 .

该应用程序需要5台打印机,每种格式1台,从A4到A0 . 到目前为止还没有问题 .

现在我们都明白,我们不能在没有任何麻烦的情况下同时排队2000张图纸 . 我在网上进行了研究,找到了查看当前打印机队列的方法 . 使用PrintServer和PrintQueue .

这是问题开始的地方 . 首先,我无法找到我需要的网络打印机 . 打印机位于此网络地址:192.168.0.14(\ vps01w2k8) .

遵循MSDN的指南:

PrintServer m_PrintServer = new PrintServer(@"\\vps01w2k8");
    PrintQueueCollection m_PrintQueueCollection = m_PrintServer.GetPrintQueues();

    foreach (PrintQueue queue in m_PrintQueueCollection)
    {
         cbPrinters.Items.Add(queue.Name.ToString());
    }

这不会给我任何打印机 . 尝试使用LocalPrintServer(或只是没有传递任何参数的PrintServer) . 给我本地打印机(显然),而不是我的网络打印机 .

我的下一步是找到一种方法来查找我所有安装的打印机,这些打印机让我进入 using System.Drawing.Printing; 而不是 using System.Printing; .

foreach (String printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
    {
         cbPrinters.Items.Add(printer.ToString());
    }

这个简单的代码给了我所有的打印机,包括联网打印机 . 但是,现在我陷入了.NET 2.0和3.0之间(以及之后) . PrinterSettings和PrintServer / PrintQueue类没有连接 .

最后,我尝试使用WMI approach访问打印机队列 . 查询给我结果的Win32_PrintJob . 不幸的是,这些都伴随着10秒锁定来检索这些结果 .

我没有想法 . 我正在寻找一个修复PrintServer以正确返回我的网络打印机或任何建议使用PrinterSettings类进行批量绘图的类似技术 .

提前致谢,

约迪

1 回答

  • 13

    找到了 . 调用GetPrintQueues时,您必须传入一个EnumeratedPrintQueueTypes数组 . 它现在返回我的本地和网络打印机(所有已安装的打印机) .

    PrintServer m_PrintServer = new PrintServer();
    PrintQueueCollection m_PrintQueueCollection = m_PrintServer.GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections });
    

相关问题