所以我有以下代码来访问本地打印机及其在C#中的当前作业:

        PrintQueue pq = LocalPrintServer.GetDefaultPrintQueue();
        PrintJobInfoCollection pjic = pq.GetPrintJobInfoCollection();
        foreach( var printjob in pjic)
        {
            Console.WriteLine(printjob.Name);
        }
        Console.ReadLine();


我想要做的就是将此PrintQueue对象发送到另一台连接到打印机的计算机,并将此队列中的作业添加到该队列的作业中。因此,本质上讲,该想法是通过网络进行远程打印。我有一些Java网络编程经验,但不足以很好地转换为C#。所以我想知道是否有人可以为我分解它。 (而且我知道有很多方法可以配置Windows / Mac OS从远程打印机进行打印,但是此应用程序对我来说是一种学习经验)。谢谢 !

最佳答案

我不知道这是否有效,因为我尚未测试过,但是想法是:


将PrintServer设置为所需的计算机
从PrintServer获取PrintQueue
遍历作业并将每个作业添加到该PrintQueue




不幸的是,我找不到任何直接添加打印作业的方法,我发现是通过PrintQueue.AddJob()方法,该方法需要一些参数,例如作业名称,文档路径等。

// Step 1: Set the PrintServer to the computer you want
PrintServer printServer = new PrintServer("\\ANOTHER-COMPUTER-NAME");

// Step 2: Get the PrintQueue from the PrintServer
PrintQueue printQueue = printServer.GetPrintQueue("That Printer Name on Another Computer");

// Step 3: Iterate over jobs and add each job to that PrintQueue
foreach (var printjob in pjic)
{
    printQueue.AddJob(printjob.Name, "document path here", true, pq.DefaultPrintTicket.Clone());
}

// and then do, like passing the printQueue to the PrintDialog
PrintDialog printDialog = new PrintDialog();
printDialog.PrintQueue = printQueue;


要获取文档路径,可以参考此answer

08-16 20:30