在实际项目中,打印的纸张的默认一般都是纵向,但有一些是横向,但发现在一些很特殊的情况下,即使在打印之前设置了横向,但实际打印依然是纵向。目前发现这个问题有两个原因。
1 是纸张名称不对,会导致横向设置不起作用。
例如,设置为A4纸,但实际没有这种类型的纸张,或者有名称不一样,偶尔会导致即使设置了横向,但实际打印依然是纵向。也就是横向设置不起作用。
private PaperSize GetPaperSize(PrintDocument pDoc, string paperName, string pageType, Size pageSize) { bool fitPaper = false; PaperSize sizeFit = null; PaperSize sizeA4 = null; PaperSize sizeCustomMin = null; int minPiancha = 300; Size pageSizeTmp = new Size(pageSize.Width, pageSize.Height); //把毫米转为(以0.001英寸为单位)的数据,本来需要乘以10,但PaperSize的单位是百分之一英寸,又需要除以10,因此不处理 Size pageSizeNew = PrinterUnitConvert.Convert(pageSizeTmp, PrinterUnit.TenthsOfAMillimeter, PrinterUnit.ThousandthsOfAnInch); bool isCustomPaperSize = pageType== PaperKind.Custom.ToString(); //获取打印机支持的所有纸张类型 foreach (PaperSize size in pDoc.PrinterSettings.PaperSizes) { //看该打印机是否有我们需要的纸张类型 string PaperName = size.PaperName; if (size.Kind.ToString() == pageType) { if(size.PaperName.IndexOf(paperName) >= 0) { fitPaper = true; sizeFit = size; return sizeFit; } if(isCustomPaperSize && size.Kind== PaperKind.Custom) { int heightPiancha = Math.Abs(size.Height - pageSizeNew.Height); int widthPiancha = Math.Abs(size.Width - pageSizeNew.Width); int Piancha = heightPiancha * heightPiancha + widthPiancha * widthPiancha; if (Piancha <= minPiancha) { minPiancha = Piancha; sizeCustomMin = size; } } } if (size.Kind == PaperKind.A4) { sizeA4 = size; } } if (!fitPaper) { if(isCustomPaperSize && sizeCustomMin != null) { if(minPiancha<50) { LogInfo.Error("未找到自定义纸张类型,使用找到的最接近的纸张PaperName=" + paperName + ",使用Custom" + sizeCustomMin); return sizeCustomMin; } else { LogInfo.Error("未找到自定义纸张类型,使用找到的最接近的纸张PaperName=" + paperName + ",minPiancha=" + minPiancha); } } if (sizeA4 == null) { // Size pageSize = doc.PageSize;//纸张大小,单位毫米 PaperSize sizeCustom = new PaperSize("Custom", pageSizeNew.Width, pageSizeNew.Height); LogInfo.Error("未找到纸张类型PaperName=" + paperName + ",使用Custom" + sizeCustom); return sizeCustom; } else { LogInfo.Error("未找到纸张类型PaperName=" + paperName + ",使用sizeA4" + sizeA4); return sizeA4; } } System.Diagnostics.Debug.Assert(sizeFit != null); return sizeFit; }2 动态修改了打印机,也就是在弹出打印对话框时,动态修改了打印机,也会导致整个问题。
修改为其他的打印机:如下图