In this tutorial, I'll show you how to Save RDLC Report as PDF at Run Time in C#. This is easy to do, you can render your report as a PDF, then save the byte array as a PDF file on disk.
public class ReportGenerator
{
public static Task Pdf(InvoiceInfo obj, string filePath)
{
return Task.Run(() =>
{
LocalReport report = new LocalReport() { EnableExternalImages = true };
report.ReportPath = System.Web.Hosting.HostingEnvironment.MapPath($"~/bin/Reports/{obj.TemplateFileName}");
ReportParameter pInvoiceNumber = new ReportParameter("pInvoiceNumber", obj.InvoiceNumber);
ReportParameter pCompanyName = new ReportParameter("pCompanyName", obj.CompanyName);
ReportParameter pCompanyAddress = new ReportParameter("pCompanyAddress", obj.CompanyAddress);
ReportParameter pCompanyPhone = new ReportParameter("pCompanyPhone", obj.CompanyPhone);
ReportParameter pCompanyFax = new ReportParameter("pCompanyFax", obj.CompanyFax);
ReportParameter pCompanyTaxId = new ReportParameter("pCompanyTaxId", obj.CompanyTaxId);
ReportParameter pBuyerName = new ReportParameter("pBuyerName", obj.BuyerName);
ReportParameter pBuyerAddress = new ReportParameter("pBuyerAddress", obj.BuyerAddress);
ReportParameter pBuyerTaxId = new ReportParameter("pBuyerTaxId", obj.BuyerTaxId);
ReportParameter pPaymentMethod = new ReportParameter("pPaymentMethod", obj.PaymentMethod);
ReportParameter pInvoiceDate = new ReportParameter("pInvoiceDate", obj.InvoiceDate);
report.SetParameters(new ReportParameter[] { pInvoiceNumber, pCompanyName, pCompanyAddress, pCompanyPhone, pCompanyFax, pCompanyTaxId, pBuyerName, pBuyerAddress, pBuyerTaxId, pPaymentMethod, pInvoiceDate });
ReportDataSource datasource = new ReportDataSource() { Name = "DataSource", Value = obj.InvoiceDetails };
report.DataSources.Add(datasource);
report.Refresh();
string deviceInfo = "<DeviceInfo><OutputFormat>PDF</OutputFormat><PageWidth>8.27in</PageWidth><PageHeight>11.69in</PageHeight><MarginTop>0.25in</MarginTop><MarginLeft>0.4in</MarginLeft><MarginRight>0in</MarginRight><MarginBottom>0.25in</MarginBottom></DeviceInfo>";
string mimeType;
string encoding;
string fileNameExtension;
Warning[] warnings;
string[] streams;
byte[] renderedBytes = report.Render("PDF", deviceInfo, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);
using (FileStream fs = new FileStream(filePath, FileMode.Create))
{
fs.Write(renderedBytes, 0, renderedBytes.Length);
}
});
}
}
We'll create a task to handle creating and saving your rdlc report to a pdf file. You can create a task instance in many different ways. The most common approach is to call the static Run method. The Run method provides a simple way to start a task using default values and does not require additional parameters.