從網上找了一些關于asp.net列印的資料,參考“關于Web列印”,參考
<a href="http://cid-56b433ad3d1871e3.skydrive.live.com/self.aspx/.Public/%E5%85%B3%E4%BA%8EWEB%E6%89%93%E5%8D%B0.docx">http://cid-56b433ad3d1871e3.skydrive.live.com/self.aspx/.Public/%e5%85%b3%e4%ba%8eWEB%e6%89%93%e5%8d%b0.docx</a>
最後選擇了使用ReportViewer實作列印功能
實作思路:
silveilight程式中把頁面中需要列印的對象轉換成圖形base64編碼的字元流,送出到服務端
服務端處理程式把這些二進制字元流邦定到ReportViewer控件上,然後由ReportViewer實作列印的展現功能,具體如下:
<b>HOST silverlight</b><b>的頁面</b>
<b>SilverLight</b><b>送出列印請求</b>
<b>列印頁面和處理邏輯:</b>
<b>print .RDLC</b><b>檔案</b>
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSources>
<DataSource Name="DummyDataSource">
<rd:DataSourceID>6dde20a2-6fdf-4054-a23d-0135e6a9e8a4</rd:DataSourceID>
<ConnectionProperties>
<DataProvider>SQL</DataProvider>
<ConnectString />
</ConnectionProperties>
</DataSource>
</DataSources>
<InteractiveHeight>11in</InteractiveHeight>
<rd:DrawGrid>true</rd:DrawGrid>
<InteractiveWidth>8.5in</InteractiveWidth>
<rd:SnapToGrid>true</rd:SnapToGrid>
<RightMargin>1in</RightMargin>
<LeftMargin>1in</LeftMargin>
<BottomMargin>1in</BottomMargin>
<rd:ReportID>66b0e21f-4a8d-4b4e-b652-d28cb44e05e4</rd:ReportID>
<DataSets>
<DataSet Name="DSReportPrintImage_ImageData">
<Fields>
<Field Name="ImageId">
<DataField>ImageId</DataField>
<rd:TypeName>System.Int32</rd:TypeName>
</Field>
<Field Name="ImageName">
<DataField>ImageName</DataField>
<rd:TypeName>System.String</rd:TypeName>
<Field Name="ImageBytes">
<DataField>ImageBytes</DataField>
<rd:TypeName>System.Byte[]</rd:TypeName>
</Fields>
<Query>
<DataSourceName>DummyDataSource</DataSourceName>
<CommandText />
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>DSReportPrintImage</rd:DataSetName>
<rd:TableName>ImageData</rd:TableName>
</rd:DataSetInfo>
</DataSet>
</DataSets>
<Width>6.5in</Width>
<Body>
<ReportItems>
<List Name="list1">
<Left>0.125in</Left>
<DataSetName>DSReportPrintImage_ImageData</DataSetName>
<Image Name="image1">
<Sizing>AutoSize</Sizing>
<Top>0.125in</Top>
<Width>5.875in</Width>
<MIMEType>image/png</MIMEType>
<Source>Database</Source>
<Style />
<Height>1.625in</Height>
<Value>=Fields!ImageBytes.Value</Value>
</Image>
</ReportItems>
<Width>6.125in</Width>
<Height>1.875in</Height>
</List>
<Height>2in</Height>
</Body>
<Language>en-US</Language>
<TopMargin>1in</TopMargin>
</Report>