4

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

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

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

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

按照 MSDN 的指南:

    打印服务器 m_PrintServer = new PrintServer(@"\\vps01w2k8");
    PrintQueueCollection m_PrintQueueCollection = m_PrintServer.GetPrintQueues();

    foreach(m_PrintQueueCollection 中的 PrintQueue 队列)
    {
         cbPrinters.Items.Add(queue.Name.ToString());
    }

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

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

    foreach(System.Drawing.Printing.PrinterSettings.InstalledPrinters 中的字符串打印机)
    {
         cbPrinters.Items.Add(printer.ToString());
    }

这个简单的代码为我提供了我拥有的所有打印机,包括联网的打印机。但是,现在我被困在 .NET 2.0 和 3.0(及更高版本)之间。PrinterSettings 和 PrintServer/PrintQueue 类没有连接。

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

我没主意了。我正在寻找 PrintServer 的修复程序以正确返回我的联网打印机,或者寻找任何建议来使用 PrinterSettings 类进行批量绘图的类似技术。

提前致谢,

乔迪

4

1 回答 1

13

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

PrintServer m_PrintServer = new PrintServer();
PrintQueueCollection m_PrintQueueCollection = m_PrintServer.GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections });
于 2011-07-21T06:07:34.613 回答