C#中的多页打印文档 [英] Multiple page print document in c#

查看:64
本文介绍了C#中的多页打印文档的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请有人帮我,我必须在c#中将文档打印成多页,我上网浏览后使用了此代码,但没有用,(打印完一页后,循环又开始了)

please some one help me , i have to print a document in multiple pages in c#, i went through internet then used this code but not working, (loop is again start after printing one page )

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        try
        {
            Graphics graphic = e.Graphics;
            SolidBrush brush = new SolidBrush(Color.Black);

            Font font = new Font("Courier New", 12);

            float pageWidth = e.PageSettings.PrintableArea.Width;
            float pageHeight = e.PageSettings.PrintableArea.Height;

            float fontHeight = font.GetHeight();
            int startX = 40;
            int startY = 30;
            int offsetY = 40;


            for (int i = 0; i < 100; i++ )
            {

             graphic.DrawString("Line: " + i, font, brush, startX, startY + offsetY);
             offsetY += (int)fontHeight;

               if (offsetY >= pageHeight)
                {

                    e.HasMorePages = true;
                    offsetY = 0;
                    return;
                }
                else
                {
                    e.HasMorePages = false;

                }
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

推荐答案

每当您设置 e.HasMorePages = true 时,它只会触发 printDocument1_PrintPage()事件处理程序再次.您需要为i保留一个类变量,以便它不会在每次打印下一页时都从0重新启动.不要在事件处理程序中本地声明它.

Whenever you set e.HasMorePages = true, it will just fire the printDocument1_PrintPage() event handler again. You need to keep a class variable for i, so that it won't restart at 0 every time the next page prints. Don't declare it locally inside the event handler.

private class MyPrinter
{
    private int i = 0;

    private void Print()
    {
        i = 0;
        printDocument1.Print();
    }

    private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
         .....
         .....
         .....

         while (i < 100)
        {
             graphic.DrawString("Line: " + i, font, brush, startX, startY + offsetY);
             offsetY += (int)fontHeight;

               if (offsetY >= pageHeight)
                {

                    e.HasMorePages = true;
                    offsetY = 0;
                    return;
                }
                else
                {
                    e.HasMorePages = false;

                }
            i = i + 1;
        }
    }
}

这篇关于C#中的多页打印文档的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆