哦 差点忘了 PrintPage事件里面还有一个InitPrinter(Graphics g)方法代码如下(求高手帮我看一下 哪里出了问题?):
 private void InitPrinter(Graphics g)
        {
            if (NowPage == 1)
            {
                if (!printDocument1.DefaultPageSettings.Landscape)
                {
                    PaperPageWidth = printDocument1.DefaultPageSettings.PaperSize.Width;
                    PaperPageHeight = printDocument1.DefaultPageSettings.PaperSize.Height;
                }
                else
                {
                    PaperPageHeight = printDocument1.DefaultPageSettings.PaperSize.Width;
                    PaperPageWidth = printDocument1.DefaultPageSettings.PaperSize.Height;
                }                ////打印纸的上下左右边距
                PaperLeftMargin = printDocument1.DefaultPageSettings.Margins.Left;
                PaperTopMargin = printDocument1.DefaultPageSettings.Margins.Top;
                PaperRightMargin = printDocument1.DefaultPageSettings.Margins.Right;
                PaperBottomMargin = printDocument1.DefaultPageSettings.Margins.Bottom;                //Page页的内容尺寸.
                ContentWidth = PaperPageWidth;//- PaperLeftMargin - PaperRightMargin;
                ContentHeight = PaperPageHeight;// -PaperTopMargin - PaperBottomMargin;                dgvWidth = InvoiceSet.dataGridView1.Width;
                dgvHeight = InvoiceSet.dataGridView1.Height;
                if (dgvWidth > ContentWidth)
                    dgvWidth = ContentWidth;
                PageCount = (dgvHeight % ContentHeight == 0) ? dgvHeight / ContentHeight : dgvHeight / ContentHeight + 1;
                X = PaperLeftMargin + (ContentWidth - dgvWidth) / 2;
                Y = PaperTopMargin;                for (int i = 0; i < InvoiceSet.dataGridView1.Columns.Count; i++)
                {
                    if (InvoiceSet.dataGridView1.Columns[i].Visible == true)
                    {
                        ColsIndex.Add(i);
                        ColsWidth.Add(((float)InvoiceSet.dataGridView1.Columns[i].Width / (float)InvoiceSet.dataGridView1.Width) * (float)dgvWidth);
                        //if (InvoiceSet.dataGridView1.Rows[0].Cells[ColsIndex[i]].Style.Alignment.ToString().Contains("Left") ||
                        //    InvoiceSet.dataGridView1.Rows[0].Cells[ColsIndex[i]].Style.Alignment.ToString().Contains("NotSet")) AlignmentList.Add(StringAlignment.Near);
                        //if (InvoiceSet.dataGridView1.Rows[0].Cells[ColsIndex[i]].Style.Alignment.ToString().Contains("Center"))
                        //    AlignmentList.Add(StringAlignment.Center);
                        //if (InvoiceSet.dataGridView1.Rows[0].Cells[ColsIndex[i]].Style.Alignment.ToString().Contains("Right"))
                        //    AlignmentList.Add(StringAlignment.Far);
                    }
                }
            }
        }

解决方案 »

  1.   

    会不会和打印机的纸张大小边距等设置有关?
      

  2.   

    打印机和预览有时不那么一致,偏移引起的,再加个调整,把左上角的0,0,重新 调整一点点。
      

  3.   

    检查一下打印位置和比例是否正确,这样的代码看着头晕,应该划分出若干个函数来调用。
      

  4.   

    我觉得也是打印机的问题,或纸张位置倾斜了吧?可以预留的空间稍微多一些。
      

  5.   


    预留的控件够充足,那我请教一下 怎么获取打印机的对纸张的默认设置啊?初学者不太懂 谢谢!
      

  6.   

    @ 3楼:
    打印机和预览不一致 有什么办法可以避免吗?
    我的打印的模板都是设置好了的,没什么问题啊