我有一个问题需要帮助。对于我当前的项目,我需要制作一个 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(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 approach 访问打印机队列。查询给我结果的 Win32_PrintJob。不幸的是,这些伴随着 10 秒锁定来检索这些结果。
我没有想法了。我要么正在寻找 PrintServer 的修复程序以正确返回我的联网打印机,要么正在寻找任何建议以使用 PrinterSettings 类执行类似的批量绘图技术。
提前致谢,
乔迪
最佳答案
找到了。调用 GetPrintQueues 时,您必须传入一个 EnumeratedPrintQueueTypes 数组。它现在返回我的本地和网络打印机(所有已安装的打印机)。
PrintServer m_PrintServer = new PrintServer();
PrintQueueCollection m_PrintQueueCollection = m_PrintServer.GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections });
关于C# 批量绘图应用程序(PrintServer 和 PrintQueue 问题),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6763374/