【问题标题】:`PrintQueue.AddJob` does not finish`PrintQueue.AddJob` 未完成
【发布时间】:2017-10-19 19:15:58
【问题描述】:

我在某些 PC 上尝试了以下代码。

using (var lps = new LocalPrintServer())
using(var pqueue = lps.GetPrintQueue("PRINTER-NAME"))
{
    pqueue.AddJob("job-name", @"C:\example.xps", false, pticket);
}

仅在一台 PC 上,它不起作用。 应用程序在AddJob 方法处冻结。 即使等待了很长时间,它也没有完成。 没有例外。

出现此问题的PC是Windows10并应用了CreatorsUpdate。 其他PC是Windows7、Windows8.1和Windows10应用了周年更新。

这个问题是 CreatorsUpdate 的错误吗?

补充:
有 CreatorsUpdate 的 PC 可以通过此代码打印 xps 文件。

using (var lps = new LocalPrintServer())
using(var pqueue = lps.GetPrintQueue("PRINTER-NAME"))
using (var doc = new XpsDocument(@"C:\example.xps", System.IO.FileAccess.Read))
{
    var writer = PrintQueue.CreateXpsDocumentWriter(pqueue);
    var docSeq = doc.GetFixedDocumentSequence();
    writer.Write(doc, pticket);
}

【问题讨论】:

  • 我遇到了同样的问题。它只发生在某些机器上,其他机器似乎很好。
  • 我发现使用 AddJob 获取 PrintSystemJobInfo 对象,然后将 XPS 文件流式传输到其 JobStream 更可靠。
  • 这可能是 Windows 10 的问题
  • @blz 你的代码救了我的命,它解决了我机器上的打印问题

标签: c# .net printing windows-10


【解决方案1】:

我确信目标打印机驱动程序不是基于 XPS 的。我也有同样的问题。

您可以先通过以下方式检查打印机的兼容性:

LocalPrintServer server = new LocalPrintServer(PrintSystemDesiredAccess.AdministrateServer);
PrintQueue queue = server.GetPrintQueue("MyPrinterName");            
MessageBox.Show(queue.IsXpsDevice.ToString());

如果结果为假,那就是原因。

【讨论】:

    猜你喜欢
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多