C# 在打印中覆盖上一页

本文关键字:一页 覆盖 打印 | 更新日期: 2023-09-27 18:36:56

祝大家美好的一天,我有一个应用程序,可以为员工的日常时间记录创建报告。问题是打印预览对话框中的所有页面都被打印中可用的每个页面所覆盖。我怎么可能解决这种问题?第 1 页的内容适用于第 1 页,第 2 页仅针对第 2 页,反之亦然。这是我的打印代码:

    private void simpleButtonOk_Click(object sender, EventArgs e)
    {
        try
        {
            countPage = 0;
            CoolPrintPreviewDialog printPreview = new CoolPrintPreviewDialog();
            PrintDocument doc = new PrintDocument();
            doc.PrintPage += new PrintPageEventHandler(doc_PrintPage);
            printPreview.Document = doc;
            Form p = (Form)printPreview;
            p.WindowState = FormWindowState.Maximized;
            p.ShowDialog();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    void doc_PrintPage(object sender, PrintPageEventArgs e)
    {
        try
        {
            for (int i = 1; i <= countEmployee; i++)
            {
                Font fontName = new Font("Calibri", 12, FontStyle.Bold);
                Font fontPosition = new Font("Calibri", 12, FontStyle.Regular);
                Brush colorBrush = new SolidBrush(Color.Black);
                e.Graphics.DrawString(empName, fontName, colorBrush, new Point(80, 120));
                e.Graphics.DrawString(empPosition, fontPosition, colorBrush, new Point(80, 140));
                e.Graphics.DrawString(empId, fontPosition, colorBrush, new Point(680, 120));
                DataManipulation.PrintSelectEmployeeByMonth(i, e, comboBoxMonth, comboBoxYear, comboBoxDayFrom, comboBoxDayTo);
                countPage++;
                MessageBox.Show(countPage.ToString());
            }
            if (countPage <= countEmployee)
            {
                e.HasMorePages = true;
            }
            else
            {
                e.HasMorePages = false;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

C# 在打印中覆盖上一页

PrintPage 事件针对每页引发一次;for循环表明,每当引发事件时,您都会尝试打印所有页面。

您需要删除for循环,并将索引变量i提升为可用于跟踪当前页码的实例级变量。

代码的其余部分似乎是正确的;您必须不断请求更多页面,直到事件被触发countEmployee次。