You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PageSettings.PrinterResolution及X属性有Setter却无法赋值的技术问题

解决PrinterResolution.X属性设置不生效的问题

我之前也踩过这个坑——虽然MSDN文档标注了PrinterResolution.X具备Setter,但直接修改它的值确实不会生效,问题出在你修改的是一个副本对象,而非绑定到打印文档的实际设置。

问题根源

当你访问pd.DefaultPageSettings.PrinterResolution时,.NET框架会返回当前打印机分辨率设置的克隆副本,而不是直接引用内部存储的对象。所以你修改这个副本的X或Y属性后,原打印文档的设置根本没被改动,自然还是保留原来的值。

正确的解决方法

你需要创建一个新的PrinterResolution实例,配置好想要的参数,然后将这个新对象整体赋值给DefaultPageSettings.PrinterResolution。如果是自定义分辨率,记得把Kind属性设为PrinterResolutionKind.Custom,同时确保你的打印机支持自定义分辨率。

示例代码如下:

PrintDocument pd = new PrintDocument();
// 先完成打印机分配等初始化操作

// 错误写法:直接修改副本的属性,不会生效
// pd.DefaultPageSettings.PrinterResolution.X = 300;

// 正确写法:创建新的PrinterResolution对象并赋值
PrinterResolution customRes = new PrinterResolution();
customRes.Kind = PrinterResolutionKind.Custom;
customRes.X = 300; // 设置目标横向分辨率
customRes.Y = 300; // 设置目标纵向分辨率

// 替换原有的PrinterResolution设置
pd.DefaultPageSettings.PrinterResolution = customRes;

// 验证设置是否生效
Console.WriteLine($"修改后的X分辨率:{pd.DefaultPageSettings.PrinterResolution.X}");

额外注意事项

  • 如果你的打印机不支持自定义分辨率,设置Kind = Custom可能会被忽略,系统会自动回退到打印机支持的默认分辨率。你可以通过pd.PrinterSettings.PrinterResolutions获取打印机支持的所有分辨率列表,从中选择合适的项来赋值。
  • 确保在修改设置前,已经正确指定了目标打印机,否则默认打印机的设置可能会覆盖你的修改。

内容的提问来源于stack exchange,提问作者L. Guthardt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:39:12