Создайте файл PDF как system.net.mail.attachment, используя поток памяти - PullRequest
0 голосов
/ 25 ноября 2011

У меня есть функция, которая принимает строку и генерирует вложение электронной почты на основе этой строки.Он отлично работает для HTML-страниц, текстовых документов и т. Д., Но я не могу получить его для создания PDF-файла.

Код:

Public Sub SendMail _
( _
ByVal strFrom As String _
, ByVal strTo As String _
 , ByVal strSubject As String, ByVal strBody As String _
 , Optional ByVal attachment As String = "" _
 , Optional ByVal filename As String = "Attachment.HTML" _
)

    Dim sendMail As New SmtpClient
    Dim mail As New MailMessage(strFrom, strTo)
    Dim userToken As New Object


        mail.Subject = strSubject
        mail.Body = strBody

        mail.IsBodyHtml = True


        Using MemoryStream = New MemoryStream

            If attachment.Length <> 0 Then
                        Dim data As Byte() = Encoding.ASCII.GetBytes(attachment)
                        MemoryStream.Write(data, 0, data.Length)
                        MemoryStream.Seek(0, SeekOrigin.Begin)
                        MemoryStream.Position = 0

                        Dim content As New ContentType()
                        content.MediaType = MediaTypeNames.Application.Octet
                        content.Name = filename

                        Dim newAttach As New Attachment(MemoryStream, content)
                        mail.Attachments.Add(newAttach)
            End If


            sendMail.DeliveryMethod = SmtpDeliveryMethod.Network
            sendMail.Host = "SERVER"
            sendMail.UseDefaultCredentials = False
            sendMail.Credentials = New System.Net.NetworkCredential("UN", "PW")

            sendMail.Send(mail)


        End Using

Если я сохраняю вложение файла как Whever.PDF, я получаю сообщение об ошибке, что оно не было правильно закодировано.Не уверен, что мне нужно сделать, чтобы работать с PDF, я попытался найти в Google, но не нашел ничего, что мне помогло.

EDITED :

Я использую динамику данныхактивные отчеты PDF-экспортер для создания PDF

dim pdf as new datadynamics.activereports.export.pdf.pdfexport
sendmail("from@", "to@", "test", "test", pdf.tostring, "pdf.pdf")

Мне кажется, проблема в том, что я преобразовываю PDF в строку, а затем пытаюсь преобразовать его обратно в PDF и прикрепить к электронному письму, но яне уверен на 100%.

Спасибо.

1 Ответ

1 голос
/ 25 ноября 2011

Я не знаком с этой технологией отчетности, но согласно документации вы должны использовать что-то вроде этого:

DataDynamics.ActiveReports.Export.Pdf.PdfExport p = new DataDynamics.ActiveReports.Export.Pdf.PdfExport();
string tmp = Path.GetTempFileName();
p.Export(rpt.Document, tmp, "1-10000");
byte[] pdf = File.ReadAllBytes(tmp);
File.Delete(tmp);

и сборка MemoryStream из pdf массива или добавление вложения из tmp файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...