Répondre

1

J'ai fait ce ASP.NET mais pas VB.NET. Ce que cela impliquait était de faire une demande dans les coulisses au serveur de rapports en utilisant URL Access où vous pourriez spécifier le type de rendu de rapport (dans ce cas PDF) et mon code-behind téléchargerait et enregistrer le fichier sur le serveur web, puis le serveur sauvegarder à l'utilisateur sous forme de fichier PDF. Tout ce que l'utilisateur avait à faire était de remplir ses paramètres et de cliquer sur le bouton "soumettre".

J'imagine que vous pourriez effectuer à peu près les mêmes étapes que j'ai suivies jusqu'à ce que vous ayez besoin de servir le fichier, où dans un environnement de formulaires, vous n'aurez pas à leur donner l'invite de téléchargement la machine et tout ce que vous auriez à faire est d'ouvrir le fichier (qui devrait charger dans votre visionneuse PDF par défaut).

MISE À JOUR: Voici une partie du code, dont la plus grande partie était basée sur un didacticiel CodeProject mais je ne me souviens pas comment y accéder. Quelques modifications mineures ont été apportées:

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 

Voici le sous DownloadWebFile qui en fait faire la demande du serveur de rapports et télécharger le fichier et l'enregistrer sur le disque local.

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 

Enfin, voici un exemple de l'utilisation:

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

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

Je déteste l'incapacité qu'il reconnaisse correctement les commentaires VB.NET – TheTXI