C# - iTextSharp - невозможно получить доступ к закрытому потокуC#

Место общения программистов C#
Ответить
Anonymous
 C# - iTextSharp - невозможно получить доступ к закрытому потоку

Сообщение Anonymous »

Единственное, что я могу придумать по поводу этой проблемы, это то, что iTextSharp не работает....
Сначала я создаю MemoryStream следующим образом:

Код: Выделить всё

MemoryStream outFile = new MemoryStream();
У меня есть этот поток:

Код: Выделить всё

var streamFile = await graphClient.Me.Drive.Items["item-id"].Content.Request().GetAsync();
Это PDF-файл из Microsoft OneDrive.
Затем я беру этот поток и назначаю его PdfReader iTextSharp следующим образом:

Код: Выделить всё

PdfReader pdfReader = new PdfReader(streamFile);
Затем я использую PDFStamper для внесения изменений в PDF-файл следующим образом:

Код: Выделить всё

PdfStamper pdfStamper = new PdfStamper(pdfReader, outFile);
Затем я редактирую следующим образом:

Код: Выделить всё

AcroFields fields = pdfStamper.AcroFields;
fields.SetField("Full_Names", "JIMMMMMMAYYYYY");
Затем я повторно загружаю файл в OneDrive (который также ожидает поток) следующим образом:

Код: Выделить всё

await graphClient.Me.Drive.Items["item-id"].ItemWithPath("NewDocument-2.pdf").Content.Request().PutAsync(outFile);
Но я получаю эту ошибку:

Невозможно получить доступ к закрытому потоку.

в этой строке:

Код: Выделить всё

await graphClient.Me.Drive.Items["item-id"].ItemWithPath("NewDocument-2.pdf").Content.Request().PutAsync(outFile);
Когда я просто получаю файл из OneDrive и загружаю его вот так:

Код: Выделить всё

var streamFile = await graphClient.Me.Drive.Items["item-id"].Content.Request().GetAsync();

await graphClient.Me.Drive.Items["item-id"].ItemWithPath("NewDocument-2.pdf").Content.Request().PutAsync(streamFile);
Это работает! Я могу получить файл и повторно загрузить его, так что с PDF-файлом это вообще не проблема, iTextSharp не работает. Я пробовал несколько вещей, и ничего не работает. Что iTextSharp делает неправильно? Вот мой полный код:

Код: Выделить всё

using (MemoryStream outFile = new MemoryStream())
{
var streamFile = await graphClient.Me.Drive.Items["item-id"].Content.Request().GetAsync();

using (PdfReader pdfReader = new PdfReader(streamFile))
{
using (PdfStamper pdfStamper = new PdfStamper(pdfReader, outFile))
{
AcroFields fields = pdfStamper.AcroFields;
fields.SetField("Full_Names", "JIMMMMMMAYYYYY");
}
}

await graphClient.Me.Drive.Items["item-id"].ItemWithPath("NewDocument-2.pdf").Content.Request().PutAsync(outFile);
}
Что происходит не так?

Подробнее здесь: https://stackoverflow.com/questions/588 ... sed-stream
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»