我用的是PrintDocumnet打印的  
设定了纸张了以后再不同型号的打印机下面打印出来的位置偏离了一些
有没有什么解决办法   让打印的位置固定啊? 
不随着打印机的改变而改变位置
倾家荡产啦!

解决方案 »

  1.   

    为个人/电脑设置不一样的页边距就可以了,起码我现在是这么做的。
    要使用页边距,首先
    printDocument.OriginAtMargins = true;
    然后修改Margins 就可以了
    printDocument.DefaultPageSettings.Margins = new Margins(...);
    再具体些的可能要结合到你实际项目中才适合了。
      

  2.   

    /// <summary>
           /// 点击打印
           /// </summary>
           /// <param name="sender"></param>
           /// <param name="e"></param>
           private void btnPrint_Click(object sender, EventArgs e)
           {
              //this.m_pageSettings.Landscape = true;
              //获取当前默认打印机
              m_printDocument = new PrintDocument();
              
              //设置要使用的打印机的名称
              this.m_printDocument.PrinterSettings.PrinterName = cmbSelectPrinter.SelectedItem.ToString();
              if (this.m_printDocument.PrinterSettings.IsValid)
              {
                 #region 页面设置
                 //获取当前报表的所需的页面设置
                 ReportPageSettings rptPageSettings = this.rptView.LocalReport.GetDefaultPageSettings();             this.m_pageSettings.Margins = rptPageSettings.Margins;
                 this.m_pageSettings.PaperSize = rptPageSettings.PaperSize;
                 //页面边距设定
                 this.m_pageSettings.Margins.Bottom = rptPageSettings.Margins.Bottom;
                 this.m_pageSettings.Margins.Left = rptPageSettings.Margins.Left;
                 this.m_pageSettings.Margins.Right = rptPageSettings.Margins.Right;
                 this.m_pageSettings.Margins.Top = rptPageSettings.Margins.Top;
                 //页面尺寸设定
                 PaperSize paperSize = new PaperSize();
                 if (this.m_isLandSapce)
                 {
                    //横向
                    paperSize.Height = rptPageSettings.PaperSize.Width;
                    paperSize.Width = rptPageSettings.PaperSize.Height;
                 }
                 else
                 {
                    paperSize.Height = rptPageSettings.PaperSize.Height;
                    paperSize.Width = rptPageSettings.PaperSize.Width;
                 }
                 paperSize.PaperName = rptPageSettings.PaperSize.PaperName;
                 paperSize.RawKind = rptPageSettings.PaperSize.RawKind;
                 this.m_pageSettings.PaperSize = paperSize;
                 //打印方向
                 this.m_pageSettings.Landscape = m_isLandSapce;
                 
                 #endregion 页面设置
                 //根据打印机物理边距(可打印区域距离纸张边距)重新调整页边距,以适应不同的打印机
                 unchecked
                 {
                    this.m_pageSettings.Margins.Left -= (int)m_printDocument.DefaultPageSettings.HardMarginX;//左边距减去打印机可打印区域边距
                    this.m_pageSettings.Margins.Top -= (int)m_printDocument.DefaultPageSettings.HardMarginY;//上边距减去可打印区域边距
                 }             //设置默认打印机页面
                 m_printDocument.DefaultPageSettings = (PageSettings)m_pageSettings.Clone();
                 //保存当前打印机设置             //导出后打印
                 Export(rptView.LocalReport, this.m_pageSettings);
                 Application.DoEvents();
                 this.m_currentPageIndex = 0;
                 this.m_printDocument.PrinterSettings.MaximumPage = this.m_streams.Count;
                 this.m_printDocument.PrinterSettings.MinimumPage = 1;
                 FrmPrint frmPrint = new FrmPrint(this.m_printDocument.PrinterSettings);
                 if (frmPrint.ShowDialog(this) == DialogResult.OK)
                 {
                     this.m_duplex = frmPrint.Duplex;
                     IList<Stream> streams = new List<Stream>();
                    //打印选定页
                    if (frmPrint.PrinterSettings.PrintRange == PrintRange.SomePages &&
                       frmPrint.PrinterSettings.FromPage >= 1 &&
                       frmPrint.PrinterSettings.ToPage  <= this.m_streams.Count)
                    {//打印部分页,且指定页码在当前页码范围内
                       //剔除未被选中的页
                       for (int i = 0; i <= this.m_streams.Count; i++)
                       {
                          //属于页码范围则选中
                           if (i >= (frmPrint.PrinterSettings.FromPage - 1) && i <= (frmPrint.PrinterSettings.ToPage - 1))
                           {
                               streams.Add(this.m_streams[i]);
                           }
                           else
                           {
                               //this.m_streams[i].SetLength(0);
                               //this.m_streams[i].Close();
                           }
                       }
                       this.m_streams.Clear();
                       this.m_streams = streams;
                    }
                    else if (frmPrint.PrinterSettings.PrintRange == PrintRange.Selection)
                    {//打印当前页,guog2009-05-06新增
                        //剔除所有非当前页
                        if (this.rptView.CurrentPage < this.m_streams.Count && this.m_streams.Count > 0)
                        {
                            streams.Add(this.m_streams[this.rptView.CurrentPage - 1]);
                        }
                        this.m_streams.Clear();
                        this.m_streams = streams;
                    }
                    
                    if (this.m_streams.Count > 0)
                    {
                        //打印
                        Print();
                    }
                    else
                    {
                        string msg = "没有可打印的页面信息。";
                        MessageBox.Show(msg, "报表打印", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                 }
              }
              else
              {
                 this.btnPrint.Enabled = true;
                 this.Cursor = Cursors.Default;
                 string msg = String.Format("由于当前打印机安装有问题,无法打印。\r\n\"{0}\"请检查打印机设置或重新选择打印机。", this.m_printDocument.PrinterSettings.PrinterName);
                 MessageBox.Show(msg, "报表打印");
              }
           }
    //根据打印机物理边距(可打印区域距离纸张边距)重新调整页边距,以适应不同的打印机
                 unchecked
                 {
                    this.m_pageSettings.Margins.Left -= (int)m_printDocument.DefaultPageSettings.HardMarginX;//左边距减去打印机可打印区域边距
                    this.m_pageSettings.Margins.Top -= (int)m_printDocument.DefaultPageSettings.HardMarginY;//上边距减去可打印区域边距
                 }
      

  3.   

    //根据打印机物理边距(可打印区域距离纸张边距)重新调整页边距,以适应不同的打印机 
                unchecked 
                { 
                    this.m_pageSettings.Margins.Left -= (int)m_printDocument.DefaultPageSettings.HardMarginX;//左边距减去打印机可打印区域边距 
                    this.m_pageSettings.Margins.Top -= (int)m_printDocument.DefaultPageSettings.HardMarginY;//上边距减去可打印区域边距 
                }=================================================
    我现在做的也是用代码直接连打印,可是在公司里调了边距已经好了,为什么在客户哪里还是一样的。上边据过大,导致表格下边的线出不了,因为没的纸了?请问是什么原因?
      

  4.   

    唉.. 现在看到写打印类的人 我就很纳闷, 也许我的要求不高,但是我的solution绝对满足我的要求了. 你就调用下IE的打印不就好了.. 又可以通过拉边距,简单易用 就一句话的事情。 何必写那么多代码?当然你如果为了挑战下自己的逻辑思维能力或者有更加高的需求,比如跨平台,那就当我没说。
      

  5.   

    晕了 我什么时候说了是在WEB底下用的打印撒?
      

  6.   

    m_pageSettings 是什么控件啊?
      

  7.   


    查MSDN吧,那里来的什么控件!