Itext7 конвертирует HTML в PDF (asp.net core 2.1), выдает ошибку «Невозможно получить доступ к закрытому потоку» - PullRequest
0 голосов
/ 30 ноября 2018

Я установил iText7.pdfhtml и использую класс iText.Html2pdf.HtmlConverter для преобразования html-строки в pdf.Как только я пытаюсь получить доступ к выходному потоку PDF, я получил сообщение об ошибке «Не удается получить доступ к закрытому потоку».Мне нужно прочитать поток памяти, чтобы загрузить его в хранилище BLOB-объектов Azure.

Мой код указан ниже:

ConverterProperties converterProperties = new ConverterProperties();
MemoryStream stream = new MemoryStream();
HtmlConverter.ConvertToPdf(htmlString, stream);

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(_configuration["ConnectionStrings:StorageConnectionString"]);

// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

// Retrieve a reference to a container.
CloudBlobContainer container = blobClient.GetContainerReference("receipts");

CloudBlockBlob blockBlob = container.GetBlockBlobReference(Guid.NewGuid() + ".pdf");

await blockBlob.UploadFromStreamAsync(stream);

stream.Dispose();
blobUrl = blockBlob?.Uri.ToString();

1 Ответ

0 голосов
/ 02 декабря 2018

HtmlConverter.ConvertToPdf закрывает поток, который был передан ему после завершения процесса преобразования.Однако, поскольку вы используете MemoryStream, вы все равно можете получить доступ к его содержимому даже после его закрытия.

Если вы хотите снова использовать содержимое в качестве потока, вы можете создать новый и использовать его.потом:

MemoryStream pdfStream = new MemoryStream(stream.ToArray());
await blockBlob.UploadFromStreamAsync(pdfStream);
pdfStream.Dispose();
...