加载一个iTextSharp文档到MemoryStream
本文关键字:iTextSharp 文档 MemoryStream 一个 加载 | 更新日期: 2023-09-27 18:07:11
我正在开发一个ASP。. NET应用程序,我必须发送基于在页面上动态创建的表作为电子邮件附件的PDF。我有一个函数创建PDF作为iTextSharp文档并返回它。如果我试着保存这个文档,它工作得很好,但我有一个糟糕的时间试图把它作为流。我已经尝试过好几种方法了,但是我总是在某一点上卡住了。
我试图序列化它,但似乎文档是不可序列化的。然后我试着用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();