|
|
       
Requirements
To export a report, you can use the
RenderReport
method of the ReportProcessor class.
This method converts the contents of the report to a byte array in the specified format, which you can then use
with other classes such as
MemoryStream
or FileStream
.
The RenderReport
method has two overloads, the first is used when rendering a single stream, the second when rendering multiple streams. The
available extensions used as first argument of the RenderReport
method are listed in the Rendering Extensions article.
Exporting a report to a single document format:
Some formats (MHTML, PDF, XLS(X), RTF, DOCX, PPTX, CSV) produce a single document which is handled by the first overload of the
RenderReport:
Example
CopyC# Telerik.Reporting.Processing.ReportProcessor reportProcessor = new Telerik.Reporting.Processing.ReportProcessor();
System.Collections.Hashtable deviceInfo = new System.Collections.Hashtable();
Telerik.Reporting.Processing.RenderingResult result = reportProcessor.RenderReport("PDF", report1, deviceInfo);
string fileName = result.DocumentName + "." + result.Extension;
const string path = @"C:\";
string filePath = System.IO.Path.Combine(path, fileName);
using (System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Create))
{
fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
}
CopyVB.NET Dim reportProcessor As New Telerik.Reporting.Processing.ReportProcessor()
Dim deviceInfo As New System.Collections.Hashtable()
Dim result As Telerik.Reporting.Processing.RenderingResult = reportProcessor.RenderReport("PDF", report1, deviceInfo)
Dim fileName As String = result.DocumentName + "." + result.Extension
Const path As String = "C:\"
Dim filePath As String = System.IO.Path.Combine(path, fileName)
Using fs As New System.IO.FileStream(filePath, System.IO.FileMode.Create)
fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length)
End Using
Note | |
When you export programmatically to XPS, you should use a separate STA thread which is
required by the underlying WPF UI elements that we use to create the XAML representation of the report.
|
Exporting a report to a multi document format:
Some formats produce multiple files, for example HTML outputs all pages and related resources (images)
in separate streams. In order to render a report in a non-single document format (HTML and IMAGE except TIFF) one should use
the second RenderReport
overload that accepts a CreateStream callback. For this example we're going to render to JPEG, but you can
render a report in all graphic formats that GDI+ supports natively - this includes BMP, GIF, JPEG,
PNG, TIFF and metafile (EMF). The Windows Forms Report Viewer uses internally
metafile for rendering the reports for viewing, and
TIFF for exporting. The rest of the formats are available only through code using the ReportProcessor.Render method
where you should specify "IMAGE" as export format and the additional output format that is the actual graphic
format - BMP, GIF, JPEG. Here is an example that renders a report as a JPEG image:
Example
CopyC# System.Collections.Generic.List<System.IO.Stream> streams = new System.Collections.Generic.List<System.IO.Stream>();
public bool RenderReport(IReportDocument report)
{
Telerik.Reporting.Processing.ReportProcessor reportProcessor = new Telerik.Reporting.Processing.ReportProcessor();
string documentName = "";
System.Collections.Hashtable deviceInfo = new System.Collections.Hashtable();
deviceInfo["OutputFormat"] = "JPEG";
bool result = reportProcessor.RenderReport("IMAGE", report, deviceInfo, this.CreateStream, out documentName);
this.CloseStreams();
return result;
}
void CloseStreams()
{
foreach (System.IO.Stream stream in this.streams)
{
stream.Close();
}
this.streams.Clear();
}
System.IO.Stream CreateStream(string name, string extension, System.Text.Encoding encoding, string mimeType)
{
const string path = @"C:\";
string filePath = System.IO.Path.Combine(path, name + "." + extension);
System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Create);
this.streams.Add(fs);
return fs;
}
CopyVB.NET Dim streams As New System.Collections.Generic.List(Of System.IO.Stream)()
Public Function RenderReport(report As IReportDocument) As Boolean
Dim reportProcessor As New Telerik.Reporting.Processing.ReportProcessor()
Dim documentName As String = ""
Dim deviceInfo As New System.Collections.Hashtable()
deviceInfo("OutputFormat") = "JPEG"
Dim result As Boolean = reportProcessor.RenderReport("IMAGE", report, deviceInfo, AddressOf Me.CreateStream, documentName)
Me.CloseStreams()
Return result
End Function
Private Sub CloseStreams()
For Each stream As System.IO.Stream In Me.streams
stream.Close()
Next
Me.streams.Clear()
End Sub
Private Function CreateStream(name As String, extension As String, encoding As System.Text.Encoding, mimeType As String) As System.IO.Stream
Const path As String = "C:\"
Dim filePath As String = System.IO.Path.Combine(path, name + "." + extension)
Dim fs As New System.IO.FileStream(filePath, System.IO.FileMode.Create)
Me.streams.Add(fs)
Return fs
End Function
See Also
|