Crystal Reports "File Break" - PullRequest
       23

Crystal Reports "File Break"

0 голосов
/ 30 ноября 2009

Я создаю отчет Crystal Reports, который в конечном итоге необходимо будет разбить на тысячи PDF-файлов. Что было бы идеально, если бы в Crystal Reports было что-то вроде «разрыва файла», например разрыва страницы, который вы могли бы вставить в файл в соответствующих местах.

Мне также потребуется достаточно хороший контроль над именами файлов .... что-то вроде "fileName_ {CustomerId} _ {CustomerIsLocal} .pdf".

Я предполагаю, что стороннее программное обеспечение, вероятно, понадобится. Мысли? * * 1005

ТИА.

Ответы [ 4 ]

3 голосов
/ 22 декабря 2009

Я хотел задокументировать это для всех, кто появляется в поисках ответа:

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, который выходит за рамки этого руководства. Удачи!

2 голосов
/ 30 ноября 2009

Я не думаю, что Crystal поддерживает такую ​​функциональность. В настоящее время мы сами управляем этим в нашем приложении, особенно в тех случаях, когда необходимо настроить формат имени, и вы намерены запустить отчет для группы клиентов. Вам придется посмотреть на выполнение этой работы с использованием некоторого кода (C # - это то, что мы использовали).

Если у вас есть еще вопросы по этому поводу, пожалуйста, не стесняйтесь спрашивать, чтобы я мог помочь.

Adriaan

1 голос
/ 01 декабря 2009

Функциональность, которую вы ищете, обычно называется "разрывом". Хотя для этого существуют различные сторонние инструменты, Business Objects Enterprise также может (хотя Crystal Reports Server не может). Это может быть вне вашего ценового диапазона, но определенно стоит обратить внимание на гибкость, которую он дает вам при распространении отчетов ...

0 голосов
/ 19 ноября 2010

Report Runner Batch - это недорогое стороннее решение, способное сделать это:

http://www.reportrunner.com

...