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")
Je déteste l'incapacité qu'il reconnaisse correctement les commentaires VB.NET – TheTXI