通过程序的方式将Reporting Service 报表转成 PDF,搞了好久,终于搞定了,记录下
1.创建报表并发布
2.建立项目,并在项目中加入 web 引用
http://localhost/ReportServer 取名为 ReportService2005/ReportService2005.asmx
http://localhost/ReportServer 取名为 ReportExecution2005/ReportExecution2005.asmx
3.代码如下
Dim rs As ReportService2005.ReportingService2005
Dim rsExec As ReportExecution2005.ReportExecutionService
' Create a new proxy to the web service
rs = New ReportService2005.ReportingService2005()
rsExec = New ReportExecution2005.ReportExecutionService()
' Authenticate to the Web service using Windows credentials
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
rsExec.Credentials = System.Net.CredentialCache.DefaultCredentials
' Assign the URL of the Web service
rs.Url = "http://localhost/ReportServer/ReportService2005.asmx"
rsExec.Url = "http://localhost/ReportServer/ReportExecution2005.asmx"
' Prepare Render arguments
Dim historyID As String = Nothing
Dim deviceInfo As String = Nothing
Dim format As String = "PDF"
Dim results As [Byte]()
Dim encoding As String = [String].Empty
Dim mimeType As String = [String].Empty
Dim extension As String = [String].Empty
Dim warnings As ReportExecution2005.Warning() = Nothing
Dim streamIDs As String() = Nothing
' Default Path;
Dim fileName As String = "c:/samplereport.pdf"
' Define variables needed for GetParameters() method
' Get the report name
Dim _reportName As String = "/AdventureWorks Sample Reports/Sales Order Detail"
Dim _historyID As String = Nothing
Dim _forRendering As Boolean = False
Dim _values As ReportService2005.ParameterValue() = Nothing
Dim _credentials As ReportService2005.DataSourceCredentials() = Nothing
Dim _parameters As ReportService2005.ReportParameter() = Nothing
Try
' Get if any parameters needed.
_parameters = rs.GetReportParameters(_reportName, _historyID, _forRendering, _values, _credentials)
' Load the selected report.
Dim ei As ReportExecution2005.ExecutionInfo = rsExec.LoadReport(_reportName, historyID)
' Prepare report parameter.
' Set the parameters for the report needed.
Dim parameters As ReportExecution2005.ParameterValue() = New ReportExecution2005.ParameterValue(0) {}
' Place to include the parameter.
If _parameters.Length > 0 Then
'parameters(0) = New ReportExecution2005.ParameterValue()
'parameters(0).Label = "verzamelgroepAP"
'parameters(0).Name = "verzamelgroepAP"
'parameters(0).Value = "true"
parameters(0) = New ReportExecution2005.ParameterValue()
parameters(0).Label = "Sales Order Number"
parameters(0).Name = "SalesOrderNumber"
parameters(0).Value = "SO50750"
End If
rsExec.SetExecutionParameters(parameters, "en-us")
results = rsExec.Render(format, deviceInfo, extension, encoding, mimeType, warnings, streamIDs)
'' Create a file stream and write the report to it
'Using stream As FileStream = File.OpenWrite(fileName)
' stream.Write(results, 0, results.Length)
'End Using
'Save to Client
Response.ClearContent()
Response.AddHeader("Content-Disposition", "attachment; filename=aaa.pdf")
Response.ContentType = "application/pdf"
Response.BinaryWrite(results)
Response.Flush()
Catch ex As Exception
Response.Write(ex.Message)
End Try
参考:
http://www.codeproject.com/KB/reporting-services/PDFUsingSQLRepServices.aspx
http://geekswithblogs.net/bsherwin/archive/2007/04/29/112094.aspx