将报告从报告查看器导出到内存流,然后通过电子邮件报告



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;
        }

相关内容

最新更新