I'm working on a project at the moment where we need to display a number of reports. The reports themselves are dished up via SQL Reporting Services. Since the application is a Windows Forms application we really wanted to keep the users in the application instead of popping browsers all over the place.

Our first thought was to embed IE inside the Windows Forms application which worked quite well, except the user experience wasn't quite right for us. You see the problem was that if the user wanted to print out the report they could either use IE - which resulted in some ugly headers and footers on the page which looked less than professional, or the user selecting export to PDF and spinning off another window (why bother embedding if you are going to do that).

The solution was to initiate the download of the PDF directly from the Windows Forms application and embed Adobe Acrobat inside our application - this had several neat benefits - first we keep our in-application experience, and second, we get a whole series of tool-bars for free which allow things like searching, printing, saving and e-mail the document - as well as the typical zoom type functionality.

All in all a fairly good solution, although I don't think this approach is unique by any stretch of the imagination. Here is some sample code which shows a reasonably nice streaming effect combined with a transition to the display of the document.

The reason I prefer this over something like Crystal is that it helps maintain the clear seperation between the client and server where the server is autonomous and completely abstracts the database.