Я пытаюсь экспортировать несколько файлов 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");
}