Сохранить отчеты RDLC как PDF программно - PullRequest
4 голосов
/ 30 октября 2009

У меня есть отчет, который мне нужно запустить несколько раз и сохранить в формате PDF. В настоящее время я генерирую отчет в формате PDF программно, но хочу сохранить отчеты без необходимости каждый раз выбирать опцию сохранения вручную.

Код, который я использую для отображения отдельного отчета в формате PDF:

    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()

Я думал, что смогу запустить его в цикле и каждый раз сохранять PDF.

Ответы [ 2 ]

6 голосов
/ 09 января 2010

Какой у тебя вопрос здесь? Разве это не работает?

Вот пример того, что мы сделали в 2005 году. Мы определили элемент управления с именем rptViewer1, который может быть видимым или нет в зависимости от ваших потребностей. strFormat должен содержать «PDF» и strNomFicher полный путь.

Кстати, имена и функции переменных на французском, но это все равно будет работать:)


    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

5 голосов
/ 21 июля 2010

Ответ Дэвида был очень полезен для меня. Я подумал, что опубликую свою упрощенную и (слегка) переведенную версию этого кода, поскольку оригинал содержал немного французского, а также несколько ссылок, которые не относились к делу:

Imports Microsoft.Reporting.WebForms
Imports System.IO

Public Class RenderToPDF
    Public Sub Save(ByVal viewer As ReportViewer, ByVal savePath As String)
        Dim Bytes() As Byte = viewer.LocalReport.Render("PDF", "", Nothing, Nothing, Nothing, Nothing, Nothing)

        Using Stream As New FileStream(savePath, FileMode.Create)
            Stream.Write(Bytes, 0, Bytes.Length)
        End Using
    End Sub
End Class
...