Antwort

1

Ich habe dieses ASP.NET gemacht, aber nicht VB.NET. Es ging darum, hinter den Kulissen eine Anfrage an den Berichtsserver unter Verwendung von URL Access zu senden, wo Sie den Render-Typ des Berichts (in diesem Fall PDF) angeben könnten. Mein Code-Behind würde die Datei herunterladen und auf dem Webserver speichern und sie dann serversichern Sichern Sie den Benutzer als PDF-Datei. Alles, was der Benutzer tun musste, war seine Parameter einzugeben und den Submit Button zu drücken.

Ich könnte mir vorstellen, dass Sie ziemlich genau die gleichen Schritte ausführen können, die ich bis zur Bereitstellung der Datei durchlaufen habe. In einer Formularumgebung müssten Sie ihnen nicht die Download-Aufforderung geben, da sie bereits aktiv war Die Maschine und alles, was Sie tun müssten, ist die Datei öffnen (die in Ihrem Standard-PDF-Viewer geladen werden soll).

AKTUALISIEREN: Hier ist ein Teil des Codes, das meiste davon basiert auf einem CodeProject-Tutorial, aber ich kann mich nicht erinnern, wie ich dazu gekommen bin. Einige kleinere Änderungen wurden vorgenommen:

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 

Hier ist die DownloadWebFile Unter, die tatsächlich den Bericht Serveranfrage machen und die Datei herunterzuladen und auf der lokalen Festplatte speichern.

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 

Schließlich, hier ist ein Beispiel für die Nutzung:

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

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

ich die Unfähigkeit hasse es richtig VB.NET Kommentare zu erkennen – TheTXI

Verwandte Themen