itext7将html转换为pdf(asp.net core 2.1)得到错误“无法访问封闭的流”

时间:2018-11-30 14:28:44

标签: asp.net-core itext7

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

1 个答案:

答案 0 :(得分:0)

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

如果要将内容再次用作流,则可以创建一个新内容,然后再使用它:

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