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

本文关键字:默认 打印机 打印 | 更新日期: 2023-09-27 18:05:34

我需要能够在没有用户输入的情况下自动打印出许多文档。

应用程序将放在服务器上,每天在某个时间点打印。我需要把一些文件打印到一台打印机上,另一些打印到另一台打印机上。

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

我正在用PrinterSettings.PrinterName = "*printername*"设置打印机,但得到一个printerexception错误,说设置不正确。

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

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

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

如果你想设置默认打印机,你可以通过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();

我刚刚发现,如果我打印到'servername'printername它工作,而不是打印到打印机的名称,因为它显示在控制面板。我现在有一个不同的问题-如果我打印到默认的打印机,即不指定打印机,然后它吐出他们很快。如果我指定一个打印机,它等待大约一分钟然后打印,然后等待一分钟,然后打印下一个等等-为什么要花更长的时间呢?