itextsharp合并pdf电子邮件

时间:2018-02-27 15:13:32

标签: c# itext

我正在与一些内存流逻辑作斗争。

我有一个接收Id列表的方法。使用它们从网络服务器中提取pdf,并将它们合并为一个pdf。

我想通过电子邮件发送此pdf(仅在内存中工作)

private Stream GetWebReport(string selected_id)
    {          
        var IdLst = selected_id.Split(',').ToList();
        MemoryStream stream = new MemoryStream();
            Document document = new Document();
            PdfCopy pdf = new PdfCopy(document, stream);
            PdfReader reader = null;
            try
            {
                document.Open();


                    foreach (var id in IdLst)
                    {
                        int i = Convert.ToInt32(id);

                        string invoice_url = string.Concat("http://specialurl/", id);
                        var urlpdf = new System.Net.WebClient().OpenRead(invoice_url);
                        reader = new PdfReader(urlpdf);
                        pdf.AddDocument(reader);
                        reader.Close();
                    }


            }
            catch (Exception)
            {

                throw;
            }
            finally
            {

            if (document != null)
                {
                    document.Close();
                }
            }               

            return stream;              

    }

但是当我尝试将结果流用于电子邮件时 var mem = GetWebReport(selected_id);

            mem.Seek(0, SeekOrigin.Begin);
            Attachment att = new Attachment(mem, "Report for you", "application/pdf");

我被告知:

System.ObjectDisposedException: 'Cannot access a closed Stream.' 

所以我确信我的itextsharp逻辑是好的(当我使用文件流时,我得到了正确的结果)。 我确信我传递流的逻辑是错误的

1 个答案:

答案 0 :(得分:2)

使用

PdfCopy pdf = new PdfCopy(document, stream);
pdf.CloseStream = false;

这将在关闭要在别处使用的pdf后保持流打开。