Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Crystal reports 水晶报告“;“文件中断”;_Crystal Reports_Pdf Generation - Fatal编程技术网

Crystal reports 水晶报告“;“文件中断”;

Crystal reports 水晶报告“;“文件中断”;,crystal-reports,pdf-generation,Crystal Reports,Pdf Generation,我正在生成一个Crystal Reports报告,它最终需要拆分成数千个pdf文件。理想的情况是,Crystal Reports有一个类似“文件分隔符”的东西,比如分页符,您可以在适当的位置将其插入到文件中 我还需要对文件名进行合理的精细控制……比如“fileName{CustomerId}{CustomerIsLocal}.pdf” 我想可能需要第三方软件。想法 TIA.我认为Crystal不支持这种功能。目前,我们自己在应用程序中对此进行管理,特别是在需要自定义名称格式的情况下,您的意图是为

我正在生成一个Crystal Reports报告,它最终需要拆分成数千个pdf文件。理想的情况是,Crystal Reports有一个类似“文件分隔符”的东西,比如分页符,您可以在适当的位置将其插入到文件中

我还需要对文件名进行合理的精细控制……比如“fileName{CustomerId}{CustomerIsLocal}.pdf”

我想可能需要第三方软件。想法


TIA.

我认为Crystal不支持这种功能。目前,我们自己在应用程序中对此进行管理,特别是在需要自定义名称格式的情况下,您的意图是为客户群运行报告。您必须考虑使用一些代码来完成这项工作(我们使用的是C)

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


Adriaan

我认为Crystal不支持这种功能。目前,我们自己在应用程序中对此进行管理,特别是在需要自定义名称格式的情况下,您的意图是为客户群运行报告。您必须考虑使用一些代码来完成这项工作(我们使用的是C)

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


Adriaan

您正在寻找的功能通常被称为“爆破”。虽然有各种第三方工具可以做到这一点,但Business Objects Enterprise也可以(尽管Crystal Reports Server不能)。它可能超出了您的价格范围,但它在报告分发中为您提供的灵活性绝对值得一看。

您正在寻找的功能通常被称为“爆破”。虽然有各种第三方工具可以做到这一点,但Business Objects Enterprise也可以(尽管Crystal Reports Server不能)。它可能超出了您的价格范围,但它在报告分发中为您提供的灵活性绝对值得一看……

我想为任何其他前来寻找答案的人记录这一点:

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报告,这超出了本教程的范围。祝你好运

我想为任何其他前来寻找答案的人记录这一点:

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报告,这超出了本教程的范围。祝你好运

Report Runner Batch是一种廉价的第三方解决方案,可以做到这一点:


Report Runner Batch是一种廉价的第三方解决方案,可以实现以下功能:


这似乎正是我要寻找的,但您从中构建数据集是什么?对不起,如果这是一个愚蠢的问题;我对此有点陌生。我只是从一个普通的ADO查询中构建了它……如果我今天这样做,我可能会有一个实体列表。这似乎正是我要寻找的,但你从中构建数据集是什么?对不起,如果这是一个愚蠢的问题;我对这个有点陌生。我只是从一个普通的ADO查询构建了它…如果我今天这样做,我可能会有一个实体列表。