SQl RS 2005 - автоматизировать экспорт в PDF после ввода пользовательского параметра - PullRequest
1 голос
/ 10 июня 2009

У меня есть отчет, который требует от пользователя ввести номер своего билета, затем он нажимает кнопку просмотра, и он генерирует. Довольно стандартный. Я хотел бы, чтобы отчет автоматически экспортировался в PDF, когда они щелкают по представлению. Кто-нибудь знает, возможно ли это и как я подхожу к этому вопросу?

Спасибо за любой вклад.

1 Ответ

1 голос
/ 10 июня 2009

Я сделал этот ASP.NET, но не VB.NET. Он включал в себя скрытый запрос к серверу отчетов, используя URL Access , где вы могли указать тип отчета отчета (в данном случае PDF), и мой код-код загружал и сохранял файл в веб-сервер, затем отправьте его обратно пользователю в виде файла PDF. Все, что нужно было сделать пользователю, это заполнить его параметры и нажать кнопку «Отправить».

Я полагаю, что вы могли бы выполнять почти те же шаги, которые я выполнял до тех пор, пока вам не понадобится обработать файл, тогда как в среде форм вам не нужно будет выдавать им приглашение на загрузку, поскольку оно уже было машина, и все, что вам нужно сделать, это открыть файл (который должен загрузиться в вашей программе просмотра PDF по умолчанию).

ОБНОВЛЕНИЕ : Вот часть кода, большая часть которого основана на руководстве по CodeProject, но я не могу вспомнить, как к нему добраться. Были внесены некоторые незначительные изменения:

Public Sub ServeReport(ByVal URL As String, _
    ByVal Directory As String, ByVal Filename As String)

    Dim f As New FileIOPermission(PermissionState.None)
    Dim fs As FileStream

    If Not System.IO.Directory.Exists(Directory) Then
        System.IO.Directory.CreateDirectory(Directory)
    End If

    DownloadWebFile(URL, Directory & Filename)    

    fs = File.Open(Directory & Filename, FileMode.Open)

    Dim bytBytes(fs.Length) As Byte
    fs.Read(bytBytes, 0, fs.Length)
    fs.Close()

    Response.AddHeader("Content-disposition", _
               "attachment; filename=" & Filename)
    Response.ContentType = "application/octet-stream"
    Response.BinaryWrite(bytBytes)

    f.AllLocalFiles = FileIOPermissionAccess.AllAccess
    File.Delete(Directory & Filename)
End Sub

Вот подпрограмма DownloadWebFile, которая фактически отправляет запрос серверу отчетов, загружает файл и сохраняет его на локальном диске.

Public Shared Sub DownloadWebFile(ByVal URL As String, _
    ByVal DestFilename As String)

    'Create a web request to attach to the remote file 
    Dim WebFile As System.Net.WebRequest

    'Create a file stream for writing the file to the local filename 
    Dim LocalFile As System.IO.FileStream

    'Create some working variables for the copy process 
    Dim Buffer(16384) As Byte
    Dim BytesRead As Long

    'Open a WebRequest stream to the source file 
    WebFile = System.Net.WebRequest.Create(URL)

    'Credentials are required, pass the defaults 
    WebFile.Credentials = System.Net.CredentialCache.DefaultCredentials

    'Create the local file 
    LocalFile = New IO.FileStream(DestFilename, IO.FileMode.Create)

    'Download the file in 16k chunks 
    With WebFile.GetResponse.GetResponseStream
        Do
            BytesRead = .Read(Buffer, 0, 16384)
            LocalFile.Write(Buffer, 0, BytesRead)
        Loop Until BytesRead = 0
        .Close()
    End With

    WebFile = Nothing

    'Force all data out of memory and into the file before closing 
    LocalFile.Flush()
    LocalFile.Close()
    LocalFile = Nothing
End Sub

Наконец, вот пример использования:

Dim URL As String
URL = reporturl & "&rs%3aCommand=Render&rs%3AFormat=PDF"

ServeReport(URL, "C:\Temp\", "MyReport.PDF")
...