【发布时间】:2018-02-12 10:13:25
【问题描述】:
我刚刚想出了如何将我的 RDL 报告呈现为 pdf 文件,但它目前位于临时文件夹中。下一步应该是在新窗口或选项卡中打开以进行查看。我尝试了许多解决方案,但似乎没有任何效果。
这是我当前的代码:
[HttpGet]
[Route("printDCF")]
public IHttpActionResult printDCF(int controlFormDetailID)
{
try
{
ApiResult apiResult = new ApiResult();
var reportData = ControllerLogic.GetReportData(controlFormDetailID);
generateReport(reportData);
return Ok(apiResult);
}
catch (Exception ex)
{
return InternalServerError(ex);
}
}
public System.Web.Mvc.FileContentResult generateReport(List<DocumentControlFormPrintResult> reportData)
{
string RptPath = HttpContext.Current.Server.MapPath("~/AngularViews/forms/dcf/report/DCF_Report.rdl");
LocalReport rpt = new LocalReport();
rpt.DataSources.Add(new ReportDataSource("DataSet1", reportData));
rpt.ReportPath = RptPath;
string filePath = System.IO.Path.GetTempFileName();
Export(rpt, filePath);
rpt.Dispose();
System.Web.Mvc.FileContentResult result = new System.Web.Mvc.FileContentResult(System.IO.File.ReadAllBytes(filePath), "application/pdf")
{
FileDownloadName = "dcf_print.pdf",
};
return result;
}
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;
}
}
【问题讨论】:
标签: c# asp.net-mvc pdf rdl