我是用Graphics来画出要打印的内容的,一次要连续打印好几张(不同的内容),用了e.HasMorePages = true;但是却变成死循环了。
比如,我第一页要打印AA,第二页要打印CC,第三页要打印DD,该怎么实现啊。

解决方案 »

  1.   

    打印分页如果做不好就会出现死循环
    你把整个打印方法看成一个while循环
    需要分页的时候就跳出来
    打印完了e.HasMorePages = false就可以了
      

  2.   

    这样试试//方法1
    this.printDocument1.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("A3", A3纸宽度, A3纸高度);//方法2
    foreach (PaperSize ps in printDocument1.DefaultPageSettings.PrinterSettings.PaperSizes)
    {
        if (ps.Kind.ToString().Equals(System.Drawing.Printing.PaperKind.A3.ToString()))
        {
            this.printDocument1.DefaultPageSettings.PaperSize = ps;
        }
    }
      

  3.   

    以下代码环境为 Dot Net FrameWork 3.5,VS2008中测试打印测试类using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Drawing.Printing;
    using System.Windows.Forms;
    using System.Drawing;namespace Test
    {
        /// <summary>
        /// 打印测试
        /// </summary>
        public class PrintTest
        {
            private PrintDocument printDoc = null;     //打印文档
            private PrintPreviewDialog preivewDialog = null;        //预览对话框        private int currentPage = 1;        //当前页        /// <summary>
            /// 构造函数
            /// </summary>
            public PrintTest()
            {
                printDoc = new PrintDocument();
                preivewDialog = new PrintPreviewDialog();            preivewDialog.Document = printDoc;            //打印事件
                printDoc.PrintPage += new PrintPageEventHandler( printDoc_PrintPage );            //在访问页面设置前
                printDoc.QueryPageSettings += new QueryPageSettingsEventHandler( printDoc_QueryPageSettings );            //以下三行代码不是必须的            //关闭预览的自动缩放
                preivewDialog.PrintPreviewControl.AutoZoom = false;            //显示比例为100%
                preivewDialog.PrintPreviewControl.Zoom = 1.0D;            //预览窗口最大化
                ( (Form)preivewDialog ).WindowState = FormWindowState.Maximized;        }        /// <summary>
            /// 预览
            /// </summary>
            public void Print()
            {
                preivewDialog.ShowDialog();            //打印换成下面的
                //printDoc.Print();
            }        //设置纸张
            void printDoc_QueryPageSettings( object sender, QueryPageSettingsEventArgs e )
            {
                if ( currentPage == 1 )
                {
                    //A3
                    foreach ( PaperSize ps in e.PageSettings.PrinterSettings.PaperSizes )
                    {
                        if ( ps.Kind.ToString().Equals( System.Drawing.Printing.PaperKind.A3.ToString() ) )
                        {
                            e.PageSettings.PaperSize = ps;
                        }
                    }
                }
                else
                {
                    //A4
                    foreach ( PaperSize ps in e.PageSettings.PrinterSettings.PaperSizes )
                    {
                        if ( ps.Kind.ToString().Equals( System.Drawing.Printing.PaperKind.A4.ToString() ) )
                        {
                            e.PageSettings.PaperSize = ps;
                        }
                    }
                }
            }        /// <summary>
            /// 打印
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void printDoc_PrintPage( object sender, PrintPageEventArgs e )
            {
                switch ( currentPage )
                {
                    case 1:
                        //第一页内容
                        e.Graphics.DrawString( string.Format( "第 {0} 页,这一页是A3", currentPage ), new Font( "黑体", 20 ), new SolidBrush( Color.Red ), new PointF( 10f, 10f ) );
                        break;                case 2:
                        //第二页内容
                        e.Graphics.DrawString( string.Format( "第 {0} 页,这一页是A4", currentPage ), new Font( "黑体", 20 ), new SolidBrush( Color.Red ), new PointF( 10f, 10f ) );
                        break;                case 3:
                        //第三页
                        e.Graphics.DrawString( string.Format( "第 {0} 页,这一页是A4", currentPage ), new Font( "黑体", 20 ), new SolidBrush( Color.Red ), new PointF( 10f, 10f ) );
                        break;                case 4:
                        //第四页
                        e.Graphics.DrawString( string.Format( "第 {0} 页,这一页是A4", currentPage ), new Font( "黑体", 20 ), new SolidBrush( Color.Red ), new PointF( 10f, 10f ) );
                        break;            }            if ( currentPage < 4 )
                {
                    currentPage++;
                    e.HasMorePages = true;
                }
                else
                {
                    currentPage = 1;
                    e.HasMorePages = false;
                }
            }
        }
    }调用示例        private void button3_Click( object sender, EventArgs e )
            {
                PrintTest t = new PrintTest();
                t.Print();
            }
      

  4.   


    int index=0;
    //打印事件
            private void pd_PrintPage(object sender, PrintPageEventArgs e)
    {
    switch (index)
    {
    case 0:
    //your print code
    index++;
    e.HasMorePages = true;
    break;
    case 1:
    //your print code
    index++;
    e.HasMorePages = true;
    break;
    case 2:
    //your print code
    index = 0;
    e.HasMorePages = false;
    break;
    }
    }