如何获取Windows打印机表单指定边距?关于PaperSize类的疑问
关于System.Drawing.Printing.PaperSize类不包含边距的原因及获取边距的方法
在Windows系统中,打印机支持的纸张尺寸设置(可在“打印服务器属性/表单”中找到)包含纸张尺寸与边距:
但System.Drawing.Printing.PaperSize类仅封装纸张尺寸相关成员,不包含边距信息,原因及获取边距的方法如下:
一、为什么PaperSize类不包含边距信息
PaperSize的设计定位是仅描述纸张本身的物理尺寸(宽、高),属于纸张的固有属性;而打印机的边距是设备特定的打印能力参数——同一种纸张在不同型号的打印机上,支持的最小可打印边距可能存在差异,边距信息和打印机硬件、驱动直接相关,不属于纸张本身的属性范畴,因此不会被整合到PaperSize类中。
二、获取打印机边距信息的途径
1. 通过PrinterSettings类获取
利用PrinterSettings.DefaultPageSettings.Margins可以获取当前打印机针对默认纸张的最小可打印边距;如果需要针对特定纸张尺寸获取对应边距,需先指定目标纸张,再读取边距:
// 初始化打印机设置 PrinterSettings printerSettings = new PrinterSettings(); // 设置目标纸张(示例为A4) printerSettings.DefaultPageSettings.PaperSize = PaperSizeKind.A4; // 获取该纸张对应的最小边距 Margins minPrintMargins = printerSettings.DefaultPageSettings.Margins;
2. 调用Windows原生API获取更精准的边距
通过GetDeviceCaps函数可以直接从打印机驱动获取物理打印区域的参数,进而计算最小边距:
PHYSICALOFFSETX:打印区域相对于纸张左边缘的偏移(即最小左边距)PHYSICALOFFSETY:打印区域相对于纸张上边缘的偏移(即最小上边距)PHYSICALWIDTH:纸张物理宽度PHYSICALPRINTABLEWIDTH:可打印区域宽度- 最小右边距 = 纸张物理宽度 - 打印区域左偏移 - 可打印区域宽度
- 最小下边距 = 纸张物理高度 - 打印区域上偏移 - 可打印区域高度
对应的C#调用示例(需引入user32.dll和gdi32.dll):
[DllImport("gdi32.dll")] static extern int GetDeviceCaps(IntPtr hdc, int nIndex); // 在打印上下文的hdc中获取参数 int leftMargin = GetDeviceCaps(printHdc, 112); // PHYSICALOFFSETX int topMargin = GetDeviceCaps(printHdc, 113); // PHYSICALOFFSETY int paperWidth = GetDeviceCaps(printHdc, 110); // PHYSICALWIDTH int printableWidth = GetDeviceCaps(printHdc, 111); // PHYSICALPRINTABLEWIDTH int rightMargin = paperWidth - leftMargin - printableWidth;
三、验证PrintDocument边距的实现
针对你提到的“验证PrintDocument的边距是否不小于打印机最小边距”的场景,可以通过以下逻辑实现:
PrintDocument pd = new PrintDocument(); // 获取打印机针对当前纸张的最小边距 Margins minMargins = pd.PrinterSettings.DefaultPageSettings.Margins; // 获取PrintDocument设置的边距 Margins docMargins = pd.DefaultPageSettings.Margins; // 验证边距是否符合要求 bool marginsValid = docMargins.Left >= minMargins.Left && docMargins.Right >= minMargins.Right && docMargins.Top >= minMargins.Top && docMargins.Bottom >= minMargins.Bottom; if (!marginsValid) { // 处理边距不符合要求的情况 }
内容的提问来源于stack exchange,提问作者Vadim Rapp
相关产品推荐
相关产品推荐

