在 Asp.net MVC 中以 pdf 格式查看 RDLC 报告

View RDLC Report as pdf in Asp.net MVC

我最近两天遇到了问题。我试图在没有报告查看器的情况下将 rdlc 报告查看为 pdf。我使用以下代码将 rdlc 导出为 pdf...

public string Export(LocalReport rpt, string filePath)
    {
        string ack = "";
        try
        {                
            Warning[] warnings;
            string[] streamids;
            string mimeType;
            string encoding;
            string extension;

            byte[] bytes = rpt.Render("PDF", null, out mimeType, out encoding, out extension, out streamids, out warnings);
            using (FileStream stream = File.OpenWrite(filePath))
            {
                stream.Write(bytes, 0, bytes.Length);
            }
            return ack;
        }
        catch(Exception ex)
        {
            ack = ex.InnerException.Message;
            return ack;
        }           
    }

pdf文件导出到User->AppData->Temp

            string filePath = System.IO.Path.GetTempFileName();
            string ack = Export(rpt, Server.MapPath("~/Reports/Mymun_Lab/ComparisonStudy.rdlc"));                
            System.Diagnostics.Process.Start(filePath);

我想将此 pdf 文件渲染到客户端 PC。

这段代码在我的本地机器上运行良好。但是当我将其发布到 IIS 服务器和 运行 以尝试将导出的 pdf 文件发送到客户端 PC 时,没有成功。我该如何解决这个问题。谁能帮帮我

提前致谢...

最后,我找到了一个关于在 asp.net MVC 中将 RDLC 报告查看为 pdf 的解决方案。解决方案如下....

public FileResult ViewReport()
    {            
        string RptPath = Server.MapPath("~/Reports/Mymun_Lab/ComparisonStudy.rdlc");                  
        Microsoft.Reporting.WebForms.LocalReport rpt = new Microsoft.Reporting.WebForms.LocalReport(); 

        /* Bind Here Report Data Set */

        rpt.ReportPath = RptPath;
        string filePath = System.IO.Path.GetTempFileName();               
        Export(rpt, filePath);
        //CLOSE REPORT OBJECT           
        rpt.Dispose();
        return File(filePath, "application/pdf");
    } 

我使用以下方法从 RDLC 生成 pdf....

public string Export(LocalReport rpt, string filePath)
{
    string ack = "";
    try
    {                
        Warning[] warnings;
        string[] streamids;
        string mimeType;
        string encoding;
        string extension;

        byte[] bytes = rpt.Render("PDF", null, out mimeType, out encoding, out extension, out streamids, out warnings);
        using (FileStream stream = File.OpenWrite(filePath))
        {
            stream.Write(bytes, 0, bytes.Length);
        }
        return ack;
    }
    catch(Exception ex)
    {
        ack = ex.InnerException.Message;
        return ack;
    }           
}
[HttpPost]
public async Task<FileResult> DownloadReport(string id, string firstName, string lastName)
{
    var result = await accountRepository.GetUserLogInDetailsByID(id);

    //string RptPath = Server.MapPath("~/RDLC/rptUserLogInDetails.rdlc");
    string RptPath = Server.MapPath("~/RDLC/rptUserLogInDetails.rdlc");

    ReportViewer rv = new ReportViewer();

    ReportDataSource rds = new ReportDataSource();
    rds.Name = "DataSet1";
    rds.Value = result;

    string companyName = WebConfigurationManager.AppSettings["CompanyName"];

    ReportParameter[] parameters = new ReportParameter[2];
    parameters[0] = new ReportParameter("username", firstName + " " + lastName);
    parameters[1] = new ReportParameter("companyName", companyName);

    //ReportViewer rv = new Microsoft.Reporting.WebForms.ReportViewer();
    rv.ProcessingMode = ProcessingMode.Local;
    rv.LocalReport.ReportPath = RptPath;

    // Add the new report datasource to the report.
    rv.LocalReport.DataSources.Add(rds);
    rv.LocalReport.EnableHyperlinks = true;

    rv.LocalReport.SetParameters(parameters);

    rv.LocalReport.Refresh();

    byte[] streamBytes = null;
    string mimeType = "";
    string encoding = "";
    string filenameExtension = "";
    string[] streamids = null;
    Warning[] warnings = null;

    streamBytes = rv.LocalReport.Render("PDF", null, out mimeType, out encoding, out filenameExtension, out streamids, out warnings);

    string fileName = "LogInDetails-" + firstName + lastName + ".pdf";

    // This will download the pdf file
    //return File(streamBytes, mimeType, fileName);

    //This will open directly the pdf file
    return File(streamBytes, "application/pdf");
}