Hola gente!
Hace unos días tuve la necesidad de generar un PDF en C# a través de un Reporte RDLC (Reporting Services) y al mismo tiempo enviarlo por correo electrónico sin necesidad de mostrar el preview del mismo.
Primero que nada se tiene que usar la clase LocalReport para poder generarlo y luego cargar la ruta de donde se encuentre nuestro archivo .rdlc.
using (var viewer = new LocalReport()) { // tu código genial aquí }
En mi caso, yo lo tengo en una carpeta que luego le indico a Visual Studio que debe copiar dicho archivo en la salida del ejecutable, marcándolo como «Copiar Siempre».
Luego se invoca al método Render y se le pasa como parámetro el tipo de formato que queremos exportar nuestro reporte, en este caso PDF.
viewer.ReportPath = "./Reports/DemoReporte.rdlc"; var bytes = viewer.Render("PDF");
Luego creamos el contenido del correo electrónico con la clase EmailMessage y en la propiedad Attachments agregamos el arreglo de bytes con la ayuda de la clase MemoryStream, ya que justamente la clase Attachment requiere de un Stream y en el segun parámetro especificamos el nombre del archivo adjunto.
var correo = new MailMessage { From = new MailAddress(emailFrom, aliasfrom) }; correo.To.Add(new MailAddress(emailTo, aliasTo)); correo.Subject = "Reporte como Correo"; correo.Attachments.Add(new Attachment(new MemoryStream(bytes), "Reporte.pdf"));
Finalmente configuramos el SmtpClient para enviar el correo y listo.
using (var smtpClient = new SmtpClient(host)) { if (puertoSeguro) { smtpClient.EnableSsl = true; smtpClient.Port = 587; } smtpClient.Credentials = new System.Net.NetworkCredential(emailFrom, GetClave()); Console.WriteLine("Espere unos segundos...."); smtpClient.Send(correo); } Console.WriteLine("Correo enviado");
Así debería quedar el archivo adjunto.
He creado un pequeño proyecto de Consola que lo pueden descargar de mi repositorio de GitHub.
Espero que les sirva.
Saludos.
Excelente Erick, lo maximo
Hola,
Por que razón me envía el archivo pdf en blanco ?
al asignarle el DataSource le asigno un listado de objetos.
Consulta,
Por que motivo mi programa puede estar enviando el archivo pdf en blanco ?
Saludos, buen post.
En donde se ejecuta el codigo que genera el PDF? En un servidor IIS comun y silvestre o en Azure?
Perdón, replique el mensaje…
El codigo lo ejecuto en un servidor común y silvestre como mencionas. O quizás estoy mal, pero como referencia lo ejecuto en un evento click del codebehind de un archivo webform
Erick, excelente post!
Gracias Percy
Esto es lo más genial que veré esta semana de hecho, muchas gracias justamente buscaba algo así para mi proyecto.
Que excelente saber que te haya servido 😀