【问题标题】:iText 7 - HTML to PDF write to MemoryStream instead of fileiText 7 - HTML 到 PDF 写入 MemoryStream 而不是文件
【发布时间】:2019-06-30 13:36:23
【问题描述】:

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

【问题讨论】:

    标签: c# itext itext7


    【解决方案1】:

    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 方法,而代码中的开销更少。

    【讨论】:

    • 按照这个方法有没有办法设置文档页面大小?
    • 我想通过相应地设置 css 媒体属性。
    【解决方案2】:

    通常这种方法有效

    using (var ms = new MemoryStream())
    {
        //yourStream.Seek(0, SeekOrigin.Begin)
        yourStream.CopyTo(ms);
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      • 2020-12-08
      • 2022-10-13
      • 1970-01-01
      相关资源
      最近更新 更多