#c# #itext
#c# #itext
Вопрос:
Я создаю несколько потоков памяти, которые необходимо объединить в PDF с помощью iTextSharp, а затем отправить в виде вложения. Однако прикрепленный PDF-файл в электронном письме при открытии показывает ошибку, что файл поврежден.
Вот как я объединяю потоки памяти:
using (var ms = new MemoryStream())
{
using (var doc = new Document())
{
using (PdfCopy copy = new PdfSmartCopy(doc, ms))
{
doc.Open();
foreach (var seminar in seminars)
{
var reportBytes = await ssrsClient.GetReportAsync(_reportPath,
_detailedKostenkontrolleReportName, new {SeminarId = seminar.Id}).ConfigureAwait(false);
//Loop through each byte arrayforeach (var p in pdfByteContent) {
var reader = new PdfReader(reportBytes);
//Add the entire document instead of page-by-page
copy.AddDocument(reader);
}
var attachmentAllSeminarsDetailed = new Attachment(ms, DetailedAttachmentFileName,
"application/pdf");
attachments.Add(attachmentAllSeminarsDetailed);
//Create email body
sb = CreateEmailBody(
"Hallo,<br/><br/>in der Beilage sind die Berichte für die Hotelkostenkontrolle, die heute an die einzelne Hotels verschickt wurden.", "Dein SPOT - Team");
//Send e-mail with all PDF-s
MessageService.SendMessage(GetTestMailRecipients(), "Kostenkontrolle", sb.ToString(), attachments, new MailAddress(DefaultMailSender));
}
}
}
Размер PDF-файла составляет 139 байт, но в коде он имеет правильный размер, ~ 180 КБ. У меня такое чувство, что некоторые документы или программы чтения закрыты неправильно, но я не могу понять, какой именно.
Есть предложения?
Комментарии:
1. Вы пытались перемотать поток после цикла foreach? (
ms.Position = 0;
)2. @Fildor Да, но я все еще получаю сообщение об ошибке повреждения файла при открытии PDF.
3. Не уверен, нужно ли сначала закрыть документ…
4. Действительно. Для завершения PDF-файла документ должен быть закрыт. Если вы хотите использовать ms дальше, установите для закрытия потока значение false