在SSRS的程序框架下,一张报表有可能被多个客户端以不同的方式应用.譬如: Web页面可能需要HTML格式的报表,而打印时需要emf格式的报表.
在打印报表时,经常会先将它专换成emf格式的图片,再发送给打印客户端使用.那么如何实现之间的转换呢?
1
2
'
ReportingService是由web service的WSDL生成的代理类(Proxy)
3
Public
Class
RTLReportService
4
Inherits
ReportingService
5
Implements
RTSystems.Framework.Reporting.IReportService
6
7
Public
Overloads
Function
Render(
ByVal
report
As
Framework.Reporting.IReport)
As
Byte
()()
Implements
Framework.Reporting.IReportService.Render
8
9
10
Dim
deviceInfo
As
String
=
Nothing
11
Dim
format
As
String
=
"
IMAGE
"
12
Dim
firstPage
As
[
Byte
]()
=
Nothing
13
Dim
encoding
As
String
=
Nothing
14
Dim
mimeType
As
String
=
Nothing
15
Dim
warnings
As
Warning()
=
Nothing
16
Dim
reportHistoryParameters
As
ParameterValue()
=
Nothing
17
Dim
streamIDs
As
String
()
=
Nothing
18
Dim
pages
As
[
Byte
]()()
=
Nothing
19
20
'
Build device info based on the start page
21
deviceInfo
=
[
String
].Format(
"
<DeviceInfo><OutputFormat>{0}</OutputFormat></DeviceInfo>
"
,
"
emf
"
)
22
23
'
Exectute the report and get page count.
24
Try
25
'
Renders the first page of the report and returns streamIDs for
26
'
subsequent pages
27
'
firstPage = rs.Render(reportPath, format, Nothing, deviceInfo, Nothing, Nothing, _
28
'
Nothing, encoding, mimeType, reportHistoryParameters, warnings, streamIDs)
29
30
'
Replacement code by sjs to handle parameters
31
32
Dim
lstParams
As
New
List(
Of
ParameterValue)
33
34
For
Each
param
As
RTSystems.Framework.Reporting.IReportParameter
In
report.Paramers
35
Dim
paramValue
As
New
ParameterValue()
36
paramValue.Name
=
param.Name
37
paramValue.Value
=
param.Value
38
lstParams.Add(paramValue)
39
Next
40
41
Dim
parameters()
As
ParameterValue
=
lstParams.ToArray()
42
43
44
firstPage
=
Me
.Render(report.ReportName,
format
,
Nothing
, deviceInfo, parameters,
Nothing
, _
45
Nothing
, encoding, mimeType, reportHistoryParameters, warnings, streamIDs)
46
47
48
'
The total number of pages of the report is 1 + the streamIDs
49
m_numberOfPages
=
streamIDs.Length
+
1
50
pages
=
New
[
Byte
](m_numberOfPages
-
1
)() {}
51
52
'
The first page was already rendered
53
pages(
0
)
=
firstPage
54
55
For
pageIndex
As
Integer
=
1
To
m_numberOfPages
-
1
56
'
Build device info based on start page
57
deviceInfo
=
[
String
].Format(
"
<DeviceInfo><OutputFormat>{0}</OutputFormat><StartPage>{1}</StartPage></DeviceInfo>
"
,
"
emf
"
, pageIndex
+
1
)
58
'
pages(pageIndex) = rs.Render(reportPath, format, Nothing, deviceInfo, Nothing, Nothing, _
59
'
Nothing, encoding, mimeType, reportHistoryParameters, warnings, streamIDs)
60
pages(pageIndex)
=
Me
.Render(report.ReportName,
format
,
Nothing
, deviceInfo, parameters,
Nothing
, _
61
Nothing
, encoding, mimeType, reportHistoryParameters, warnings, streamIDs)
62
Next
63
64
Finally
65
66
End
Try
67
68
Return
pages
69
End Function
70
71
End Class