求助,
打印预览中 添加打印当前页如果还能添加打印某页至某页,更好,
求代码,谢谢

解决方案 »

  1.   

    在winform中可使用printdocument打印某页
    PrintDocument.PrinterSettings.FromPage = 2; 
    PrintDocument.PrinterSettings.ToPage = 2;
      

  2.   

    public PrintDocument prndoc = new PrintDocument();
            private PrintDialog prndlg = new PrintDialog();
            private PrintPreviewDialog preddlg = new PrintPreviewDialog();    
    ……
            private void tbyaidi(Graphics grfx, int k, PrintPageEventArgs ppea)
            {   //画表分班名册           
                Rectangle rect = new Rectangle(mtm(13), mtm(top), mtm(265), mtm(bottom-top));
                grfx.DrawRectangle(pen2, rect);
                PointF[] point = new PointF[2]; 
                point[0].X = mtm(80);            point[0].Y = mtm(top);
               ……
                      }
            private void pagehen()
            {       
                PageSetupDialog psd = new PageSetupDialog();
                psd.AllowPaper = true;//是否可选择页面大小和纸张来源。
                psd.AllowOrientation = true;//属性定义用户是否可以选择纵向和横向打印方式。
                prndoc.PrinterSettings.FromPage = 2;
                prndoc.PrinterSettings.ToPage = 2;
                psd.Document = this.prndoc;
                psd.PageSettings.Landscape = true;//横向为True,纵向为False        
            }        
            public void printh()
            {     //计算有几页
                prpage = d;
                this.prndoc = new PrintDocument();           
                this.prndoc.PrintPage += new PrintPageEventHandler(OnPrintPage);
                this.prndoc.EndPrint += new PrintEventHandler(prndoc_EndPrint);//每次打印完成后要重置这两个变量,以备下次打印时使用
                pagehen(); 
                this.prndoc.Print();
                
            }
            public void preprinth()
            {            //计算有几页
                float a = (float)(sds1);
                float b = 20.0f;
                float c = a / b;
                int d = (int)Math.Ceiling(c);            prpage = d;
                p2 = d;
                pagehen(); 
                this.preddlg = new PrintPreviewDialog();
                  
                this.prndoc.PrintPage += new PrintPageEventHandler(OnPrintPage);
                this.prndoc.EndPrint += new PrintEventHandler(prndoc_EndPrint);//每次打印完成后要重置这两个变量,以备下次打印时使用
                //prndoc.BeginPrint += new PrintEventHandler(printDocument1_BeginPrint);
                
                preddlg.Width = 700;
                preddlg.Height = 580;
                preddlg.Left = 10;
                preddlg.Top = 10;
                this.preddlg.Document = prndoc;
                preddlg.ShowDialog();
            }        void prndoc_EndPrint(object sender, PrintEventArgs e)
            {
                if (prpage > 1)
                    prpage -= 1;//每次打印完成后要重置这两个变量,以备下次打印时使用
                else
                    prpage = p2;
                p = 0;//每次打印完成后要重置这两个变量,以备下次打印时使用
                xhao = 1;
            }
                   /// 在表中填数据       
            private void prtword(Graphics grfx,int a)
            {
                PointF point = new PointF();
                Font font2 = new Font("宋体", 12);
                Pen pen = new Pen(Color.Black, 2);
                string str = "";
                Brush brush = Brushes.Black;
                Int32 hx = 22;
                Int32 h;         
                //当最后一页不满一页时,设置循环C次
                int c = 20;
                if (sds1 - (a + 1) * 20 < 0)
                    c = sds1 - a * 20;
                for (int i = 0; i < c; i++)
                {
                    h = Convert.ToInt32(i * 7.1 + 22.5+top);
                    point.Y = mtm(h);
                    point.X = mtm(hx-8);
                    grfx.DrawString(xhao.ToString(), font2, brush, point);//儿童名册序号 
                    xhao++;
                    for (int k = 0; k < sds2 - 5; k++) //-4是因为后面几列在这个表中没有用了
                    {
                        str = sds[i+a*20, k];
                        point.X = mtm(hx);
                        grfx.DrawString(str, font2, brush, point);
                       ……
                     
                    }
                    hx = 22;
                }
            }             private void fillcaption(Graphics grfx, int a, PrintPageEventArgs ppea)
            {            string str ="";
               
                           point.X = mtm(15);
                point.Y = mtm(top+6);
                str = "序";
                grfx.DrawString(str, font2, brush, point);            point.X = mtm(15);
                point.Y = mtm(top+14);
                str = "号";
                grfx.DrawString(str, font2, brush, point);            point.X = mtm(26);
                point.Y = mtm(top+8);
                 }        private void OnPrintPage(object sender, PrintPageEventArgs ppea)
            {
                
               
                Graphics grfx = ppea.Graphics;            
                ppea.HasMorePages = false;
                while (prpage >= 1)
                {
                    tbyaidi(grfx, p, ppea);
                    fillcaption(grfx, p, ppea);
                    p++;
                    if (prpage == 1)
                    {
                        ppea.HasMorePages = false;
                        prpage--;
                        //return;
                    }
                    else if (prpage > 1)
                    {
                        ppea.HasMorePages = true;
                        prpage--;
                        return;
                    }
                }
            }
    这是我写的一个类,我把数组传给这个类,打印,
    我不知道prndoc.PrinterSettings.FromPage = 2;
                prndoc.PrinterSettings.ToPage = 2;这两句应该放到哪里
    请帮我看一下,代码有点长,如果能解决,我再多给点辛苦分哈,
    谢谢先
      

  3.   

    打印预览对话框中是没有打印选项按钮的,
    如果要实现此功能,楼主不能使用,
    而应该在一个FORM中用PrintPreviewControl配合ToolStrip自己做一个预览窗体
    然后结合PrintDialog控件让用户设置打印范围之类的