Почему сжатые PDF не читаются - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь экспортировать несколько файлов PDF в один сжатый файл.

Ранее у меня было действие по экспорту простого PDF, и оно работало. Но сейчас я пытаюсь сжать несколько файлов из отчетов.

ZIP-файл экспортируется и содержит нужные файлы, но ни один файл не доступен для чтения, а его размер соответствует значению (больше 0). Пожалуйста, у вас есть идея, как решить эту проблему? Пожалуйста, найдите ниже действие, которое я кодировал для этого на ASP MVC 5 / C #

    public ActionResult ExportAllPDF(string month, string year)
    {
        List<string> lesAffectations = new List<string>(); // sql
        var etabs = DataAccessLayer.SGDPDE13ModelInstance.EtablissementsTb.ToList().GetRange(0, 5);
        foreach (var item in etabs)
        {
            lesAffectations.Add(item.ID_Etab);
        }

        var files = new List<FileStreamResult>();
        using (var memoryStream = new MemoryStream())
        {
            using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
        {
                for (int i = 0; i < lesAffectations.Count; i++)
                {
                    //Example: http://localhost:9665/Administrateur/ExportAllPDF?month=10&year=2018
                    ReportDocument rd = new ReportDocument();

                    rd.Load(Path.Combine(Server.MapPath("~/Reports"), "ReportTR.rpt"));
                    var data = GetTraitements(lesAffectations[i], month, year);
                    DataTable table = new DataTable();
                    using (var reader = ObjectReader.Create(data))
                    {
                        table.Load(reader);
                    }
                    rd.SetDataSource(table);
                    Response.Buffer = false;
                    Response.ClearContent();
                    Response.ClearHeaders();
                    Stream stream = rd.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);                        
                    stream.Seek(0, SeekOrigin.Begin);
                    var fileName = lesAffectations[i] + "_TRAITEMENT_" + month + "_" + year + ".pdf";
                    files.Add(File(stream, "application/pdf", fileName));
                    var demoFile = archive.CreateEntry(fileName);
                    using (var entryStream = demoFile.Open())
                    using (var streamWriter = new StreamWriter(entryStream))
                    {
                        streamWriter.Write(stream);

                    }                       
                } 
            }

            var zipName = new Random().Next(10000, 9999999);
            using (var fileStream = new FileStream(zipName + ".zip", FileMode.Create))
            {
                var bytes = memoryStream.GetBuffer();
                fileStream.Write(bytes, 0, bytes.Length);
            }
            return File(memoryStream.ToArray(), "application/zip", "Attachments.zip");
        }
...