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();
我安装了 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();