有了ActiveReports 就可以将多个独立报表拼成一个整个大的报表,报表拼接的方法主要取决于报表类型。

接下来,让我们了解下,不同类型的报表如何进行拼接。

区域报表

区域 报表由于它的组织结构的特殊性,有以下方法来实现拼接:

1. 添加或插入报表页

2. 覆盖报表页

3.将报表保存成文档之后拼接报表

 

添加或插入报表页

在区域报表中,Document.Pages 属性(PageCollection 类)保存了报表生成的每一页。您可以执行添加,插入,赋值或删除报表页等操作,使用PagesCollection类提供的“Add”,”AddRange”,”CopyTo”,”Insert”,”InsertRange”,”Remove”等。

 

image

 

 

//C#
// Run each report.
rpt1.Run(false);
rpt2.Run(false);
// Add the pages of rpt2 after rpt1.
for (int i = 0; i < rpt2.Document.Pages.Count; i++)
{
  rpt1.Document.Pages.Add(rpt2.Document.Pages[i].Clone());
}

 

一旦拼接成功,可以在报表Viewer中显示报表了,设置打印布局可以指定打印设置,打印报表也可以选择逆向打印。

注意:区域报表只能与区域报表连接。

拼接报表页面

区域报表,可以使用Page的Overlay方法,将其他报表拼接到首个报表后面。

image

//C#
// Run each report.
rpt1.Run(false);
rpt2.Run(false);
// Overlay the first page of rpt2 onto each page of rpt1.
for (int i = 0; i < rpt1.Document.Pages.Count; i++)
{
  rpt1.Document.Pages[i].Overlay(
    (GrapeCity.ActiveReports.Document.Section.Page)
      rpt2.Document.Pages[0].Clone());
}

 

一旦连接,就可以在报表Viewer中展示报表,导出并打印。

保存成Document对象时连接页面

 

// C#
        // Specify paths to reports that were saved to RDF format.
        string invoiceRdf = null;
        invoiceRdf = Application.StartupPath.ToString() + “..\\..\\..\\Invoice.rdf”;
        string letterRdf = null;
        letterRdf = Application.StartupPath.ToString() + “..\\..\\..\\Letter.rdf”;
        // Create a section report object to hold the pages of the final merged report.
        GrapeCity.ActiveReports.SectionReport merge = new GrapeCity.ActiveReports.SectionReport();
        // Create a section report document object in which to load pages from the RDFs.
        GrapeCity.ActiveReports.Document.SectionDocument fRdf = new GrapeCity.ActiveReports.Document.SectionDocument();
        // Load the invoice report into the document object.
        fRdf.Load(invoiceRdf);
        // Add the pages of the invoice report to the merge report.
        merge.Document.Pages.AddRange(fRdf.Pages);
        // Clear the pages from the document object.
        fRdf.Pages.Clear();
        // Load the letter report into the document object.
        fRdf.Load(letterRdf);
        // After each invoice page, insert a letter page.
        for (int i = 0; i < = fRdf.Pages.Count – 1; i++)
        {
            merge.Document.Pages.Insert(i + 1, fRdf.Pages[i]);
            i = i + 1;
        }

 

页面和RDL 报表

页面和RDL 报表未提供报表连接的方法,但是有两种方法可用:

  • 将报表导出为PDF 文件后,拼接。
  • 使用多页报表布局(仅限页面报表)

合并PDF文件

使用PDF 渲染API将报表导出为PDF 文件,导出成功后将多个PDF 文件内容拼接。

// C#
    // Create a new page report.
    PageReport _reportDef = new PageReport(new FileInfo(@”..\..\NWindTable.rdlx”));
    PageDocument reportDocument = new PageDocument(_reportDef);
 
    // Set up the PDF file names and paths.  
    string exportFileBefore = Application.StartupPath + @”/../../one.pdf”;
    string exportFileAfter = Application.StartupPath + @”/../../three.pdf”;
    string exportFileRdlx = “merge.pagereports.pdf”;
 
    // Set up PDF files to merge into the export.
    settings = new GrapeCity.ActiveReports.Export.Pdf.Page.Settings();
    settings.DocumentToAddBeforeReport = exportFileBefore; 
    settings.DocumentToAddAfterReport = exportFileAfter; 
 
    FileInfo myFile1 = new FileInfo(exportFileRdlx);
 
    // Export the report to PDF and merge the other PDF files into it.  
    PdfRenderingExtension pdfRenderingExtension = new PdfRenderingExtension();
    FileStreamProvider _outputProvider = new FileStreamProvider(myFile1.Directory, myFile1.Name);
    reportDocument.Render(pdfRenderingExtension, _outputProvider, settings);

 

使用多页布局

与连接报表不同,页面报表中使用不同数据控件来输出报表数据,当数据量过多时,可以自行换页展示。手动添加页就可以实现多页拼接。

image

 

您在使用产品过程中有任何疑问,可以登录官方产品技术社区和经验丰富的技术工程师、ActiveReports开发人员交流:了解更多

了解ActiveReports产品更多特性:

/developer/activereports

下载产品体验产品功能:

/download/?pid=16