2009-11-30 47 views
0

我正在生成一个Crystal Reports报告,最终需要将其分割为数千个pdf文件。如果Crystal Reports具有诸如分页符之类的“文件中断”之类的东西,那么您可以在适当的位置将文件插入到文件中。Crystal Reports“文件中断”

我需要对文件名进行合理的精细控制,例如“fileName_ {CustomerId} _ {CustomerIsLocal} .pdf”。

我假设可能需要第三方软件。思考?

TIA。

回答

3

我想这个文件为别人谁显示了寻找答案:

private readonly CrystalReportViewer reportViewer = new CrystalReportViewer(); 
... 
this.reportViewer.ReportSource = @"C:\PathToReport\Report.rpt"; 

using (var crystalReport = new ReportDocument()) 
{ 
    foreach (DataRow row in dataSet.Tables[0].Rows) 
    { 
     var customerId = int.Parse(row["customerId"].ToString()); 
     var isCurrent = bool.Parse(row["isCurrent"].ToString()); 
     var totalSales = int.Parse(row["totalSales"].ToString()); 

     // generate the report for each row 
     this.CreateReport(customerId, isCurrent, totalSales, crystalReport); 
    } 
} 

private void CreateReport(int customerId, bool isCurrent, int totalSales, ReportDocument crystalReport) 
{ 
    crystalReport.Load(this.reportViewer.ReportSource.ToString()); 

    crystalReport.SetParameterValue("customerId", customerId); 
    crystalReport.SetParameterValue("isCurrent", isCurrent); 
    crystalReport.SetParameterValue("TotalSales", totalSales); 

    var fileName = string.Format("EndOfYear_{0}_{1}.pdf", customerId, isCurrent ? 1 : 0); 

    var outputPath = Path.Combine(this.txtOutputDirectory.Text, fileName); 

    crystalReport.ExportToDisk(ExportFormatType.PortableDocFormat, outputPath); 
} 

参考文献:

CrystalDecisions.CrystalReports.Design CrystalDecisions.CrystalReports.Engine

此代码产生一个文件名,像这样:

“EndOfYear_123456_1.pdf”

这当然是可能产生每一行的报表对象,而不是传递它,但会减慢速度相当多。据我所知,重复使用同一个报表对象并没有任何负面影响,并且使事情快了十倍。

您唯一需要做的其他事情是如何准备Crystal报表,这超出了本教程的范围。祝你好运!

+0

这似乎正是我要找的,但什么是你从建筑'dataSet'?对不起,如果这是一个愚蠢的问题;我对此有点新。 – Eiketsu 2016-11-16 16:05:17

+0

我刚刚从简单的香草ADO查询中构建它...如果今天我这样做,我可能会有一个实体列表。 – 2016-11-16 18:20:51

2

我不认为水晶支持这样的功能。我们目前在我们的应用程序中自行进行管理,特别是在名称格式需要定制的情况下,而您的意图是为客户组运行报告。你将不得不看看使用一些代码来完成这项工作(我们使用C#)。

如果您在这方面有更多问题,请随时询问,以便我可以提供帮助。

Adriaan

1

您正在寻找的功能通常被称为“突发”。虽然有多种第三方工具可以实现此目的,但Business Objects Enterprise也可以(尽管Crystal Reports Server不能)。这可能是你的价格范围内,但它绝对是值得期待的,因为这使你在报告中分配的灵活性...