0

这是我的代码块。它编译得很好,当我触发事件时,我收到了电子邮件,但是我在打开时收到此错误电子邮件附件错误(Acrobat 无法打开“Att00002.pdf”,因为它不是受支持的文件类型,或者因为文件已损坏(例如,它作为电子邮件附件发送并且未正确解码。)

string agentName = "My Name";            
MemoryStream _output = new MemoryStream();
            PdfReader reader = new PdfReader("/pdf/Agent/Specialist_Certificate.pdf");
            using (PdfStamper stamper = new PdfStamper(reader, _output))
            {
                AcroFields fields = stamper.AcroFields;
            // set form fields
            fields.SetField("FIELD_AGENT_NAME", agentName);
            fields.SetField("FIELD_DATE", AvalonDate);

            // flatten form fields and close document
            stamper.FormFlattening = true;
            SendEmail(_output);
            DownloadAsPDF(_output);
            stamper.Close();
        }

private void SendEmail(MemoryStream ms)
{
    Attachment attach = new Attachment(ms, new System.Net.Mime.ContentType("application/pdf"));
    EmailHelper.SendEMail("myemail@myemail.com", "mjones@globusfamily.com", null, "", "Avalon Cert", "Hope this works", EmailHelper.EmailFormat.Html,attach);
}

已编辑 *************************************

        using (MemoryStream _output = new MemoryStream())
        {
            using (PdfStamper stamper = new PdfStamper(reader, _output))
            {
                AcroFields fields = stamper.AcroFields;
                // set form fields
                fields.SetField("FIELD_AGENT_NAME", agentName);
                fields.SetField("FIELD_DATE", AvalonDate);

                // flatten form fields and close document
                stamper.FormFlattening = true;
            }
            SendEmail(_output);
        }
4

1 回答 1

3

你在stamper.close()里面打电话using (PdfStamper stamper = new PdfStamper(reader, _output))。除了手动关闭()之外,它using会在退出时自动关闭压模,因此从技术上讲,压模试图关闭两次。正因为如此,它也试图MemoryStream不止一次地关闭。这就是异常的来源。

我会为您MemoryStreamPdfStamper(修改并取自:Getting PdfStamper to work with MemoryStreams (c#, itextsharp))使用答案中的技术:

using (MemoryStream _output = new MemoryStream()) {
  using (PdfStamper stamper = new PdfStamper(reader, _output)) {
// do stuff      
  }    
}
于 2015-10-13T20:48:19.823 回答