客户那边突然提出这样的需求,本来系统准备用B/S架构开发,打算使用DIV绝对位置定位坐标,然后用WEB浏览器打印不知道能不能实现,纸张不是A4大小,如果不行这个模块打算改用WinForm也可以,但不知道WinForm怎么控制打印,有没有逐行打印的功能,但逐行打印又如何换页呢?(是不是多打几个换行,这样会不会打印张数多了套打就对不齐了)
有哪位大哥以前做过类似的,把大概方法和思路告诉小弟,不慎感谢

解决方案 »

  1.   

    看到红的的那个属性了吗?
    可以通过这个属性自动换页的!  
    /// <summary>
            /// 打印设置对话框。
            /// </summary>
            public void Print()
            {
                
                PrintDocument p = new PrintDocument();
                p.PrintPage += new PrintPageEventHandler(this.PrintPageEventHandler);
                p.Print();
                //PrintPreviewDialog prev = new PrintPreviewDialog();
                //prev.Document = p;
                //prev.ShowDialog();
              
               
            }
            private void PrintPageEventHandler(object obj, System.Drawing.Printing.PrintPageEventArgs ev)
            {
                Graphics g = ev.Graphics;
                //g.DrawRectangle(Pens.Black, ev.PageSettings.PrintableArea.X, ev.PageSettings.PrintableArea.Y, ev.PageSettings.PrintableArea.Width, ev.PageSettings.PrintableArea.Height);
                float X = 10, Y = yoffset+toffset;
                bool bMorePage = true ;
                //统计第3,5,7个label
               // int nLabelCount = 1;
                for (int i = 1; i <= 6; i++)
                {
                    if ((6 * (nCurrentPage - 1) + i) > nBoxCount)
                    {
                        bMorePage = false;
                        break;
                    }
                    X = 0;
                    if (i > 1)
                    {
                        if (i % 2 == 0)
                        {
                            X += ev.PageSettings.PrintableArea.Width / 2+loffset;
                        }
                        else
                        {
                            Y += 1058.4F / 3+yoffset;//* nLabelCount ;
                            //nLabelCount++;
                        }
                    }
                    
                    g.TranslateTransform(X + xoffset, Y);                Vimage.DrawImage(g, 6 * (nCurrentPage - 1) + i, nPages, nCurrentPage);
                    g.ResetTransform();                if ((6 * (nCurrentPage - 1) + i) >= nBoxCount)
                    {
                        bMorePage = false;
                        break;
                    }
                    
                }
                //ev.Graphics.DrawRectangle(Pens.Black, 0, 0, ev.PageSettings.PrintableArea.Height - 2, ev.PageSettings.PrintableArea.Width - 2); //ev.PageBounds.X, ev.PageBounds.Y, ev.PageBounds.Width - 4, ev.PageBounds.Height -4);
                //Vimage.PrintToPrinter(ev.Graphics);            if (bMorePage)
                {
                    ev.HasMorePages = true;                nCurrentPage++;
                }
                else
                {
                    ev.HasMorePages = false;
                    nCurrentPage = 1;
                }        }
        }