以编程方式将RDLC报告另存为PDF

mon*_*ton 4 vb.net pdf export rdlc

我有一份报告,我需要多次运行并另存为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()
Run Code Online (Sandbox Code Playgroud)

我想我可以循环运行它并且每次都保存PDF.

Dav*_*lle 6

你在这里有什么问题?它不起作用吗?

这是我们在2005年所做的事情的一个例子.我们定义了一个名为rptViewer1的控件,它可以根据您的需要显示或不显示.strFormat应包含"PDF"和strNomFicher的完整路径.

BTW变量名称和功能都是法语,但无论如何都会有效:)


    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


Bri*_*Kay 5

大卫的回答对我很有帮助.我想我会发布这个代码的简化和(略)翻译版本,因为原文包含一些法语,还有一些不相关的引用:

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
Run Code Online (Sandbox Code Playgroud)