Ответ 1
Хорошо, наконец понял.
проверить эту ссылку: Печать отчетов 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 = _
"<DeviceInfo>" + _
"<OutputFormat>emf</OutputFormat>" + _
" <PageWidth>8.5in</PageWidth>" + _
" <PageHeight>11in</PageHeight>" + _
" <MarginTop>0.25in</MarginTop>" + _
" <MarginLeft>0.25in</MarginLeft>" + _
" <MarginRight>0.25in</MarginRight>" + _
" <MarginBottom>0.25in</MarginBottom>" + _
"</DeviceInfo>"
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