Printdocument“句柄无效”错误

时间:2014-12-17 20:25:29

标签: c# printing

当我尝试打印到默认打印机以外的命名打印机时,系统会抛出异常"句柄无效"。但是我在调​​用print之前使用PrinterSettings.IsValid进行检查,并且打印设置是有效的。当我将默认打印机更改为之前被称为“无效”的打印机时。例外消失了。这不是一个令人满意的解决方案,因为我的用户需要将不同的东西打印到不同的打印机,他们不必离开应用程序来更改其默认打印机。我也试过创造一个新的'设置了PrinterName的打印机设置对象,但这没有帮助。

有没有人见过这个?

代码有点无关紧要,因为只要您只打印到默认打印机就行,但是我使用PrintDocument类进行打印。

2 个答案:

答案 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