e.Graphics.DrawString(txt_chuhuodan.Text, new System.Drawing.Font("宋体",//绘制文本内容  以下内容为发货地址等信息
               12), myBrush, 690, 440, sf);  
for (int i = 0; i < 30; i++)
            {
                e.Graphics.DrawLine(mypen, 30, 500 + (i * 50), 790, 500 + (i * 50));
                e.Graphics.DrawString("收货日期:", new System.Drawing.Font("宋体",//绘制文本内容  以下内容为发货地址等信息
               12), myBrush, 80, 510 + (i * 50), sf);
            }
            e.HasMorePages = true;
            
            il++;
            if (il >=1)
            {
                e.HasMorePages = false;
            }用以上代码打印时,打印出来的三页都是第一页的内容,后面两页的内容打印不出来,预览的时候也是只能看到第一页,怎么才能让打印出来的是连续的三面。谢谢!

解决方案 »

  1.   


    using System.IO;
    using System.Drawing.Printing;namespace SimpleEditor
    {
        public partial class SimpleEditorForm : Form
        {
            private string filename = "Untitled";        //1、實例化打印文檔
            PrintDocument pdDocument = new PrintDocument();                private string[] lines;
            private int linesPrinted;
            public SimpleEditorForm()
            {
                InitializeComponent();            //2、訂閱事件            //訂閱PinrtPage事件,用於繪製各個頁內容
                pdDocument.PrintPage += new PrintPageEventHandler(OnPrintPage);
                //訂閱BeginPrint事件,用於得到被打印的內容
                pdDocument.BeginPrint += new PrintEventHandler(pdDocument_BeginPrint);
                //訂閱EndPrint事件,用於釋放資源
                pdDocument.EndPrint += new PrintEventHandler(pdDocument_EndPrint);
            }        private void OnFilePrint(object sender, EventArgs e)
            {
                try
                {
                    //調用打印
                    pdDocument.Print();                /*
                     * PrintDocument對象的Print()方法在PrintController類的幫助下,執行PrintPage事件。
                     */
                }
                catch (InvalidPrinterException ex )
                {
                    MessageBox.Show(ex.Message, "Simple Editor", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    throw;
                }
            }        /// <summary>
            /// 3、得到打印內容
            /// 每個打印任務衹調用OnBeginPrint()一次。
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void pdDocument_BeginPrint(object sender, PrintEventArgs e)
            {
                char[] param ={ '\n' };
                lines = textBoxEdit.Text.Split(param);            int i = 0;
                char[] trimParam ={ '\r' };
                foreach (string s in lines)
                {
                    lines[i++] = s.TrimEnd(trimParam);
                }
            }
            /// <summary>
            /// 4、繪制多個打印頁面
            /// printDocument的PrintPage事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void OnPrintPage(object sender, PrintPageEventArgs e)
            {
                /*
                 * 得到TextBox中每行的字符串數組
                 * \n換行
                 * \r回車
                 */            int x = 20;
                int y = 20;
                while (linesPrinted<lines.Length)
                {
                    //繪製要打印的頁面
                    e.Graphics.DrawString(lines[linesPrinted++], new Font("Arial", 10), Brushes.Black, x, y);                y += 55;                //判斷超過一頁時,允許進行多頁打印
                    if (y >= e.PageBounds.Height - 80)
                    {
                        //允許多頁打印
                        e.HasMorePages = true;                    /*
                         * PrintPageEventArgs類的HaeMorePages屬性為True時,通知控件器,必須再次調用OnPrintPage()方法,打印一個頁面。
                         * PrintLoopI()有一個用於每個要打印的頁面的序例。如果HasMorePages是False,PrintLoop()就會停止。
                         */
                        return;
                    }
                }            linesPrinted = 0;
                //繪制完成後,關閉多頁打印功能
                e.HasMorePages = false;        }        /// <summary>  
            ///5、EndPrint事件,釋放資源
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void pdDocument_EndPrint(object sender, PrintEventArgs e)
            {
               //變量Lines占用和引用的字符串數組,現在釋放
                lines = null;
            }
        }
    }