在后台从RDLC报告创buildPDF

我正在运行一个月末stream程,并希望自动创build一些当时需要创build的报告。 我正在使用rdlc报告。 有没有办法在后台自动创buildRDLC报告的PDF?

这很容易做到,您可以将报告呈现为PDF格式,并将生成的字节数组作为PDF文件保存在磁盘上。 要在后台执行此操作,这更多的是如何编写应用程序的问题。 你可以创build一个新的线程,或者使用BackgroundWorker(如果这是一个WinForms应用程序)等等。当然,这可能是multithreading问题需要注意的。

Warning[] warnings; string[] streamids; string mimeType; string encoding; string filenameExtension; byte[] bytes = reportViewer.LocalReport.Render( "PDF", null, out mimeType, out encoding, out filenameExtension, out streamids, out warnings); using (FileStream fs = new FileStream("output.pdf", FileMode.Create)) { fs.Write(bytes, 0, bytes.Length); } 

你可以使用下面的代码在后台生成pdf文件,就像在button上点击一样,然后用SaveAs和Cancel选项在brwoser中popup。

 Warning[] warnings; string[] streamIds; string mimeType = string.Empty; string encoding = string.Empty;`enter code here` string extension = string.Empty; DataSet dsGrpSum, dsActPlan, dsProfitDetails, dsProfitSum, dsSumHeader, dsDetailsHeader, dsBudCom = null; enter code here //This is optional if you have parameter then you can add parameters as much as you want ReportParameter[] param = new ReportParameter[5]; param[0] = new ReportParameter("Report_Parameter_0", "1st Para", true); param[1] = new ReportParameter("Report_Parameter_1", "2nd Para", true); param[2] = new ReportParameter("Report_Parameter_2", "3rd Para", true); param[3] = new ReportParameter("Report_Parameter_3", "4th Para", true); param[4] = new ReportParameter("Report_Parameter_4", "5th Para"); DataSet dsData= "Fill this dataset with your data"; ReportDataSource rdsAct = new ReportDataSource("RptActDataSet_usp_GroupAccntDetails", dsActPlan.Tables[0]); ReportViewer viewer = new ReportViewer(); viewer.LocalReport.Refresh(); viewer.LocalReport.ReportPath = "Reports/AcctPlan.rdlc"; //This is your rdlc name. viewer.LocalReport.SetParameters(param); viewer.LocalReport.DataSources.Add(rdsAct); // Add datasource here byte[] bytes = viewer.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings); // byte[] bytes = viewer.LocalReport.Render("Excel", null, out mimeType, out encoding, out extension, out streamIds, out warnings); // Now that you have all the bytes representing the PDF report, buffer it and send it to the client. // System.Web.HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Buffer = true; Response.Clear(); Response.ContentType = mimeType; Response.AddHeader("content-disposition", "attachment; filename= filename" + "." + extension); Response.OutputStream.Write(bytes, 0, bytes.Length); // create the file Response.Flush(); // send it to the client to download Response.End(); 

您无需在任何地方拥有reportViewer控件 – 您可以即时创buildLocalReport:

 var lr = new LocalReport { ReportPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? @"C:\", "Reports", "PathOfMyReport.rdlc"), EnableExternalImages = true }; lr.DataSources.Add(new ReportDataSource("NameOfMyDataSet", model)); string mimeType, encoding, extension; Warning[] warnings; string[] streams; var renderedBytes = lr.Render ( "PDF", @"<DeviceInfo><OutputFormat>PDF</OutputFormat><HumanReadablePDF>False</HumanReadablePDF></DeviceInfo>", out mimeType, out encoding, out extension, out streams, out warnings ); var saveAs = string.Format("{0}.pdf", Path.Combine(tempPath, "myfilename")); var idx = 0; while (File.Exists(saveAs)) { idx++; saveAs = string.Format("{0}.{1}.pdf", Path.Combine(tempPath, "myfilename"), idx); } using (var stream = new FileStream(saveAs, FileMode.Create, FileAccess.Write)) { stream.Write(renderedBytes, 0, renderedBytes.Length); stream.Close(); } lr.Dispose(); 

你也可以添加参数: (lr.SetParameter()) ,处理子报表: (lr.SubreportProcessing+=YourHandler) ,或者你可以想到的任何东西。

下面的代码工作正常与我肯定感谢上述评论。 您可以添加报告查看器并更改visible = false,并在提交button上使用以下代码:

 protected void Button1_Click(object sender, EventArgs e) { Warning[] warnings; string[] streamIds; string mimeType = string.Empty; string encoding = string.Empty; string extension = string.Empty; string HIJRA_TODAY = "01/10/1435"; ReportParameter[] param = new ReportParameter[3]; param[0] = new ReportParameter("CUSTOMER_NUM", CUSTOMER_NUMTBX.Text); param[1] = new ReportParameter("REF_CD", REF_CDTB.Text); param[2] = new ReportParameter("HIJRA_TODAY", HIJRA_TODAY); byte[] bytes = ReportViewer1.LocalReport.Render( "PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings); Response.Buffer = true; Response.Clear(); Response.ContentType = mimeType; Response.AddHeader( "content-disposition", "attachment; filename= filename" + "." + extension); Response.OutputStream.Write(bytes, 0, bytes.Length); // create the file Response.Flush(); // send it to the client to download Response.End(); } 
  private void PDFExport(LocalReport report) { string[] streamids; string minetype; string encod; string fextension; string deviceInfo = "<DeviceInfo>" + " <OutputFormat>EMF</OutputFormat>" + " <PageWidth>8.5in</PageWidth>" + " <PageHeight>11in</PageHeight>" + " <MarginTop>0.25in</MarginTop>" + " <MarginLeft>0.25in</MarginLeft>" + " <MarginRight>0.25in</MarginRight>" + " <MarginBottom>0.25in</MarginBottom>" + "</DeviceInfo>"; Warning[] warnings; byte[] rpbybe = report.Render("PDF", deviceInfo, out minetype, out encod, out fextension, out streamids, out warnings); using(FileStream fs=new FileStream("E:\\newwwfg.pdf",FileMode.Create)) { fs.Write(rpbybe , 0, rpbybe .Length); } 

}