当我尝试打印到默认打印机以外的指定打印机时,系统会抛出一个异常“句柄无效”。但是,在调用print之前,我使用PrinterSettings.IsValid进行检查,并且打印设置是有效的。当我将默认打印机更改为以前被称为“无效”的打印机时,异常就会消失。这不是一个令人满意的解决方案,因为我的用户需要向不同的打印机打印不同的东西,他们不应该离开应用程序来更改他们的默认打印机。我也尝试过用PrinterName设置创建一个“新”打印机设置对象,但这没有帮助。
有人见过这个吗?
代码在某种程度上是不相关的,因为只要您只在默认打印机上打印,它就能工作,但是我使用PrintDocument类来进行打印。
发布于 2014-12-17 21:09:52
好的,一个很糟糕的工作是以编程方式将默认打印机更改为目标打印机,打印文档,然后用以下代码更改默认打印机:
[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);
} 发布于 2014-12-17 21:33:34
你确定你有正确的打印机名称吗?我们使用相同的代码打印到预定义的pritner,并且从未出现过任何问题。打印机名称应该是InstalledPrinters列表的成员。
System.Drawing.Printing.PrinterSettings.InstalledPrintershttps://stackoverflow.com/questions/27534233
复制相似问题