c# - iText 7 - HTML 到 PDF 写入 MemoryStream 而不是文件

标签 c# itext itext7

我正在使用 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");
    }
}

最佳答案

您在 documentpdfWriter 完成在其中创建结果之前干预了 workStream。此外,您干预的意图尚不清楚,首先您从内存流中检索字节,然后将它们写回其中...?

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");
}

顺便说一句,由于您基本上没有对 HtmlConverter.ConvertToDocument 返回的 document 做任何特别的事情,因此您可能可以使用不同的 HtmlConverter 代码中开销更少的方法。

关于c# - iText 7 - HTML 到 PDF 写入 MemoryStream 而不是文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54556348/

相关文章:

c# - 切换 Sql session 状态数据库

java - iText 设置单元格的高度

java - iText 7 Html2Pdf 多次使用相同字体

c# - itext7 - 如何向新页面添加文本?

java - 文本 : Add an image on a header with an absolute position

c# - iText7 以错误的顺序读出行

c# - 如何将 List<Company> 转换为 List<ICompany>

c# - 锚定控件自行脱离窗体

c# - 在特定提交按钮上激活 [Required] ASP.NET MVC 4

java - iText/Flying Saucer PdfStamper 使用 OutputStream