تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] تعديل بسيط في الطباعة المباشرة فقط ReportViewer
#11
أخي أبو ليلى جزاك الله على التتبع

في الحقيقة لا يمكن الاستغناء على Report.rdlc
سأقول لك السبب
المشروع الذي أنا بصدده و الذي تشنج بسبب عدم الطباعة المباشرة , هو مشروع مبيعات سوبر ماركت
وكما تعلم فإن عند البيع و الضغط على زر Print يجب خروج Ticket و دون إنتظار

المشروع كله معمول ب Report.rdlc
و عدم الطباعة المباشرة سبب لي تشنج

فهذا الكلاس جميل لكنه يستلزم التنقية حتى تصبح مهمته الطباعة المباشرة فقط
دون المساس بقياسات الورقة ولا اسم الطابعة
لأن هذا كله ممكن برمجته بسهولة الحمد لله

أرجو أخي لو تتكرم و تمنحني حل لهده المشكلة

لدي فكرة أخرى
ألا يمكن طباعة Report.rdlc من Printdocument إذا كان هذا الأخير يطبع مباشرة
الرد }}}
تم الشكر بواسطة: الوادي , ابو ليلى
#12
أخي الوادي المثال أكثر من رائع
هذا ما نصحني به الأستاذ الكريم أبو ليلى في رده قبل قليل لكن حاولت التمسك ب Report

التحكم صعب في تصميم Designالورقة على Printdocument
لكن هذا ما أبحث عنه
طباعة مباشرة بضغطة واحدة

سأحاول الآن أن أعطي بعض الوقت لهذه الأداة لكي أبحث عنها في قوقل لكيفية إضافة صورة (LOGO) و التحكم أكثر

إذا لم يجد أخي أبو يلى حل لمشكلة Report.rdlc للطباعة المباشرة
سأحول المشروع لل Printdocument

شكرا لك أستاذي أبو ليلى
وشكرا لك أستاذي الوادي
على كل ما تقدموه لنا من مساعدة
جعلها لكم الله في ميزان حسناتكم

ولا تترددوا إخواني لأي وهلة لوضع أي رابط يفيدنا للتحكم أكثر في Printdocument

شكرا
الرد }}}
تم الشكر بواسطة: الوادي , ابو ليلى
#13
كنت قد بدأت بالتعديل على المثال المذكور في الرابط بإضافة شعار في الأعلى سأجهزه لك.
الرد }}}
تم الشكر بواسطة: sniperjawadino , sniperjawadino , ابو ليلى
#14
اخي الكريم لا تنعدم الطرق لكل شيئ حل 
ما يقف في وجهنا دائما هو العطالة الفكرية  Big Grin
اتوقع انه يمكن الطباعة مباشرة عبر PrintDocument
و لتطلع على القياسات بشكل دقيق 
ارجع الى ملف التقرير في مجلد البرنامج Report.rdlc و افتحه باي محرر Xml (مستعرض الويب مثلا)
و استطلع داخله بشكل دقيق 
اما عن رسم المحتويات داخل PrintDocument و اسناد قيم بداخلها فالعملية سهلة باذن الله
لمعلومات اكثر عن الرسم داخله , راجع المقالة التالية و تحديدا دوال الرسم اخر المقالة
طباعة الداتا غريد
كما توجد فكرة حلوة في استغلال الملف السابق Report.Rdlc و التعامل معه كملف Xml  و اسناد قيم له و من ثم طباعته
و كذلك ايضا توجد فكرة جعل ReportViewer مخفي و الطباعة منه دون ان يراه المستخدم
كلها افكار تحتاج الى تحليل و تجريب
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
تم الشكر بواسطة: الوادي , sniperjawadino
#15
شكرا أخي أبو ليلى على التوضيح
شكرا أخي الوادي أنتظر تعديلك بفارغ الصبر
الرد }}}
تم الشكر بواسطة: الوادي , ابو ليلى
#16
هل انته متوقف فقط على الطباعة المباشرة على تقارير مايكروسوفت Reprt.rdlc
بمعنى أوضح هل جهزت التقرير والهوامش وتبقى فقط الطباعة مباشرة بدون عرض التقرير

إذا كان هذا طلبك اكتب رد وساقوم بإعطائك الكود .
الرد }}}
تم الشكر بواسطة: sniperjawadino , الوادي , الوادي , ابو ليلى
#17
نعم أخي حريف البرمجة

الكل جاهز التقرير و الهوامش و قياس التقرير و نوع الطابعة
ينقسني فقط الطباعة المباشرة لإختزال الوقت

شكرا أخي
الرد }}}
تم الشكر بواسطة: الوادي , ابو ليلى
#18
(15-08-16, 08:59 PM)sniperjawadino كتب : نعم أخي حريف البرمجة

الكل جاهز التقرير و الهوامش و قياس التقرير و نوع الطابعة
ينقسني فقط الطباعة المباشرة لإختزال الوقت

شكرا أخي

انشاء كلاس جديد باسم (Reporting)

كود :
مسح الموجود داخل الكلاس كامل ولصق الكود التالي به

Imports System.IO
Imports System.Data
Imports System.Text
Imports System.Drawing.Imaging
Imports System.Drawing.Printing
Imports System.Collections.Generic
Imports Microsoft.Reporting.WinForms

Public Class Reporting

   Implements IDisposable
   Public m_currentPageIndex As Integer
   Public m_streams As IList(Of Stream)

   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

   Public Sub Export(ByVal report As LocalReport)
       Dim deviceInfo As String = _
         "<DeviceInfo>" + "  <OutputFormat>EMF</OutputFormat>" + "  <PageWidth>8.5in</PageWidth>" + "  <PageHeight>11in</PageHeight>" + _
         "  <MarginTop>0.25in</MarginTop>" + "  <MarginLeft>0.25in</MarginLeft>" + "  <MarginRight>0.25in</MarginRight>" + _
         "  <MarginBottom>0.25in</MarginBottom>" + "</DeviceInfo>"
       Dim warnings() As Warning = Nothing
       m_streams = New List(Of Stream)()
       report.Render("Image", deviceInfo, AddressOf CreateStream, warnings)
       Dim stream As Stream
       For Each stream In m_streams
           stream.Position = 0
       Next
   End Sub

   Public Sub PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
       Dim pageImage As New Metafile(m_streams(m_currentPageIndex))
       ev.Graphics.DrawImage(pageImage, ev.PageBounds)
       m_currentPageIndex += 1
       ev.HasMorePages = (m_currentPageIndex < m_streams.Count)
   End Sub

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

   Public Overloads Sub Dispose() Implements IDisposable.Dispose
       If Not (m_streams Is Nothing) Then
           Dim stream As Stream
           For Each stream In m_streams
               stream.Close()
           Next
           m_streams = Nothing
       End If
   End Sub

End Class

الكلاس لا يحتاج تعديل فهو ثابت لأي مشروع .

في كوماند الطباعة يوضع الكود التالي للطباعة المباشرة بدون عرض التقرير

كود :
    Dim myRPTForm As New ReportViewer
        Dim report As LocalReport = New LocalReport()
        Dim myPRT As New Reporting
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        'تعبئة الداتا سيت بالبيانات المراد طباعتها
        Dim dp As New OleDbDataAdapter("select * from tb1", conn)
        Dim ds As New DataSet
        ds.Clear()
        dp.Fill(ds, "tb1")
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        'مسار التقرير وادراج البيانات لمصدر التقرير
        report.ReportPath = "..\..\Report1.rdlc"
        report.DataSources.Add(New ReportDataSource("DataSet1", ds.Tables("tb1")))
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        'امر الطباعة المباشرة بدون عرض التقرير
        myPRT.Export(report)
        myPRT.m_currentPageIndex = 0
        myPRT.Print()
وإذا ما وضحت الطريقة ارفق مثال مبسط فقط لعملية الطباعة ،، وسأقوم بعملها لك .
الرد }}}
تم الشكر بواسطة: sniperjawadino , الوادي , ابو ليلى , ibraheam
#19
شكرا أخي حريف
حقا هذا الكلاس رائع
لكن كما وضعت في الموضوع , ما أريده هو تنقية الكلاس حتى يطبع مباشرة دون المساس بشيئ آخر
مثل قياس الورقة والهوامش واسم الطابعة
أتمنى أخي أت تجد لي الكود المسؤول عن الطباعة داخل الكلاس

هذا مثال بسيط

شكرا كثيرا


الملفات المرفقة
.rar   HARIF.rar (الحجم : 1.37 م ب / التحميلات : 137)
الرد }}}
تم الشكر بواسطة: الوادي , ابو ليلى
#20
هذا التعديل على المثال في الرابط المذكود بعد إضافة شعار مع أنه طريقته غريبة تعبني البحث عن مكان وضع كود الشعار

سامحني على التقصير، خصوصاً اني أملتك على اني أحلك الموضوع، لكن يبدو اني مان بقدها خصوصاً مع ظروفي الحالية.

وانا نزلت الرمفق اللي منك لعلي الاقي وقت اشوفه واقدر افيد فيه بشي، مع أني متفشل.


الملفات المرفقة
.rar   WindowsApplication1.rar (الحجم : 17.92 ك ب / التحميلات : 150)
الرد }}}



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


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