تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] طريقة طباعة تقرير ReportViewer مباشرة
#6
(15-09-15, 01:56 AM)الطالب كتب : سلام


اشكر استاذنا ابو عمر

فقد دلني على رابط مفيد من ناحيت الطباعه بدون عرض التقرير،
وهذه نتيجه المحاوله في تعديله
فقد عدلت فيه ليسهل التعامل معه

اول انش كلاس وضع هذا الكود فيه
كود :
Imports System.IO
Imports System.Text
Imports System.Drawing.Imaging
Imports System.Drawing.Printing
Imports Microsoft.Reporting.WinForms

' https://msdn.microsoft.com/en-us/library/vstudio/ms252091(v=vs.100).aspx

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>" & document.PrinterSettings.DefaultPageSettings.PaperSize.Width / 100 & "in</PageWidth>" & _
           "<PageHeight>" & document.PrinterSettings.DefaultPageSettings.PaperSize.Height / 100 & "in</PageHeight>" & _
           "<MarginTop>" & document.PrinterSettings.DefaultPageSettings.Margins.Top / 100 & "in</MarginTop>" & _
           "<MarginLeft>" & document.PrinterSettings.DefaultPageSettings.Margins.Left / 100 & "in</MarginLeft>" & _
           "<MarginRight>" & document.PrinterSettings.DefaultPageSettings.Margins.Right / 100 & "in</MarginRight>" & _
           "<MarginBottom>" & document.PrinterSettings.DefaultPageSettings.Margins.Bottom / 100 & "in</MarginBottom>" & _
           "</DeviceInfo>"

       Dim warnings As Warning()
       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 Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

   Dim myReport As New MyLocalReport

   '' تحديد ملف تقرير خارجي
   'myReport.ReportPath = "C:\Report1.rdlc"

   ' تحديد ملف مدمج في المشروع
   myReport.ReportName = "Report1.rdlc"

   ' تحديد مصدر البيانات اذا كان التقرير مصمم على اساسها
   myReport.DataSources = New ReportDataSource("DataSet1", CType(DataSet1.DataTable1, DataTable))

   ' وضع قيم البارامترات في التقرير ان كانت موجوده
   myReport.SetParameters(New Microsoft.Reporting.WinForms.ReportParameter("ReportParameter1", "Hello"))


   '' الطباعه على طابعه اختياريه
   'Using prntr As New PrintDialog
   '    If prntr.ShowDialog = vbOK Then

   '        '' يمكن عدم تحديد الهوامش وتركها للقيم الافتراضيه ولكن وضعتها كمثال
   '        '' ضبط الهوامش بالميللي انش: 1 انش=100 ملي انش
   '        'prntr.PrinterSettings.DefaultPageSettings.Margins.Left = 100
   '        'prntr.PrinterSettings.DefaultPageSettings.Margins.Right = 100
   '        'prntr.PrinterSettings.DefaultPageSettings.Margins.Top = 100
   '        'prntr.PrinterSettings.DefaultPageSettings.Margins.Bottom = 100

   '        myReport.Print(prntr.PrinterSettings)

   '    End If
   'End Using

   ' الطباعه على الطابعه الافتراضيه
   myReport.Print()

End Sub

تمت التجربه بنجاح


موفقين

شكرا لك استاذ عمر والطالب لقد نجحت معي الطريقة
الرد }}}
تم الشكر بواسطة: adel2012


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

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيف من الممكن طباعة كل سجل في صفحة مستقلة ( Report Viewer ) abomo3ath 2 1,483 24-09-23, 09:31 AM
آخر رد: abomo3ath
  طباعة داتا جريد في جدولين على الريبورت ahmed_elwerfalli 1 923 21-08-23, 05:53 PM
آخر رد: Taha Okla
  [سؤال] مشكلة في طباعة footer تقرير كريستال ريبورت i1982 5 1,788 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,115 26-07-21, 08:49 PM
آخر رد: aftfm
  طباعة بيانات من عدّة جداول عبد العزيز البسكري 2 2,819 19-07-21, 12:37 AM
آخر رد: Lathe1
  كيف أعمل نسخة من تقرير كريستال ريبورت للتعديل عليها جيولوجي مبتدئ 0 1,579 23-06-21, 06:35 PM
آخر رد: جيولوجي مبتدئ
  مشكلة في ربط تقرير قاعدة بيانات بالكريستال ريبورت 2008 aftfm 0 1,639 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,438 25-11-20, 11:09 AM
آخر رد: sulim

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


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