Генерация Crystal Reports в цикле и сохранить в ZIP-файл и скачать - PullRequest
0 голосов
/ 18 апреля 2019

Я хочу сгенерировать несколько отчетов по идентификатору записи, сохранить в один zip-файл и загрузить его.В настоящее время я могу создать отчет для одного отчета, сейчас я пытаюсь создавать отчеты в цикле и добавить в ZIP-файл.Любая помощь будет иметь ценность.

DataSet ds = new DataSet("ReportDs");
DataTable dtSMD = GetSurveyMaster(smdId, "SMD");
ds.Tables.Add(dtSMD);
smdReport report = new smdReport();
report.FileName = Server.MapPath("~/Views/Report/smdReport.rpt");
report.Load();
string fileName = $"smdReport{smdId}_{DateTime.Now.ToString()}";
report.SetDataSource(ds);
Stream stream = report.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);

1 Ответ

1 голос
/ 19 апреля 2019

Переместите указанную выше логику в метод, называемый CreateReportPdf(), чтобы вернуть поток, затем, используя библиотеку, подобную DotnetZip , вы можете сделать что-то вроде этого:

using (ZipFile zip = new ZipFile())
{
    foreach (var smdId in reports)
    {
        string fileName = $"smdReport{smdId}_{DateTime.Now.ToString()}";
        using (var report = CreateReportPDF(smdId))
        {
            // convert stream to archive
            zip.AddEntry($"{fileName}", report.ToArray());
        }
    }
    zip.Save("YourZip.zip");
}

Ваш CreateReportPDF должен вернуть MemoryStream

var ms = new MemoryStream();
stream.CopyTo(ms);
ms.Position = 0;
return ms;

Обратите внимание, что я использовал вашу логику filename для генерации имени файла в zip-архиве

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...