views:

105

answers:

2

I'm working on a WinForms C# 3.0 / .NET 3.5 project involving building some canned reports. One of the requirements of the project is to export to PDF format, and currently doing so to disk is working just fine. The question was raised, however, if it's possible to export the file to a stream and open it directly in the native viewer on the client, skipping entirely writing it to disk. I know that this is somewhat possible with ASP.Net through the use of Response.Write() headers and the like, but I need to try to do this with standard WinForms/WPF, and I've exhausted my own ideas for it. Anybody have any insight on how it might be done, if it's possible at all? Or does the file have to be written to disk first, then opened separately?

+1  A: 

You will need to write the PDF to a temp directory.

The only way to display a PDF from an in-memory stream is to embed a third-party PDF viewer control

SLaks
+1  A: 

I think it is important that you ask yourself what you accomplish if you bypass the file system. Writing to a the standard temporary folder is a perfectly acceptable solution. This is typically how browsers let you view media files and pdfs. I would concentrate on writing a nice cleanup function, that removes the temporary file after it has been create. Also what would be the purpose of exporting to PDF if you are not saving the file?

Under Unix / Linux you could have made a named pipe in the file system. This make sense if you have a huge media stream that you want to buffer between applications. In the PDF case you win very little.

Export to a temporary folder. It is Ok.

Holstebroe
Unfortunately, I'm not at liberty to discuss the project's full scope. With that in mind, I actually asked the same question when the idea was proposed to me. Because of the platforms this code is expected to execute on, resource usage is a concern - as is available disk space. Being able to skip writing to disk would save time and precious system resources.
Clyde