To save a report as image formats, ReportConverter requires a data source for the report, a FileStream and ConvertArgs. ConvertArgs will contain a BitmapGraphicsProvider object and a ParameterValue object which will contain the values for report parameters. All the steps can be summarized as follows.
- Set ConvertArgs
- Set ConnectionProperties
- Set DataSourceReportItem
- Convert report (RDL or RDLC) to image format
Setting ConvertArgs
To set ConvertArgs object, we need a BitmapGraphicsProvider object and a ParameterValue object. BitmapGraphicsProvider object will decide the size of the image and the converted images can also be retrieved from this object.
ParameterValue object will hold the list of report parameters. After providing the values for report parameters to ParameterValue object and setting the size of the image, we will assign both these objects to ConvertArgs object.
Example
[C#]
// Create image exporter and specify page image size
BitmapGraphicsProvider bitmapGraphicsProvider = new BitmapGraphicsProvider(new Size(800, 1200));
ConvertArgs convertArgs = new ConvertArgs();
//convertArgs.ReportGraphics = bitmapGraphics;
convertArgs.GraphicsProvider = bitmapGraphicsProvider;
ParameterValue parameterValue = new ParameterValue(@"SalesOrderNumber");
// Adding order number as report parameter
parameterValue.Values.Add(@"SO50750");
convertArgs.ParameterValues.Add(parameterValue);
[VB]
' Create image exporter and specify page image size
Dim bitmapGraphicsProvider As BitmapGraphicsProvider = New BitmapGraphicsProvider(New Size(800, 1200))
Dim convertArgs As ConvertArgs = New ConvertArgs()
'convertArgs.ReportGraphics = bitmapGraphics;
convertArgs.GraphicsProvider = bitmapGraphicsProvider
Dim parameterValue As ParameterValue = New ParameterValue("SalesOrderNumber")
' Adding order number as report parameter
parameterValue.Values.Add("SO50750")
convertArgs.ParameterValues.Add(parameterValue)
Setting Connection Properties
To set ConnectionProperties property of a DataSourceReportItem object, we need a ConnectionProperties object which will hold ConnectionString and other connection related properties.
Example
[C#]
ConnectionProperties connectionProperties = new ConnectionProperties();
connectionProperties.ConnectionString = "Data Source=\"(local)\";Initial Catalog=AdventureWorks;integrated security = true;";
connectionProperties.IntegratedSecurity = true;
[VB]
Dim connectionProperties As ConnectionProperties = New ConnectionProperties()
connectionProperties.ConnectionString = "Data Source=""(local)"";Initial Catalog=AdventureWorks;integrated security = true;"
connectionProperties.IntegratedSecurity = True
Setting DataSource for Report
To set DataSource of a report, we need DataSourceReportItem object. Create this object and set its Name and ConnectionProperties properties.
Example
[C#]
// Create connection properties for Adventure Works database
ConnectionProperties connectionProperties = new ConnectionProperties();
connectionProperties.ConnectionString = "Data Source=\"(local)\";Initial Catalog=AdventureWorks;integrated security = true;";
connectionProperties.IntegratedSecurity = true;
// Specify data source for Adventure Works
DataSourceReportItem dataSourceReportItem = new DataSourceReportItem();
dataSourceReportItem.ConnectionProperties = connectionProperties;
dataSourceReportItem.Name = @"AdventureWorks";
[VB]
' Create connection properties for Adventure Works database
Dim connectionProperties As ConnectionProperties = New ConnectionProperties()
connectionProperties.ConnectionString = "Data Source=""(local)"";Initial Catalog=AdventureWorks;integrated security = true;"
connectionProperties.IntegratedSecurity = True
' Specify data source for Adventure Works
Dim dataSourceReportItem As DataSourceReportItem = New DataSourceReportItem()
dataSourceReportItem.ConnectionProperties = connectionProperties
dataSourceReportItem.Name = "AdventureWorks"
Converting Report (RDL or RDLC) to Image
Now that all the required properties have been set, we can create a ReportConverter object and call its Convert method after setting the DataSource. Let’s see how it works.
Example
[C#]
private void convertButton_Click(object sender, EventArgs e)
{
List<String> renderedImagesList;
String outputDir = outputTextBox.Text;
if (!Directory.Exists(outputDir))
{
Directory.CreateDirectory(outputDir);
}
if (!File.Exists(reportTextBox.Text))
{
MessageBox.Show(@"Report doesn't exist:\r\n: " + reportTextBox.Text);
return;
}
using (FileStream fs = File.OpenRead(reportTextBox.Text))
{
// Create image exporter and specify page image size
BitmapGraphicsProvider bitmapGraphicsProvider = new BitmapGraphicsProvider(new Size(800, 1200));
ConvertArgs convertArgs = new ConvertArgs();
//convertArgs.ReportGraphics = bitmapGraphics;
convertArgs.GraphicsProvider = bitmapGraphicsProvider;
ParameterValue parameterValue = new ParameterValue(@"SalesOrderNumber");
// Adding order number as report parameter
parameterValue.Values.Add(@"SO50750");
convertArgs.ParameterValues.Add(parameterValue);
ReportConverter reportCore = new ReportConverter();
// Create connection properties for Adventure Works database
ConnectionProperties connectionProperties = new ConnectionProperties();
connectionProperties.ConnectionString = "Data Source=\"(local)\";Initial Catalog=AdventureWorks;integrated security = true;";
connectionProperties.IntegratedSecurity = true;
// Specify data source for Adventure Works
DataSourceReportItem dataSourceReportItem = new DataSourceReportItem();
dataSourceReportItem.ConnectionProperties = connectionProperties;
dataSourceReportItem.Name = @"AdventureWorks";
// Add data source to report core
reportCore.AddExternalDataSource(dataSourceReportItem);
// Convert report to image
reportCore.Convert(fs, convertArgs);
// Clear previous rendering files result
renderedImagesList.Clear();
ReportPageSaverCollection pages = bitmapGraphicsProvider.Pages;
for (int i = 0; i < pages.Count; i++)
{
String fileName = Path.Combine(outputDir, i.ToString(@"00") + @".png");
using (FileStream saveFs = File.OpenWrite(fileName))
{
pages[i].Save(saveFs, null);
renderedImagesList.Add(fileName);
}
}
}
renderedPictureBox.ImageLocation = renderedImagesList[pageNum];
setPageText(pageNum);
MessageBox.Show(@"Report converted!");
prevButton.Enabled = renderedImagesList.Count > 0;
nextButton.Enabled = renderedImagesList.Count > 0;
}
[VB]
Private Sub convertButton_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim renderedImagesList As List(Of String)
Dim outputDir As String = outputTextBox.Text
If (Not Directory.Exists(outputDir)) Then
Directory.CreateDirectory(outputDir)
End If
If (Not File.Exists(reportTextBox.Text)) Then
MessageBox.Show("Report doesn't exist:\r\n: " & reportTextBox.Text)
Return
End If
Using fs As FileStream = File.OpenRead(reportTextBox.Text)
' Create image exporter and specify page image size
Dim bitmapGraphicsProvider As BitmapGraphicsProvider = New BitmapGraphicsProvider(New Size(800, 1200))
Dim convertArgs As ConvertArgs = New ConvertArgs()
'convertArgs.ReportGraphics = bitmapGraphics;
convertArgs.GraphicsProvider = bitmapGraphicsProvider
Dim parameterValue As ParameterValue = New ParameterValue("SalesOrderNumber")
' Adding order number as report parameter
parameterValue.Values.Add("SO50750")
convertArgs.ParameterValues.Add(parameterValue)
Dim reportCore As ReportConverter = New ReportConverter()
' Create connection properties for Adventure Works database
Dim connectionProperties As ConnectionProperties = New ConnectionProperties()
connectionProperties.ConnectionString = "Data Source=""(local)"";Initial Catalog=AdventureWorks;integrated security = true;"
connectionProperties.IntegratedSecurity = True
' Specify data source for Adventure Works
Dim dataSourceReportItem As DataSourceReportItem = New DataSourceReportItem()
dataSourceReportItem.ConnectionProperties = connectionProperties
dataSourceReportItem.Name = "AdventureWorks"
' Add data source to report core
reportCore.AddExternalDataSource(dataSourceReportItem)
' Convert report to image
reportCore.Convert(fs, convertArgs)
' Clear previous rendering files result
renderedImagesList.Clear()
Dim pages As ReportPageSaverCollection = bitmapGraphicsProvider.Pages
Dim i As Integer = 0
Do While i < pages.Count
Dim fileName As String = Path.Combine(outputDir, i.ToString("00") & ".png")
Using saveFs As FileStream = File.OpenWrite(fileName)
pages(i).Save(saveFs, Nothing)
renderedImagesList.Add(fileName)
End Using
i += 1
Loop
End Using
renderedPictureBox.ImageLocation = renderedImagesList(pageNum)
setPageText(pageNum)
MessageBox.Show("Report converted!")
prevButton.Enabled = renderedImagesList.Count > 0
nextButton.Enabled = renderedImagesList.Count > 0
End Sub
Click to read this topic Click to read this topic
6/17/2005 12:51:51 AM - -202.67.151.99
Click to read this topic
6/17/2005 12:54:23 AM - -202.67.151.99
Click to read this topic
6/17/2005 12:52:56 AM - -202.67.151.99
Click to read this topic
6/17/2005 12:54:23 AM - -202.67.151.99
Click to read this topic
6/17/2005 12:52:56 AM - -202.67.151.99
Click to read this topic
6/17/2005 12:53:56 AM - -202.67.151.99
Click to read this topic
6/17/2005 12:54:23 AM - -202.67.151.99
Click to read this topic
6/17/2005 12:53:56 AM - -202.67.151.99
Click to read this topic
6/17/2005 12:54:23 AM - -202.67.151.99
Click to read this topic
6/17/2005 12:51:51 AM - -202.67.151.99
Click to read this topic
6/17/2005 12:52:56 AM - -202.67.151.99
Click to read this topic
6/17/2005 12:53:56 AM - -202.67.151.99