从c#打印到非默认打印机

时间:2013-03-25 10:12:42

标签: c# printing

我需要能够以无用户输入的方式打印出大量文档。

应用程序将坐在服务器上并在每天的某个时间点打印。我要求将一些文档打印到1台打印机,将一些文档打印到另一台打印机。

我无法将我的代码打印到非默认打印机,除非该非默认打印机是Microsoft XPS Document writer,这导致我怀疑权限。

我正在使用PrinterSettings.PrinterName = "*printername*"设置打印机但是出现printerexception错误,说明设置不正确。

我确实发现了一篇文章,提到了一个similer错误,但这是ASP.Net而不是C# - 它与Windows模拟有关,但我真的不明白该怎么做才能让它在c#中工作。

我应该补充一点,我知道网络打印机名称是正确的,因为我得到了一些MS Code来显示所有已安装的打印机并从其提供的列表中复制了该名称。

2 个答案:

答案 0 :(得分:2)

如果您想设置默认打印机,可以使用winapi执行以下操作:

[DllImport("winspool.drv", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetDefaultPrinter(string Name);

如果要在代码完成后重置defaultprinter,可能还需要winapi中的另一种方法:

[DllImport("winspool.drv", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetDefaultPrinter(StringBuilder pszBuffer, ref int size);

您可以获得的所有可用打印机列表:

List<string> printers = PrinterSettings.InstalledPrinters.Cast<string>().ToList();

答案 1 :(得分:0)

我刚刚发现如果我打印到\ servername \ printername它可以正常工作,而不是打印到控制面板中显示的打印机名称。我现在有一个不同的问题 - 如果我打印到默认打印机,即不要打印机,那么它会快速吐出。如果我指定一台打印机,它等待大约一分钟然后打印,然后等待一分钟,然后打印下一个等等 - 为什么需要更长的时间?