我安装了iText7.pdfhtml并使用类iText.Html2pdf.HtmlConverter将html字符串转换为pdf。尝试访问输出pdf流后,出现错误“无法访问关闭的流”。我需要读取内存流才能上传到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();
答案 0 :(得分:0)
HtmlConverter.ConvertToPdf
关闭转换过程结束后传递给它的流。但是,由于您使用的是MemoryStream
,因此即使关闭了内容,您仍然可以访问其内容。
如果要将内容再次用作流,则可以创建一个新内容,然后再使用它:
MemoryStream pdfStream = new MemoryStream(stream.ToArray());
await blockBlob.UploadFromStreamAsync(pdfStream);
pdfStream.Dispose();