2009-10-30 4 views
4

У меня есть отчет о том, что мне нужно запускать несколько раз и сохранять как PDF-файлы. В настоящее время я создаю отчет в формате PDF, но хочу сохранить отчеты без необходимости вручную выбирать вариант сохранения вручную.Сохранять отчеты RDLC как PDF программно

код я использую, чтобы сделать один отчет, как PDF является:

Dim warnings As Microsoft.Reporting.WebForms.Warning() = Nothing 

    Dim streamids As String() = Nothing 

    Dim mimeType As String = Nothing 

    Dim encoding As String = Nothing 

    Dim extension As String = Nothing 

    Dim deviceInfo As String 

    Dim bytes As Byte() 

    Dim lr As New Microsoft.Reporting.WebForms.LocalReport 

    deviceInfo = "<DeviceInfo><SimplePageHeaders>True</SimplePageHeaders></DeviceInfo>" 

    bytes = ReportViewer1.LocalReport.Render("PDF", deviceInfo, mimeType, encoding, extension, streamids, warnings) 

    Response.ClearContent() 

    Response.ClearHeaders() 

    Response.ContentType = "application/pdf" 

    Response.BinaryWrite(bytes) 

    Response.Flush() 

    Response.Close() 

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

+0

ты попытался с ** FileStream ** и получить решение? – Kiquenet

ответ

6

Ваш вопрос здесь? Неужели это не работает?

вот пример того, что мы сделали в 2005 году. Мы определили элемент управления rptViewer1, который может быть видимым или не зависящим от ваших потребностей. strFormat должен содержать «PDF» и strNomFicher полный путь.

BTW имена переменных и функций на французском, но это будет работать в любом случае :)

 

    Public Sub CreerFichierRapport(ByVal strNomFichier As String, ByVal strFormat As String) 
     Dim bytes() As Byte 
     Dim strDeviceInfo As String = "" 
     Dim strMimeType As String = "" 
     Dim strEncoding As String = "" 
     Dim strExtension As String = "" 
     Dim strStreams() As String 
     Dim warnings() As Warning 
     Dim oFileStream As FileStream 
     _stream = New List(Of Stream) 
     Try 
      bytes = rptViewer1.LocalReport.Render(strFormat, strDeviceInfo, strMimeType, strEncoding, strExtension, strStreams, warnings) 

      oFileStream = New FileStream(strNomFichier, FileMode.Create) 
      oFileStream.Write(bytes, 0, bytes.Length) 
      _stream.Add(oFileStream) 
     Finally 
      If Not IsNothing(oFileStream) Then 
       oFileStream.Close() 
       oFileStream.Dispose() 
      End If 
     End Try 
    End Sub 

+0

Мне нужно отправить клиенту в «Ответ» отчет, например *** application/pdf и application/vnd.ms-excel ***, используя *** байтовый массив *** с помощью 'HttpContext.Current.Response.BinaryWrite (renderedBytes) '. Возможно ли это или _I нужно сначала сохранить файл на диск, а затем отправить клиенту? _ – Kiquenet

+0

Что такое *** _ stream *** variable? статический класс? – Kiquenet

5

ответ Дэвида был очень полезным для меня. Я думал, что я опубликую свою упрощенную и (немного) переведенную версию этого кода, так как оригинал содержал некоторые французские, а также несколько ссылок, которые не были актуальны:

Imports Microsoft.Reporting.WebForms 
Imports System.IO 

Public Class RenderToPDF 
    Public Sub Save(ByVal viewer As ReportViewer, ByVal savePath As String) 
     Dim Bytes() As Byte = viewer.LocalReport.Render("PDF", "", Nothing, Nothing, Nothing, Nothing, Nothing) 

     Using Stream As New FileStream(savePath, FileMode.Create) 
      Stream.Write(Bytes, 0, Bytes.Length) 
     End Using 
    End Sub 
End Class 
+0

Я использую *** bytes array *** с 'HttpContext.Current.Response.BinaryWrite (renderedBytes)', но иногда я получаю ** exception ** _OutOfMemory_ Может быть, сначала сохранить файл в файловой системе на ASP.NET Server? – Kiquenet

Смежные вопросы