تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] طريقة طباعة تقرير ReportViewer مباشرة
#7
هذا كودي بعد التعديل عليه قليلا

في الكلاس

Imports System.IO
Imports System.Text
Imports System.Drawing.Imaging
Imports System.Drawing.Printing
Imports Microsoft.Reporting.WinForms


Public Class MyLocalReport
    Implements IDisposable

    Private report As New LocalReport()

    Private document As New PrintDocument()

    Private m_currentPageIndex As Integer
    Private m_streams As IList(Of Stream)


    Public Sub Print(Optional ByVal printerSetting As PrinterSettings = Nothing)
        If printerSetting IsNot Nothing Then
            document.PrinterSettings = printerSetting
        End If

        Export(report)

        If m_streams Is Nothing OrElse m_streams.Count = 0 Then
            Throw New Exception("Error: no stream to print.")
        End If
        If Not document.PrinterSettings.IsValid Then
            Throw New Exception("Error: cannot find the default printer.")
        Else
            AddHandler document.PrintPage, AddressOf PrintPage
            m_currentPageIndex = 0
            document.Print()
        End If
    End Sub


    ' Routine to provide to the report renderer, in order to
    ' save an image for each page of the report.
    Private Function CreateStream(ByVal name As String, ByVal fileNameExtension As String, ByVal encoding As Encoding, ByVal mimeType As String, ByVal willSeek As Boolean) As Stream
        Dim stream As Stream = New MemoryStream()
        m_streams.Add(stream)
        Return stream
    End Function

    ' Export the given report as an EMF (Enhanced Metafile) file.
    Private Sub Export(ByVal report As LocalReport)
        Dim deviceInfo As String =
          "<DeviceInfo>" & _
          "  <OutputFormat>EMF</OutputFormat>" + _
          "  <PageWidth>8.27in</PageWidth>" + _
          "  <PageHeight>11.69in</PageHeight>" + _
          "  <MarginTop>0.3937in</MarginTop>" + _
          "  <MarginLeft>0.3937in</MarginLeft>" + _
          "  <MarginRight>0.3937in</MarginRight>" + _
          "  <MarginBottom>0.7874in</MarginBottom>" + _
          "</DeviceInfo>"

        Dim warnings As Warning() = Nothing
        m_streams = New List(Of Stream)()
        report.Render("Image", deviceInfo, AddressOf CreateStream, warnings)
        For Each stream As Stream In m_streams
            stream.Position = 0
        Next
    End Sub

    ' Handler for PrintPageEvents
    Private Sub PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
        Dim pageImage As New Metafile(m_streams(m_currentPageIndex))

        ' Adjust rectangular area with printer margins.
        Dim adjustedRect As New Rectangle(ev.PageBounds.Left - CInt(ev.PageSettings.HardMarginX), _
                                          ev.PageBounds.Top - CInt(ev.PageSettings.HardMarginY), _
                                          ev.PageBounds.Width, _
                                          ev.PageBounds.Height)

        ' Draw a white background for the report
        ev.Graphics.FillRectangle(Brushes.White, adjustedRect)

        ' Draw the report content
        ev.Graphics.DrawImage(pageImage, adjustedRect)

        ' Prepare for the next page. Make sure we haven't hit the end.
        m_currentPageIndex += 1
        ev.HasMorePages = (m_currentPageIndex < m_streams.Count)
    End Sub


    Private _ReportName As String
    Public Property ReportName As String
        Get
            Return _ReportName
        End Get
        Set(ByVal value As String)
            _ReportName = value
            report.ReportEmbeddedResource = Me.GetType().Namespace & "." & _ReportName
        End Set
    End Property

    Private _ReportPath As String
    Public Property ReportPath As String
        Get
            Return _ReportPath
        End Get
        Set(ByVal value As String)
            _ReportPath = value
            report.ReportPath = _ReportPath
        End Set
    End Property


    Private _DataSources As ReportDataSource
    Public Property DataSources As ReportDataSource
        Get
            Return _DataSources
        End Get
        Set(ByVal value As ReportDataSource)
            _DataSources = value
            report.DataSources.Clear()
            report.DataSources.Add(value)
        End Set
    End Property

    Public Sub SetParameters(ByVal parameter As ReportParameter)
        report.SetParameters(parameter)
    End Sub

    Public Sub Dispose() Implements IDisposable.Dispose
        If m_streams IsNot Nothing Then
            For Each stream As Stream In m_streams
                stream.Close()
            Next
            m_streams = Nothing
        End If
    End Sub
End Class


وعند طلب الكلاس

 Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Dim myReport As New MyLocalReport
        '' تحديد ملف تقرير خارجي
        'myReport.ReportPath = "C:\Report1.rdlc"
        ' تحديد ملف مدمج في المشروع
        myReport.ReportName = "Report1.rdlc"
        ' تحديد مصدر البيانات اذا كان التقرير مصمم على اساسها
        myReport.DataSources = New ReportDataSource("DataSet1", CType(WosysDBDataSet.Main, DataTable))
        ' الطباعه على الطابعه الافتراضيه
        myReport.Print()
    End Sub



الملفات المرفقة
.zip   MyLocalReport.zip (الحجم : 1.61 ك ب / التحميلات : 661)
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
RE: طريقة طباعة تقرير ReportViewer مباشرة - بواسطة hesham77a - 23-01-17, 05:30 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيف من الممكن طباعة كل سجل في صفحة مستقلة ( Report Viewer ) abomo3ath 2 1,480 24-09-23, 09:31 AM
آخر رد: abomo3ath
  طباعة داتا جريد في جدولين على الريبورت ahmed_elwerfalli 1 920 21-08-23, 05:53 PM
آخر رد: Taha Okla
  [سؤال] مشكلة في طباعة footer تقرير كريستال ريبورت i1982 5 1,784 29-03-23, 11:30 PM
آخر رد: sanyor77
  هل يمكن عرض سجل واحد من DatagreadView في تقرير ReportView VB.net؟ QWERTU 0 1,430 21-07-22, 01:01 AM
آخر رد: QWERTU
  حل مشكلة الارقام في تقرير الكريستال ريبورت aftfm 0 2,114 26-07-21, 08:49 PM
آخر رد: aftfm
  طباعة بيانات من عدّة جداول عبد العزيز البسكري 2 2,816 19-07-21, 12:37 AM
آخر رد: Lathe1
  كيف أعمل نسخة من تقرير كريستال ريبورت للتعديل عليها جيولوجي مبتدئ 0 1,577 23-06-21, 06:35 PM
آخر رد: جيولوجي مبتدئ
  مشكلة في ربط تقرير قاعدة بيانات بالكريستال ريبورت 2008 aftfm 0 1,637 16-02-21, 07:17 PM
آخر رد: aftfm
  مشكلة طلب الباسورد في فيجوال بيسك عند عرض تقرير كريستال ريبورت diab4diab 1 2,072 05-12-20, 10:03 AM
آخر رد: asemshahen5
  [VB.NET] ما هي الملفات المطلوب إرفاقها لتشغيل تقرير Microsoft Report sulim 0 1,437 25-11-20, 11:09 AM
آخر رد: sulim

التنقل السريع :


يقوم بقرائة الموضوع: