在 C# 窗口应用程序中打印多个文档

本文关键字:文档 打印 窗口 应用程序 | 更新日期: 2023-09-27 17:56:22

在 c# 窗口应用程序中,当文档超过 1 页时,我在打印文档时遇到问题。请参阅我用于打印文档的以下代码及其工作正常,而有一个小文档,即只有一页。

在打印按钮的单击事件上

    private void button1_Click(object sender, EventArgs e)
    {
        PrintDialog pd = new PrintDialog();
        PrintDocument doc = new PrintDocument();
        pd.Document = doc;
        doc.PrintPage += new PrintPageEventHandler(doc_PrintPage);
        DialogResult res = pd.ShowDialog();
        if (res == System.Windows.Forms.DialogResult.OK)
        {
            doc.Print();
        }
    }

PrintPageEventHandler如下。

    void doc_PrintPage(object sender, PrintPageEventArgs e)
    {
    //Fetching data from DB
        BillingApplicationEntities ent = new BillingApplicationEntities();
        List<tbCustBill> BillData = ent.tbCustBills.Where(s => s.BillId == 20133).ToList();
   //Printing doc
        Graphics grp = e.Graphics;
        Font fnt = new Font("Courier New", 12);
        float fontH = fnt.GetHeight();
        int startX = 10;
        int StartY = 10;
        int offset = 40;
        foreach (tbCustWorkDet d in WorkData)
        {
            string Pare = d.WorkName.PadRight(30);
            string pp = string.Format("{0:c}", d.Price).PadRight(30);
            string pl = Pare + pp;
            grp.DrawString(pl, fnt, new SolidBrush(Color.Black), startX, StartY + offset);
            offset += (int)fontH + 5;
           if (offsetY >= pageHeight)
           {
                e.HasMorePages = true;
                offsetY = 0;
                return; // you need to return, then it will go into this function again
           }
           else {
                 e.HasMorePages = false;
            }
        }
        offset += 20;
        // And cont with other data to print
    }

这种方法工作正常,给了我所需的 o/p,但是当数据变得更大并且需要更多的页面来打印时,在 o/p 中它只给了我一页。

正如我认为对于多个页面,我们必须将以下属性设置为 true

    e.HasMorePages = true;

但我不知道在哪里以及如何放置这个值......

简而言之,我想知道如何从上面的代码中打印多个文档?

在此代码中,return将返回到函数并再次开始整个执行,依此类推,这将变为无限循环。请告诉我如何防止此问题。

在 C# 窗口应用程序中打印多个文档

如果要打印更多页面,请在打印页面处理程序中添加e.HasMorePages = true;。这会导致再次调用处理程序。由处理程序来输出正确的页面。