iTextSharp - Отправка PDF в оперативной памяти в почтовом вложении

Это может быть полезно:

div {
    position: relative;
    width: 200px;
    height: 200px;
}
img {
    position: absolute;
    top: 0;
    bottom: 0;
    margin: auto;
}
.image {
    min-height: 50px
}

Ссылка: http://www.student.oulu.fi/~laurirai/www/css/middle/

97
задан Gus Cavalcanti 28 July 2009 в 22:19
поделиться

4 ответа

Вы пробовали:

PdfWriter writer = PdfWriter.GetInstance(doc, memoryStream);

// Build pdf code...

writer.CloseStream = false;
doc.Close();

// Build email

memoryStream.Position = 0;
mm.Attachments.Add(new Attachment(memoryStream, "test.pdf"));

Если мне не изменяет память, это решало аналогичную проблему в предыдущем проекте.

См. http://forums.asp.net /t/1093198.aspx

79
ответ дан 24 November 2019 в 05:30
поделиться

Можете ли вы сбросить документ или поток памяти, а затем закрыть его после прикрепления?

3
ответ дан 24 November 2019 в 05:30
поделиться

Я попробовал код, опубликованный brianng , и он сработал. Просто измените верхнюю часть кода на это:

var doc = new Document();
MemoryStream memoryStream = new MemoryStream();
PdfWriter writer = PdfWriter.GetInstance(doc, memoryStream); //capture the object
doc.Open();
doc.Add(new Paragraph("First Paragraph"));
doc.Add(new Paragraph("Second Paragraph"));
writer.CloseStream = false; //set the closestream property
doc.close(); //close the document without closing the underlying stream
memoryStream.Position = 0;

/* remainder of your code stays the same*/
18
ответ дан 24 November 2019 в 05:30
поделиться

Возможно, вызов doc.Close () Удаляет базовый поток. Попробуйте удалить doc.Close () и вместо этой строки установите memoryStream.Position = 0;

В качестве альтернативы вы можете использовать временный файл:

var tempFilePath = Path.GetTempFileName();

try 
{           
    var doc = new Document();

    PdfWriter.GetInstance(doc, File.OpenWrite(tempFilePath));
    doc.Open();
    doc.Add(new Paragraph("First Paragraph"));
    doc.Add(new Paragraph("Second Paragraph"));

    doc.Close();

    MailMessage mm = new MailMessage("username@gmail.com", "username@gmail.com")
    {
        Subject = "subject",
        IsBodyHtml = true,
        Body = "body"
    };

    mm.Attachments.Add(new Attachment(tempFilePath, "test.pdf"));
    SmtpClient smtp = new SmtpClient
    {
        Host = "smtp.gmail.com",
        Port = 587,
        EnableSsl = true,
        Credentials = new NetworkCredential("username@gmail.com", "my_password")
    };

    smtp.Send(mm);
}
finally
{
    File.Delete(tempFilePath);
}
3
ответ дан 24 November 2019 в 05:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: