Я сделал этот 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")