将两个或多个Crystal Reports合并为单个PDF

the*_*van 8 c# pdf asp.net merge crystal-reports-2008

我有一个CheckBoxList.如果我选择两个或多个值,那么CheckBoxList SelectedValues将作为参数逐个传递,我想为PDF格式的每个SelectedValue生成Crystal Report,并且我想将所有Crystal Report PDF格式合并为单个PDF格式.怎么做到这一点?到目前为止,我只生成了PDF格式的单个Crystal报表.在下面,我已经提供了有关如何以PDF格式生成Crystal报表的代码.

CrystalDecisions.CrystalReports.Engine.ReportDocument rpt =
    new CrystalDecisions.CrystalReports.Engine.ReportDocument();

string conn = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
string[] str = conn.Split(';');
string server = str[0].Substring(str[0].IndexOf(" = ") + 3);
string database = str[1].Substring(str[1].IndexOf(" = ") + 3);
string userid = str[2].Substring(str[2].IndexOf(" = ") + 3);
string password = "Welc0me";//str[3].Substring(str[3].IndexOf(" = ") + 3);

rpt.Load(Server.MapPath(RepPath));

for (int i = 0; i < rpt.DataSourceConnections.Count; i++)
{
   rpt.DataSourceConnections[i].SetConnection(server, database, userid, password);
}
// Here ReleaseID will be replaced by the CheckBoxList's SelectedValue
rpt.SetParameterValue(0, ReleaseID);  
rpt.SetParameterValue(1, false);                         
rpt.ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat,
    HttpContext.Current.Response, true, "Docs Report");
Run Code Online (Sandbox Code Playgroud)

但上面的代码只是一次生成一个pdf报告.但我想将每个CheckBoxList selectedvalue作为参数传递.例如,如果我选择了三个值,则Crystal Report应该逐个包含对应SelectedValue的所有三个Crystal Report.如何将所有PDF Crystal Report合并到单个Crystal Report中.我必须解决这个问题.请帮我.

Evr*_*glu 8

Crystal Reports 旨在为每条记录生成一个页面.您只需要设置包含多行数据的数据源,为报表设置该数据源并将其直接导出为pdf(已"合并").

首先,您必须使用数据创建数据源.例如,您可以使用Visual Studio设计器创建DataSet.更多信息在这里.

然后,您必须为Crystal Report设置数据源.您可以使用Crystal设计师完成此操作.

然后在运行时,您只需使用与所有选定复选框相关的数据填充rpt,然后将其导出为pdf.在.rpt文件中,在与复选框相关的特定列上创建一个组,并在组上设置"分页后"选项.这将生成一个包含所有记录的Pdf文件,每页1个.

这是一个示例代码:

            using (var reportDocument = new ReportDocument())
        {
            var datasource = new Datasource { EnforceConstraints = false };

            var adapter = new adoTableAdapter { Connection = ConfigurationManager.ConnectionStrings["ConnectionString"]) };
            adapter.Fill(datasource.ado);

            reportDocument.Load(RptPath);
            reportDocument.SetDataSource(datasource);

            PageMargins myMargins = reportDocument.PrintOptions.PageMargins;
            myMargins.topMargin = Settings.Default.DefaultTopMargin;
            myMargins.leftMargin = Settings.Default.DefaultLeftMargin;
            reportDocument.PrintOptions.ApplyPageMargins(myMargins);
            reportDocument.PrintOptions.PaperSize = PaperSize.PaperA5;
            reportDocument.PrintOptions.PaperOrientation = PaperOrientation.Landscape;

            reportDocument.ExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
            reportDocument.ExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
            reportDocument.ExportOptions.DestinationOptions = new DiskFileDestinationOptions { DiskFileName = PdfFilename };
            reportDocument.ExportOptions.FormatOptions = new PdfRtfWordFormatOptions();

            reportDocument.Export();
        }
Run Code Online (Sandbox Code Playgroud)

在此代码中,dsEtiqueta是ADO数据源,RptPath是*.rpt报告文件的路径,pdf文件名是使用timeSpan生成的.这是我在项目中所需要的,但可以随意根据您的需求进行调整.

编辑:使用CR for VS 2010完成.