i当前有一个页面显示本地报告(在我的网页上使用报告查看器控件中的参数。我有要求,如果用户希望生成报告,然后通过电子邮件发送电子邮件通过按钮单击或页面加载。我有以下代码,我用来尝试将报告加载到内存流中,然后通过电子邮件发送。电子邮件零件正常工作,但PDF不生成。什么是最好的加载PDF并通过电子邮件发送电子邮件,因为它不是这样的物理文件?
WebClient client = new WebClient();
byte[] bytes = client.DownloadData("http://localhost:51997/ReportDetails.aspx?Report1.rdlc&rs%3aFormat=PDF");
MemoryStream ms = new MemoryStream(bytes);
MailMessage mailObj = new MailMessage("FromAddress", "ToAddress", "header", "body text");
SmtpClient SMTPServer = new SmtpClient("RelayServer");
mailObj.IsBodyHtml = true;
mailObj.Attachments.Add(new Attachment(ms, "Reports.pdf"));
try
{
SMTPServer.Send(mailObj);
}
catch (Exception)
{
throw;
}
我通过将本地报告加载到字节数组中,写入文件流,然后将其加载到内存流中来解决此问题。
。 Warning[] warnings;
string[] streamids;
string mimeType;
string encoding;
string filenameExtension;
byte[] bytes = ReportViewer1.LocalReport.Render(
"PDF", null, out mimeType, out encoding, out filenameExtension,
out streamids, out warnings);
string filename = Path.Combine(Path.GetTempPath(), "Report2.rdlc");
using (var fs = new FileStream(filename, FileMode.Create))
{
fs.Write(bytes, 0, bytes.Length);
fs.Close();
}
加载到内存流:
MemoryStream ms = new MemoryStream(bytes);
然后发送作为附件:
MailMessage mailObj = new MailMessage("From", "To", "header", "body");
SmtpClient SMTPServer = new SmtpClient("relayServer");
mailObj.IsBodyHtml = true;
mailObj.Attachments.Add(new Attachment(ms, "report.pdf"));
try
{
SMTPServer.Send(mailObj);
}
catch (Exception)
{
throw;
}