当我尝试打印到默认打印机以外的命名打印机时,系统会抛出异常"句柄无效"。但是我在调用print之前使用PrinterSettings.IsValid进行检查,并且打印设置是有效的。当我将默认打印机更改为之前被称为“无效”的打印机时。例外消失了。这不是一个令人满意的解决方案,因为我的用户需要将不同的东西打印到不同的打印机,他们不必离开应用程序来更改其默认打印机。我也试过创造一个新的'设置了PrinterName的打印机设置对象,但这没有帮助。
有没有人见过这个?
代码有点无关紧要,因为只要您只打印到默认打印机就行,但是我使用PrintDocument类进行打印。
答案 0 :(得分:0)
好的,所以一个丑陋的工作是以编程方式将默认打印机更改为目标打印机,打印文档,然后使用以下代码更改默认打印机:
[DllImport("Winspool.drv")]
private static extern bool SetDefaultPrinter(string printerName);
然后在我的印刷部分:
var defaultPrinterName = _printDoc.PrinterSettings.PrinterName;
_printDoc.PrinterSettings.PrinterName = _settings.PrinterName;
if (_printDoc.PrinterSettings.IsValid)
{
SetDefaultPrinter(_settings.PrinterName);
_printDoc.Print();
SetDefaultPrinter(defaultPrinterName);
}
答案 1 :(得分:0)
您确定您拥有正确的打印机名称吗?我们使用相同的代码打印到预定义的pritner,并且从未遇到任何问题。打印机名称应该是InstalledPrinters列表的成员。
System.Drawing.Printing.PrinterSettings.InstalledPrinters