Quantcast
Channel: SQL Server Reporting Services
Viewing all articles
Browse latest Browse all 1418

Stream Specific pages from RDLC report

$
0
0

Dear All,

I am using the following code to stream RDLC report pages into image files and then print them,

My question is there a way to modify the code to stream only certain page number or a range of pages? 

Thanks

Public Class RepVuer
    Inherits System.Web.UI.Page
    Implements IDisposable
    Private m_currentPageIndex As Integer
    Private m_streams As IList(Of Stream)

 Private Function CreateStream(ByVal name As String, ByVal fileNameExtension As String, ByVal encoding As Encoding, ByVal mimeType As String, ByVal willSeek As Boolean) As Stream
        Dim stream As Stream = New MemoryStream()
        m_streams.Add(stream)
        Return stream
    End Function
    Public Function PageSizeParam(ByVal Format As String)
        Dim DW As String = Nothing
        Dim DH As String = Nothing
        Dim Mrg_top As String = Nothing
        Dim Mrg_Right As String = Nothing
        Dim Mrg_Left As String = Nothing
        Dim Mrg_Bottom As String = Nothing
        Dim RawData As String = PgeSize.SelectedValue
        Dim Arg = RawData.Split("/")
        Dim ParamDim = Arg(0).Split(",")
        Dim W As String = ParamDim(0)
        Dim H As String = ParamDim(1)
        Dim ParamMarg = Arg(1).Split(",")
        Mrg_top = ParamMarg(0)
        Mrg_Right = ParamMarg(1)
        Mrg_Left = ParamMarg(2)
        Mrg_Bottom = ParamMarg(3)
        Select Case PgeOri.SelectedValue
            Case Is = 1
                DW = W
                DH = H
            Case Is = 2
                DW = H
                DH = W
        End Select
        Dim deviceInfo As String = "<DeviceInfo>" & _"<OutputFormat>" & Format & "</OutputFormat>" & _"<PageWidth>" & DW & "in" & "</PageWidth>" & _"<PageHeight>" & DH & "in" & "</PageHeight>" & _"<MarginTop>" & Mrg_top & "in" & "</MarginTop>" & _"<MarginLeft>" & Mrg_Left & "in" & "</MarginLeft>" & _"<MarginRight>" & Mrg_Right & "in" & "</MarginRight>" & _"<MarginBottom>" & Mrg_Bottom & "in" & "</MarginBottom>" & _"</DeviceInfo>"
        Return deviceInfo
    End Function

    Private Sub Print()
        Dim warnings As Warning()
        m_streams = New List(Of Stream)()
        RepVuerCtl.LocalReport.Render("Image", PageSizeParam("EMF"), AddressOf CreateStream, warnings)
        For Each stream As Stream In m_streams
            stream.Position = 0
        Next
        If m_streams Is Nothing OrElse m_streams.Count = 0 Then
            Throw New Exception("Error: no stream to print.")
        End If
        Dim printDoc As New PrintDocument()
        If Not printDoc.PrinterSettings.IsValid Then
            Throw New Exception("Error: cannot find the default printer.")
        Else
            AddHandler printDoc.PrintPage, AddressOf PrintPage

            m_currentPageIndex = 0
            printDoc.Print()
            DisposeStrm()
        End If
    End Sub

   Private Sub PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
        Dim pageImage As New Metafile(m_streams(m_currentPageIndex))

        ' Adjust rectangular area with printer margins.
        Dim adjustedRect As New Rectangle(ev.PageBounds.Left - CInt(ev.PageSettings.HardMarginX), _
                                          ev.PageBounds.Top - CInt(ev.PageSettings.HardMarginY), _
                                          ev.PageBounds.Width, _
                                          ev.PageBounds.Height)

        ' Draw a white background for the report
        ev.Graphics.FillRectangle(Brushes.White, adjustedRect)

        ' Draw the report content
        ev.Graphics.DrawImage(pageImage, adjustedRect)

        ' Prepare for the next page. Make sure we haven't hit the end.
        m_currentPageIndex += 1
        ev.HasMorePages = (m_currentPageIndex < m_streams.Count)
    End Sub
    Public Sub DisposeStrm() Implements IDisposable.Dispose
        If m_streams IsNot Nothing Then
            For Each stream As Stream In m_streams
                stream.Close()
            Next
            m_streams = Nothing
        End If
    End Sub
Protected Sub PrntPnlBtn_Click(sender As Object, e As ImageClickEventArgs) Handles PrntPnlBtn.Click
Print()
End Sub
End Class


Viewing all articles
Browse latest Browse all 1418

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>