C#代码获取已安装或选定打印机的最大dpi

我想获得已安装或选择的打印机的最大Dpi。 我试过了

PrinterSettings ps = new PrinterSettings(); MessageBox.Show(ps.PrinterResolutions.ToString()); 

我得到这个输出:System.Drawing.Printing.PrinterSettings + PreinterResolutionCollection(所需的输出是600×600)。

使用LINQ:

 PrinterSettings ps = new PrinterSettings(); var maxResolution = ps.PrinterResolutions.OfType() .OrderByDescending(r => rX) .ThenByDescending(r => rY) .First(); MessageBox.Show(String.Format("{0}x{1}", maxResolution.X, maxResolution.Y)); 

看起来像PrinterResolutions是一个集合,你试图将它转换为字符串值。

打印机分辨率是一个集合,您需要遍历它以读取所有可用的分辨率,例如:

 foreach (string installedPrinter in PrinterSettings.InstalledPrinters) { var ps = new PrinterSettings { PrinterName = installedPrinter }; var maxResolution = ps.PrinterResolutions.Cast().OrderByDescending(pr => pr.X).First(); Console.WriteLine("{0}: {1}x{2}", installedPrinter, maxResolution.X, maxResolution.Y); } 

或者显示所有打印机及其所有PrinterResolutions

 foreach (string installedPrinter in PrinterSettings.InstalledPrinters) { var ps = new PrinterSettings { PrinterName = installedPrinter }; foreach (PrinterResolution printerResolution in ps.PrinterResolutions) { var tpl = printerResolution.Kind == PrinterResolutionKind.Custom ? "{0}: {1} ({2}x{3})" : "{0}: {1}"; Console.WriteLine(tpl, installedPrinter, printerResolution.Kind, printerResolution.X, printerResolution.Y); } } 

这是我使用的(.NET 2.0,所以没有Linq)

 public static int CompareResolutions(System.Drawing.Printing.PrinterResolution y, System.Drawing.Printing.PrinterResolution x) { if (xX*xY > yX*yY) return 1; else if (xX * xY < yX * yY) return -1; return 0; } public static System.Drawing.Printing.PrinterResolution GetMaxResolution(System.Drawing.Printing.PrintDocument pd) { return GetMaxResolution(pd.PrinterSettings); } public static System.Drawing.Printing.PrinterResolution GetMaxResolution(System.Drawing.Printing.PrinterSettings ps) { System.Drawing.Printing.PrinterResolution prMax = null; System.Collections.Generic.List ls = new System.Collections.Generic.List(); for (int i = 0; i < ps.PrinterResolutions.Count; ++i) { System.Drawing.Printing.PrinterResolution pres = ps.PrinterResolutions[i]; ls.Add(pres); } // Next i ls.Sort(CompareResolutions); if (ls.Count > 0) prMax = ls[0]; ls.Clear(); ls = null; return prMax; }