实现报表自定义打印功能

2025-10-21 20:15:04

1、首先,创建一个商品清单报表,该报表运行之后有两页内容,第二页数据没有占满整张纸,我们希望在显示时就不显示空白区域,如下样式:

实现报表自定义打印功能

2、首先,在报表的ReportEnd事件中动态设置最后一页的纸张高度。基本思路是记录每页中数据占用的实际高度,在ReportEnd事件中设置最后一页的高度:

// 记录当前页实际高度

public float ActualPageHeight = 0;

private void SectionReport1_ReportEnd(object sender, EventArgs e)

{

    // 在报表运行结束之后调整最后一页的高度

    ActualPageHeight = ActualPageHeight

                       + this.PageSettings.Margins.Top

                       + this.PageSettings.Margins.Bottom

                       + this.pageHeader.Height;

    this.Document.Pages[this.Document.Pages.Count - 1].Height = ActualPageHeight;

}

private void detail_AfterPrint(object sender, EventArgs e)

{

    // 记录每条数据占用的高度

    ActualPageHeight += this.detail.Height;

}

private void SectionReport1_PageStart(object sender, EventArgs e)

{

    // 每页开始时对实际高度做清零操作

    ActualPageHeight = 0;

}

3、然后,我们实现连续打印操作,在打印时需要将报表内容分为两部分进行打印,代码如下:

private void 连续打印ToolStripMenuItem_Click(object sender, EventArgs e)

{

    // 连续打印报表

    GrapeCity.ActiveReports.Document.Section.Page aPage = new GrapeCity.ActiveReports.Document.Section.Page();

    aPage.Width = rpt.PageSettings.PaperWidth;

    aPage.Height = rpt.PageSettings.PaperHeight;

    // 创建SystemPrinter对象

    GrapeCity.ActiveReports.SystemPrinter m_myARPrinter = new GrapeCity.ActiveReports.SystemPrinter();

    m_myARPrinter.PrintDialog();

    m_myARPrinter.PaperSize = new System.Drawing.Printing.PaperSize("Custom Size", Convert.ToInt32(aPage.Width * 100), Convert.ToInt32(aPage.Height * 100));

    // 启动打印任务

    m_myARPrinter.StartJob("连续打印");

    System.Drawing.RectangleF rec;

    int nCount = rpt.Document.Pages.Count;

    for (int i = 0; i < nCount - 1; i++)

    {

        m_myARPrinter.StartPage();

        m_myARPrinter.Graphics.PageUnit = GraphicsUnit.Pixel;

        aPage = rpt.Document.Pages[i];

        m_myARPrinter.PaperSize = new System.Drawing.Printing.PaperSize("Custom Size", Convert.ToInt32(aPage.Width * 100), Convert.ToInt32(aPage.Height * 100));

        rec = new RectangleF(0, 0, aPage.Width, aPage.Height);

        aPage.Draw(m_myARPrinter.Graphics, rec, 1f, 1f);

        m_myARPrinter.EndPage();

    }

    m_myARPrinter.EndJob();

    aPage = rpt.Document.Pages[nCount - 1];

    m_myARPrinter.PaperSize = new System.Drawing.Printing.PaperSize("Custom Size", Convert.ToInt32(aPage.Width * 100), Convert.ToInt32(aPage.Height * 100));

    m_myARPrinter.StartJob("连续打印");

    m_myARPrinter.StartPage();

    m_myARPrinter.Graphics.PageUnit = GraphicsUnit.Pixel;

    rec = new RectangleF(0, 0, aPage.Width, aPage.Height);

    aPage.Draw(m_myARPrinter.Graphics, rec, 1f, 1f);

    m_myARPrinter.EndPage();

    m_myARPrinter.EndJob();

}

4、运行效果

实现报表自定义打印功能

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢