实际打印纸张的横向设置不起作用的问题

在实际项目中,打印的纸张的默认一般都是纵向,但有一些是横向,但发现在一些很特殊的情况下,即使在打印之前设置了横向,但实际打印依然是纵向。目前发现这个问题有两个原因。

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 动态修改了打印机,也就是在弹出打印对话框时,动态修改了打印机,也会导致整个问题。

修改为其他的打印机:如下图

实际打印纸张的横向设置不起作用的问题_第1张图片

你可能感兴趣的:(CS编辑器)