我正在使用iText 7(特别是HtmlConverter.ConvertToDocument
方法)将HTML转换为PDF。问题是,我真的不希望在服务器上创建PDF文件,而是希望在内存中进行所有操作,然后将其发送到用户浏览器以便他们下载。
任何人都可以向我展示一个有关如何使用该库的示例,而不是将文件写到MemoryStream上,这样我可以将其直接发送到浏览器吗?
我一直在寻找示例,我似乎可以找到的所有引用文件输出的示例。
我尝试了以下操作,但是不断收到有关无法访问封闭的内存流的错误。
public FileStreamResult pdf() {
using (var workStream = new MemoryStream())
using (var pdfWriter = new PdfWriter(workStream)) {
pdfWriter.SetCloseStream(false);
using (var document = HtmlConverter.ConvertToDocument(html, pdfWriter)) {
//Returns the written-to MemoryStream containing the PDF.
byte[] byteInfo = workStream.ToArray();
workStream.Write(byteInfo, 0, byteInfo.Length);
workStream.Position = 0;
return new FileStreamResult(workStream, "application/pdf");
}
//return new FileStreamResult(workStream, "application/pdf");
}
}
答案 0 :(得分:1)
通常这种方法有效
using (var ms = new MemoryStream())
{
//yourStream.Seek(0, SeekOrigin.Begin)
yourStream.CopyTo(ms);
}
答案 1 :(得分:1)
在workStream
和document
完成在其中创建结果之前,您与pdfWriter
进行了干预。此外,干预的意图还不清楚,首先从内存流中检索字节,然后再将其写回内存中……?
public FileStreamResult pdf()
{
var workStream = new MemoryStream())
using (var pdfWriter = new PdfWriter(workStream))
{
pdfWriter.SetCloseStream(false);
using (var document = HtmlConverter.ConvertToDocument(html, pdfWriter))
{
}
}
workStream.Position = 0;
return new FileStreamResult(workStream, "application/pdf");
}
顺便说一句,由于您实际上对document
返回的HtmlConverter.ConvertToDocument
并没有什么特别的事情,因此您可以使用其他HtmlConverter
方法,而代码开销更少。>