In yesterday’s post, I demonstrated how to generate a SQL Server Reporting Services report without having to have SQL Server Reporting Services. The sample application used the Microsoft Report Viewer control to display the report. A common need in business is to generate documents, such as PDFs, that will later be archived. It turns out if you are using a report viewer control, this is easy to do programmatically.
First, you need to add one using statement to the top of your class, in addition to the others that were added yesterday.
Next, we only need a few lines of code to generate the PDF.
byte bytes = reportViewer1.LocalReport.Render(
"PDF", null, out mimeType, out encoding, out extension,
out streamids, out warnings);
FileStream fs = new FileStream(@"D:\ReportOutput.pdf", FileMode.Create);
fs.Write(bytes, 0, bytes.Length);
This code snippet came right from the MSDN Books on Line, and is pretty simple. I could have selected another format by changing the first value passed into the Render method, for example “EXCEL” would have rendered it as a Microsoft Excel document.
In the code samples I placed the above sample in it’s own button, but I could just have easily placed it under one of the other demo buttons.
This ability brings up some interesting possibilities. For example, the report viewer control does not have to be visible to the user in order for this to work. Thus you could create an application that every night generated a series of reports and saved them as PDFs to some central location, such as a web server or document control server. All the user (assuming one was around) would have to see is a progress bar, the reports themselves never get displayed.