0

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

该应用程序将位于服务器上并在每天的某个时间点打印。我需要将一些文档打印到一台打印机和一些到另一台打印机。

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

我正在设置打印机,PrinterSettings.PrinterName = "*printername*"但出现打印机异常错误,提示设置不正确。

我确实找到了一篇提到类似错误的文章,但这是与 ASP.Net 而不是 C# - 它与 Windows Impersonation 有关,但我真的不明白如何让它在 c# 中工作。

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

4

2 回答 2

3

如果要设置默认打印机,可以通过 winapi 执行:

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

如果您想在代码完成后重置默认打印机,您可能需要 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();
于 2013-03-25T10:28:37.793 回答
0

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

于 2013-03-25T10:37:18.687 回答