itext7 convert html to pdf (asp.net core 2.1) 报错"Cannot access a closed stream"

Itext7 convert html to pdf (asp.net core 2.1) get error "Cannot access a closed stream"

我安装了 iText7.pdfhtml 并使用 class iText。Html2pdf.HtmlConverter 将 html 字符串转换为 pdf。尝试访问输出 pdf 流后,出现错误 "Cannot access a closed stream"。我需要读取内存流才能上传到 Azure blob 存储。

我的代码如下:

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();

HtmlConverter.ConvertToPdf 在转换过程结束后关闭传递给它的流。但是,因为您使用的是 MemoryStream,即使它已关闭,您仍然可以访问其内容。

如果你想再次使用内容作为流,你可以创建一个新的,然后再使用它:

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