.NET Framework 4.7.2中System.Drawing.Printing的PrinterSettings初始化报错
解决方案
问题根源
.NET Framework 4.7.2自带System.Drawing.Printing相关组件,你安装的System.Drawing.Common v8.0.4是针对.NET Core/.NET 5+的包,和框架自带的API冲突,导致初始化PrinterSettings失败。
第一步:修复依赖问题
卸载已安装的System.Drawing.Common NuGet包,直接使用.NET Framework自带的System.Drawing.Printing命名空间即可。
第二步:修正代码错误
你的代码存在两处逻辑错误,移除不必要依赖后,修正后的代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Drawing.Printing; string printerName = "PrinterName"; int l_Pages = 0; // 初始化PrinterSettings,此时不会报错 var printerSettings = new PrinterSettings(); // 获取所有已安装打印机 var installedPrinters = PrinterSettings.InstalledPrinters.Cast<string>().ToList(); // 查找目标打印机索引(找不到返回-1) int z = installedPrinters.FindIndex(p => p.Equals(printerName, StringComparison.OrdinalIgnoreCase)); if (l_Pages == 0) { // 修正判断逻辑:找不到打印机时用第一个 if (z == -1) { printerSettings.PrinterName = installedPrinters[0]; } else { // 修正变量名:z而非i printerSettings.PrinterName = installedPrinters[z]; } }
第三步:实现完整功能
1. 获取已安装打印机
直接用PrinterSettings.InstalledPrinters即可,示例:
var allPrinters = PrinterSettings.InstalledPrinters.Cast<string>().ToList(); foreach(var printer in allPrinters) { Console.WriteLine($"打印机:{printer}"); }
2. 设置默认打印机
.NET Framework中PrinterSettings没有直接设置默认打印机的API,需要调用Windows原生API实现:
using System.Runtime.InteropServices; public static class PrinterHelper { [DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool SetDefaultPrinter(string printerName); } // 使用示例: bool success = PrinterHelper.SetDefaultPrinter("目标打印机名称"); if(success) { Console.WriteLine("默认打印机设置成功"); } else { Console.WriteLine("设置失败,错误码:" + Marshal.GetLastWin32Error()); }
注意:此操作需要管理员权限,否则可能执行失败。
3. 调整打印方向和缩放
通过PrinterSettings和PageSettings实现:
// 设置打印方向为横向 printerSettings.DefaultPageSettings.Landscape = true; // 设置缩放比例(比如150%) printerSettings.DefaultPageSettings.Scale = 150; // 或者针对单页单独设置 var pageSettings = new PageSettings(printerSettings); pageSettings.Landscape = true; pageSettings.Scale = 120;
内容的提问来源于stack exchange,提问作者PsychoMx
相关产品推荐
相关产品推荐

