【问题标题】:get print queue details for a shared printer获取共享打印机的打印队列详细信息
【发布时间】:2013-11-29 06:30:08
【问题描述】:

我正在尝试在共享打印机上打印文档;我需要获取打印队列详细信息。以下代码始终从“Microsoft XPS 文档”获取队列,因为作业数=0。但我的默认打印机配置为“HP LaserJet P1505n”

LocalPrintServer server = new LocalPrintServer()
PrintQueueCollection queueCollection = server.GetPrintQueues();
PrintQueue printQueue = null;
foreach (PrintQueue pq in queueCollection)
{
 Logger.LogInfo("PrintQueue1", "Printer1 Queue Name " + pq.FullName);
 printQueue = pq;
 numberOfJobs = printQueue.NumberOfJobs;
 Logger.LogInfo("numberOfJobs1"+ numberOfJobs);
}

如何从该特定共享打印机获取打印队列详细信息?我也试过了

PrintServer server = new PrintServer(@"\\192.168.100.168\HP LaserJet P1505n");

但出现错误:

Win32 错误:文件名、目录名或卷标语法为 不正确

我在这里错过了什么?

【问题讨论】:

  • 您必须使用 PrintServer,而不是 LocalPrintServer。并使用服务器名称,而不是打印机名称,而不是 IP 地址。并拥有足够的访问权限。请您的 LAN 管理员帮助您。

标签: c# .net printing system.printing printqueue


【解决方案1】:

如何从该特定共享打印机获取打印队列详细信息?

试试这样的:

// string.Empty or null for local printers
string printServerName = @"\\server";
string printQueueName= "printer";

PrintServer ps = string.IsNullOrEmpty(printServerName)
    // for local printers
    ? new PrintServer()
    // for shared printers
    : new PrintServer(printServerName);
PrintQueue pq = ps.GetPrintQueue(printQueueName);

Console.WriteLine(pq.FullName);
Console.WriteLine(pq.NumberOfJobs);
// output is printer uri (\\server\printer) and 0.

也可以使用服务器 IP 地址(如字符串)代替服务器名称。

string printServerName = @"\\192.168.1.111"; // for example


用于本地打印机 PDFCreator 集

string printServerName = null;
string printerName = "PDFCreator";

对于服务器 S 上的共享打印机 P 集

string printServerName = @"\\S";
string printerName = "P";

【讨论】:

  • 谢谢!但我认为最后 PrintServer 应该被处理掉。 ps.Dispose();
  • 您的好。是的,通常应该,因为PrintServer 的父级有IDisposable 接口。好点子!
【解决方案2】:

System.Printing.PrintServer MSDN 上的类文档

试试这个:

var myServer = @"\\192.168.100.168";

使用此代码:

// Create a PrintServer
// "theServer" must be a print server to which the user has full print access.
// var myServer = @"\\theServer"
PrintServer myPrintServer = new PrintServer(myServer);

// List the print server's queues
PrintQueueCollection myPrintQueues = myPrintServer.GetPrintQueues();
String printQueueNames = "My Print Queues:\n\n";
foreach (PrintQueue pq in myPrintQueues)
{
    printQueueNames += "\t" + pq.Name + "\n";
}
Console.WriteLine(printQueueNames);
Console.WriteLine("\nPress Return to continue.");
Console.ReadLine();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多