繁体   English   中英

将iTextSharp文档加载到MemoryStream中

[英]Loading an iTextSharp Document into MemoryStream

我正在开发一个ASP.NET应用程序,在该应用程序中,我必须基于在页面上动态创建的表发送PDF作为电子邮件的附件。 因此,我有一个将PDF创建为iTextSharp文档并返回它的函数。 如果我只是尝试保存此文档,则可以正常工作,但是我很难将其设置为Stream。 我已经尝试过几件事,但是总会遇到困难。

我试图对其进行序列化,但是似乎Document无法序列化。 然后,我尝试使用PdfCopy,但我不知道如何针对具体问题来使用它。

现在的代码是这样的:

//Table,string,string,Stream
//This document returns fine
Document document = Utils.GeneratePDF(table, lastBook, lastDate, Response.OutputStream);

using (MemoryStream ms = new MemoryStream())
{
    PdfCopy copy = new PdfCopy(document, ms);
    //Need something here to copy from one to another! OR to make document as Stream      
    ms.Position = 0;
    //Email, Subject, Stream
    Utils.SendMail(email, lastBook + " - " + lastDate, ms);
}

尽量避免传递本地iTextSharp对象。 传递流,文件或字节。 我现在没有IDE,但您应该可以执行以下操作:

byte[] Bytes;
using(MemoryStream ms = new MemoryStream()){
    Utils.GeneratePDF(table, lastBook, lastDate, ms);
    Bytes = ms.ToArray();
}

然后,您可以将Utils.SendMail()更改为接受字节数组,也可以将其包装在另一个流中

编辑

也许还可以在代码中执行以下操作:

using(MemoryStream ms = new MemoryStream()){
    Utils.GeneratePDF(table, lastBook, lastDate, ms);
    ms.Position = 0;
    Utils.SendMail(email, lastBook + " - " + lastDate, ms);
}

我过去通过执行以下操作来做到这一点:

        using (Document doc = new Document())
        {
            MemoryStream msPDFData = new MemoryStream();
            PdfWriter writer = PdfWriter.GetInstance(doc, msPDFData);
            doc.Open();
            doc.Add(new Paragraph("I'm a pdf!");
        }

如果您需要访问原始数据,也可以执行

byte[] pdfData = msPDFData.ToArray();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM