65.9K
CodeProject is changing. Read more.
Home

Generate a PDF File using CrystalReports

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.35/5 (9 votes)

Nov 14, 2006

viewsIcon

57160

Very simple code to generate a PDF document using the CrystalReports engine.

Introduction

Some times we need to create a Portable Document Format and we are always trying to get fancy PDF converters. Here is a simple way to do it, just using the CrystalReports engine built-in export method.

Using the code

You need to create a CrystalReports reprt, and define the data connection, data set, and the layout. Suppose we have created the StrongTypedReport report. We would call the following CrearPDF method, passing the DataSet filled with the data to be shown, along with the file name of the PDF to be output:

/// <summary>
/// Create a PDF file from a CrystalReport report.
/// </summary>
/// <param name="ds">DataSet, same type used in the report</param>
/// <param name="nombrearchivopdf">PDF file
///            output archive name</param>
public void CrearPDF(DataSet ds, string nombrearchivopdf)
{         
   StrongTypedReport cr = new StrongTypedReport();      
   
   // Set the report DataSet   
   cr.SetDataSource(ds);   
   
   // Export the report to a Stream, in PDF format   
   Stream input = cr.ExportToStream(
     CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);   
   // Open the output file Stream    
   FileStream output = new FileStream(nombrearchivopdf, 
                                      FileMode.Create);   
   
   // Copy the buffer Stream to the ouput file   
   // We avoid the use of cr.Export, because crystal report   
   // do not inherits the current Thread permission   
   const int size = 4096; 
   byte[] bytes = new byte[4096]; 
   int numBytes;            
   
   while((numBytes = input.Read(bytes, 0, size)) > 0)         
      output.Write(bytes, 0, numBytes);   
   
   // Close the ouput file Stream.
   output.Close();
}

Points of Interest

That's it! It works for me! The Stream input and output buffering used could be useful if you wish to redirect it to the Response Stream object, and let the browser directly show it, or let the user download it.

History

  • Nov. 13, 2006 - First version.