配色: 字号:
实现报表自定义打印功能
2016-11-07 | 阅:  转:  |  分享 
  
ActiveReports报表的浏览器中内置了打印功能,同时,用户还可以通过

GrapeCity.ActiveReports.SystemPrinter自己控制打印操作,比如和实现缩放打印,连续打

印,附加信息打印等操作。本文主要演示如何通过该方法实现按照报表内容高度选择纸张打

印。

按照报表内容高度选择纸张打印的详细需求是这样的,在报表中往往最后一页可能只使用到一

张纸的部分区域,那么在使用针式打印机打印时,为了节省纸张,我们希望只打印有数据的区

域,空白区域就不打印。

以下是详细实现步骤:

首先,创建一个商品清单报表,该报表运行之后有两页内容,第二页数据没有占满整张纸,我

们希望在显示时就不显示空白区域,如下样式:



要实现这个效果,我们可以在报表的ReportEnd事件中动态设置最后一页的纸张高度。基本

思路是记录每页中数据占用的实际高度,在ReportEnd事件中设置最后一页的高度:

//记录当前页实际高度

publicfloatActualPageHeight=0;

privatevoidSectionReport1_ReportEnd(objectsender,EventArgse)

{

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

ActualPageHeight=ActualPageHeight+this.PageSettings.Margins.Top

+this.PageSettings.Margins.Bottom+this.pageHeader.Height;

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

}

privatevoiddetail_AfterPrint(objectsender,EventArgse)

{

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

ActualPageHeight+=this.detail.Height;

}

privatevoidSectionReport1_PageStart(objectsender,EventArgse)

{

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

ActualPageHeight=0;

}



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

privatevoid连续打印ToolStripMenuItem_Click(objectsender,EventArgse)

{

//连续打印报表

GrapeCity.ActiveReports.Document.Section.PageaPage=new

GrapeCity.ActiveReports.Document.Section.Page();

aPage.Width=rpt.PageSettings.PaperWidth;

aPage.Height=rpt.PageSettings.PaperHeight;

//创建SystemPrinter对象

GrapeCity.ActiveReports.SystemPrinterm_myARPrinter=new

GrapeCity.ActiveReports.SystemPrinter();

m_myARPrinter.PrintDialog();

m_myARPrinter.PaperSize=newSystem.Drawing.Printing.PaperSize("Custom

Size",Convert.ToInt32(aPage.Width100),Convert.ToInt32(aPage.Height100));

//启动打印任务

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

System.Drawing.RectangleFrec;

intnCount=rpt.Document.Pages.Count;

for(inti=0;i
{

m_myARPrinter.StartPage();

m_myARPrinter.Graphics.PageUnit=GraphicsUnit.Pixel;

aPage=rpt.Document.Pages[i];

m_myARPrinter.PaperSize=newSystem.Drawing.Printing.PaperSize("Custom

Size",Convert.ToInt32(aPage.Width100),Convert.ToInt32(aPage.Height100));

rec=newRectangleF(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=newSystem.Drawing.Printing.PaperSize("Custom

Size",Convert.ToInt32(aPage.Width100),Convert.ToInt32(aPage.Height100));

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

m_myARPrinter.StartPage();

m_myARPrinter.Graphics.PageUnit=GraphicsUnit.Pixel;

rec=newRectangleF(0,0,aPage.Width,aPage.Height);

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

m_myARPrinter.EndPage();

m_myARPrinter.EndJob();

}



运行截图:





献花(0)
+1
(本文系some_terren...首藏)