当前位置:  开发笔记 > 数据库 > 正文

打印没有预览的ServerReport

如何解决《打印没有预览的ServerReport》经验,为你挑选了1个好方法。

我有一个SQLServer 2005 Reporting Services ServerReport部署并经常由我的Winforms应用程序(Framework 2.0)通过ReportViewer控件使用.

我需要的是从应用程序的一种形式提供一键式打印按钮,只触发打印对话框,而无需启动ReportViewer.

我一直在尝试将报表呈现为字节数组,但我无法通过它.

这个报告有多个页面,所以我不知道用于本地报告的"图像"渲染是否也适用于服务器报告.

我一直在寻找抛出MSDN,但只提到本地报告:

http://msdn.microsoft.com/en-us/library/ms252091(VS.80).aspx

我可以在服务器端报告上获得的小信息正在使用对ReportServer Web服务的Web引用,我不希望这样.

http://blogs.msdn.com/bryanke/articles/71491.aspx

有没有办法使用打印对话框打印服务器报告,而不向用户显示报告查看器(我不介意它是否在幕后)?



1> David Lay..:

好的,终于想通了.

检查此链接: 打印Reporting Services 2005报告

那篇博文几乎包含了我所需要的所有内容,但我将在这里发布完整的答案以供参考.

我最终在幕后使用报表查看器对象,但仅为方便起见,因为它不是必需的.

第一步是询问用户打印机设置:

Dim doc As New Printing.PrintDocument()
AddHandler doc.PrintPage, AddressOf PrintPageHandler
Dim dialog As New PrintDialog()
dialog.Document = doc
Dim print As DialogResult
print = dialog.ShowDialog()
doc.PrinterSettings = dialog.PrinterSettings

有了这个,我们继续配置我们的报告调用:修改此字符串,您可以打印任何纸张大小和任何方向(切换景观的高度和宽度),但报告本身必须在相同的页面布局中配置.

Dim deviceInfo As String = _
"" + _
"emf" + _
"  8.5in" + _
"  11in" + _
"  0.25in" + _
"  0.25in" + _
"  0.25in" + _
"  0.25in" + _
""

Dim warnings() As Warning
Dim streamids() As String
Dim mimeType, encoding, filenameExtension, path As String
mimeType = "" : encoding = "" : filenameExtension = ""

最后,我们使用其所有页面呈现报告.

请注意,如果报表只有一个页面,则永远不会使用renderStream方法.

rpt_control是以前配置并针对服务器报告的报告查看器控件.

另请注意,在此代码中,我们将页面添加到列表中.此列表是一个全局变量,因为它在PrintPageHandler方法中是必需的.

Dim data() As Byte
rpt_control.ServerReport.SetParameters(_parametros)
data = rpt_control.ServerReport.Render("Image", deviceInfo, mimeType, encoding, filenameExtension, streamids, warnings)
pages.Add(New Metafile(New MemoryStream(data)))

For Each pageName As String In streamids
    data = rpt_control.ServerReport.RenderStream("Image", pageName, deviceInfo, mimeType, encoding)
    pages.Add(New Metafile(New MemoryStream(data)))
Next
doc.Print()

到目前为止,我们还没有完成任何打印,这实际上是由前面引用的PrintPageHandler方法处理的.

Dim pages As New List(Of Metafile)
Dim pageIndex As Integer = 0
Private Sub PrintPageHandler(ByVal sender As Object, ByVal e As PrintPageEventArgs)
    Dim page As Metafile = pages(pageIndex)
    pageIndex += 1
    e.Graphics.DrawImage(page, 0, 0, page.Width, page.Height)
    e.HasMorePages = pageIndex < pages.Count
End Sub

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有