如何设置PageSetupDialog的默认纸张大小?代码设置后仍显示Letter
解决PageSetupDialog默认纸张大小不生效的问题
你遇到的这个情况其实很常见——当你直接创建自定义的PaperSize赋值给PageSettings时,PageSetupDialog往往会优先使用打印机的默认纸张设置(比如Letter),而不是你手动指定的配置。这是因为你创建的PaperSize属于自定义类型(PaperKind.Custom),系统没办法确认这个尺寸是否被当前打印机支持,所以会 fallback 到打印机的默认值。
正确的解决方案:使用打印机支持的标准A5尺寸
要让对话框默认显示A5,你需要先获取当前打印机实际支持的标准A5纸张尺寸,而不是自己创建自定义尺寸。代码示例如下:
// 先创建PrintDocument来获取默认打印机的配置 using (PrintDocument printDoc = new PrintDocument()) { // 遍历打印机支持的所有纸张尺寸,找到标准A5 foreach (PaperSize paperSize in printDoc.PrinterSettings.PaperSizes) { if (paperSize.Kind == PaperKind.A5) { printDoc.DefaultPageSettings.PaperSize = paperSize; break; } } // 初始化PageSetupDialog并绑定配置 PageSetupDialog pageSetupDialog = new PageSetupDialog(); pageSetupDialog.PageSettings = printDoc.DefaultPageSettings; // 显示对话框,此时默认纸张应为A5 pageSetupDialog.ShowDialog(); }
为什么这个方法有效?
这里我们没有手动创建自定义尺寸,而是复用了打印机驱动已经支持的标准A5尺寸(PaperKind.A5),PageSetupDialog可以正确识别这个尺寸的合法性,因此会将其作为默认值显示,而不是使用打印机的默认Letter尺寸。
特殊情况处理:打印机不支持A5
如果你的打印机确实不支持标准A5尺寸,那你才需要使用自定义尺寸,但此时需要确保同时配置好页边距等参数,并且部分打印机可能需要额外设置才能识别自定义尺寸。这种情况代码大致如下:
PageSetupDialog pageSetupDialog = new PageSetupDialog(); PageSettings pageSettings = new PageSettings(); // 创建自定义A5尺寸(注意单位是百分之一英寸,A5实际尺寸约5.83x8.27英寸) PaperSize customA5 = new PaperSize("Custom A5", 583, 827); customA5.Kind = PaperKind.Custom; pageSettings.PaperSize = customA5; // 可以同时设置页边距 pageSettings.Margins = new Margins(50, 50, 50, 50); pageSetupDialog.PageSettings = pageSettings; pageSetupDialog.ShowDialog();
不过这种情况对话框顶部可能会显示"Custom"而不是"A5",具体取决于打印机驱动的支持程度。
内容的提问来源于stack exchange,提问作者Hossein Golshani
相关产品推荐
相关产品推荐

