我正在开发一个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()
更改为接受字节数组,也可以仅更改wrap it in another stream。编辑
您也许还可以在代码中执行以下操作:
using(MemoryStream ms = new MemoryStream()){
Utils.GeneratePDF(table, lastBook, lastDate, ms);
ms.Position = 0;
Utils.SendMail(email, lastBook + " - " + lastDate, ms);
}
关于c# - 将iTextSharp文档加载到MemoryStream中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15773012/