4

複数回実行して 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 を保存できると考えていました。

4

3 に答える 3

6

ここであなたの質問は何ですか? うまくいかないということですか?

これは 2005 年に行ったことの例です。必要に応じて表示または非表示にできる rptViewer1 というコントロールを定義しました。strFormat には "PDF" が含まれ、strNomFicher にはフル パスが含まれている必要があります。

ところで、変数名と関数はフランス語ですが、とにかく動作します:)

    Public Sub CreerFichierRapport(ByVal strNomFichier As String, ByVal strFormat As String)
        Dim bytes() バイトとして
        Dim strDeviceInfo As String = ""
        Dim strMimeType As String = ""
        Dim strEncoding As String = ""
        Dim strExtension As String = ""
        Dim strStreams() を文字列として
        Dim warnings() を警告として
        Dim oFileStream As FileStream
        _stream = 新しいリスト (ストリームの)
        試す
            バイト = rptViewer1.LocalReport.Render(strFormat、strDeviceInfo、strMimeType、strEncoding、strExtension、strStreams、警告)

            oFileStream = New FileStream(strNomFichier, FileMode.Create)
            oFileStream.Write(バイト, 0, バイト.長さ)
            _stream.Add(oFileStream)
        ついに
            If Not IsNothing(oFileStream) Then
                oFileStream.Close()
                oFileStream.Dispose()
            終了条件
        エンドトライ
    サブ終了

于 2010-01-08T21:03:23.480 に答える
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
于 2010-07-21T16:04:22.297 に答える