Search code examples
vb.netpdfexportrdlc

Save RDLC reports as PDF programmatically


I have a report that I need to run multiple times and save as PDFs. I am currently generating the report as a PDF programatically but want to save the reports without the user having to choose the save option manually each time.

The code I use to render a single report as a PDF is:

    Dim warnings As Microsoft.Reporting.WebForms.Warning() = Nothing

    Dim streamids As String() = Nothing

    Dim mimeType As String = Nothing

    Dim encoding As String = Nothing

    Dim extension As String = Nothing

    Dim deviceInfo As String

    Dim bytes As Byte()

    Dim lr As New Microsoft.Reporting.WebForms.LocalReport

    deviceInfo = "<DeviceInfo><SimplePageHeaders>True</SimplePageHeaders></DeviceInfo>"

    bytes = ReportViewer1.LocalReport.Render("PDF", deviceInfo, mimeType, encoding, extension, streamids, warnings)

    Response.ClearContent()

    Response.ClearHeaders()

    Response.ContentType = "application/pdf"

    Response.BinaryWrite(bytes)

    Response.Flush()

    Response.Close()

I was figuring I could run it in a loop and save the PDF each time.


Solution

  • What's your question in here? Is it that it does not work?

    here is an example of something we didin 2005. We defined a control called rptViewer1 which can be visible or not depending of your needs. strFormat should contain "PDF" and strNomFicher the full path.

    BTW the variable names and functions are in french, but that will work anyway :)

    
        Public Sub CreerFichierRapport(ByVal strNomFichier As String, ByVal strFormat As String)
            Dim bytes() As Byte
            Dim strDeviceInfo As String = ""
            Dim strMimeType As String = ""
            Dim strEncoding As String = ""
            Dim strExtension As String = ""
            Dim strStreams() As String
            Dim warnings() As Warning
            Dim oFileStream As FileStream
            _stream = New List(Of Stream)
            Try
                bytes = rptViewer1.LocalReport.Render(strFormat, strDeviceInfo, strMimeType, strEncoding, strExtension, strStreams, warnings)
    
                oFileStream = New FileStream(strNomFichier, FileMode.Create)
                oFileStream.Write(bytes, 0, bytes.Length)
                _stream.Add(oFileStream)
            Finally
                If Not IsNothing(oFileStream) Then
                    oFileStream.Close()
                    oFileStream.Dispose()
                End If
            End Try
        End Sub