如何使用 C# 检索 macOS 上已安装的打印机

我正在编写一个控制台应用程序,该应用程序需要做的事情之一是检索所有用户安装的打印机(及其纸张来源)的列表。我们可以通过 Windows 上的 System.Drawing.Printing.PrinterSettings.InstalledPrinters 轻松获取此信息,但在 macOS 上访问相同的属性似乎会返回一个空列表。


我们在此应用程序中使用 .NET Core v2.2。


我们使用的代码如下:


foreach (string pName in PrinterSettings.InstalledPrinters) {

  // this should iterate each of the installed printers

}

在 Windows 上,它会按预期迭代每台打印机。但在 Mac 上,它什么也不做。


InstalledPrinters 属性是否在 macOS 上不起作用,或者是否可能有其他原因阻止其正常工作?如果它不起作用,还有其他方法来检索列表吗?


潇湘沐
浏览 106回答 3
3回答

神不在的星期二

是的,我也有同样的问题。添加System.Drawing.Common命名空间就可以了。然后就可以解析命名空间了。我的列表中充满了可用的打印机。

喵喔喔

Lpinfo (CUPS) 解决方法:using System.Diagnostics;var startInfo = new ProcessStartInfo("lpstat", "-p")                {                    RedirectStandardOutput = true,                    CreateNoWindow         = true                };var process   = Process.Start(startInfo);var output = await process.StandardOutput.ReadToEndAsync();var printerNames = output.Split("\n", StringSplitOptions.RemoveEmptyEntries)                         .Select(line => line.Split(" ")[1])                         .Where(name => !string.IsNullOrWhiteSpace(name))                         .ToArray();await process.WaitForExitAsync();Console.WriteLine(string.Join("\n",printerNames));

慕娘9325324

对我来说听起来像是 .NET Core 中的一个错误。您使用什么版本的 .NET Core?.NET Core 2.1(及更高版本)具有在 macOS/Linux 上实现查找 InstalledPrinters 的代码:https://github.com/dotnet/corefx/blob/master/src/System.Drawing.Common/src/System/Drawing /Printing/PrintingServices.Unix.cs所以它应该可以工作(除非某个地方有错误)。
打开App,查看更多内容
随时随地看视频慕课网APP