اسهل طريقة للطباعة بدون الكريستال ريبورت Printing pages in asp.net

اسهل طريقة للطباعة بدون الكريستال ريبورت Printing pages in asp.net

المستوي السادس مبرمج محترف


كود سهل وبسيط للطباعة داخل صفحة انترنت حيث يطبع كل شئ بالجرافيك وبنفس الشكل وبنفس الاستايل كما في الديزاين


submit to reddit

اسهل طريقة للطباعة بدون الكريستال ريبورت Printing pages in asp.net

طباعة جزء من الصفحة او طباعة كامل الصفحة او طباعة صورة بجرافيك عالي الجودة بدون الحاجة للكريستال ريبورت او لاي اداة للطباعة داخل الدوت نت

باختصار يمكنك طباعة اي شئ بهذا المثال  وعلي سبيل الامثلة لا الحصر . يمكنك طباعة الجريد فيو - الداتاليست- اللايبل - اي جزء من الصفحة ....

print page in asp.net

print part of page in asp.net

print GriedView in asp.net

print Datalist in asp.net

print chart in asp.net

Print labels and textbox in asp.net

باختصار طباعة اي شئ تريده بمنتهي السهولة سواء في المشروع او بعد رفعك للمشروع علي استضافة

 

 

 

 

توجد للطباعة في الدوت نت  print in Asp.net اساليب مثل

-          الكريستال ريبورت  crystal report in asp.net

-          ريبورت فيور في الدوت نت  report viewer

-          الجريد فيو (تطويع الجريد فيو ومثيلتها في الطباعة باشكال معينة ) وكل ذلك تم شرحه في المحاضرات الخاصة بالتقارير

 

لكننا الان بصدد كود سهل وبسيط وبدون اي مشاكل في الاستضافة التي تدعم هذا او ذاك فقط وهكذا

 

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

كيف يتم ذلك

هنا سوف اضع اي شئ مراد طباعته في صورة كونترول مثلا ديف او جدول

ثم سوف انادي علي هذا الجدول او الفورم او الديف div

التي تحتوي الاشياء المراد طباعتها

 

تجربة عملية بصور

 print in asp.net

 print in asp.net

 

 

الخطوة الاولي

ننشأ صفحة انترنت فارغة ثم تعبئتها بما تريد طباعته هنا انا وضعت مثال بسيط مثل صورة بجرافيك عالي

وايضا لايبل وزرارين ووضعت كل شئ منسق داخل جدول وهم 4 صور

-          زر للطباعة لجزء من الصفحة

-          زر لطباعة كامل الصفحة

 

print in asp.net

 

 

print in asp.net

الخطوة الثانية

انشاء صفحة ويب عادية لا تتبع اي ماستر باج ووضعت في حدث بداية الصفحة page_load

 

  // وضعت الكونترول المراد طباعته في سشن بكامل ما يحتوية من معلومات

            Control ctrl = (Control)Session["print"];

            // ثم اخبرت الكلاس الخاص بالطباعة بان ما سيطبعه هو الكونترول المرسل في سشن

            PrintHelper.PrintWebControl(ctrl);

 

 

يتبقي خطوة  ثالثة

 

انشاء كلاس الطباعة وهنا سوف  انشأ كونترول وكلمة كونترول قد تكون اي شئ مثل جدول او ديف او اي شئ اخر

ثم سوف اطبع هذا الكونترول المرسل في سشن بعد الضغط علي زر طباعة

 

print in asp.net

ننشأ كلاس اسمه  PrintHelper

يعمل علي انشاء فورم الطباعة تلقائيا حيث يأخذ اسم الكونترول المراد طباعته .

 

 

 

public PrintHelper()

    {

        //

        // TODO: Add constructor logic here

        //

    }

    public static void PrintWebControl(Control ctrl)

    {

        // امر طباعة للكنترول

        PrintWebControl(ctrl, string.Empty);

    }

 

    public static void PrintWebControl(Control ctrl, string Script)

    {

        // نسخة من الكلاس سترينج رايتر النصي

        // ثم نكون الكونترول المراد طباعته لاننا نضع اي شئ نريد طباعته في كونترول مثل جدول او ديف او اي شئ اخر

        StringWriter stringWrite = new StringWriter();

        System.Web.UI.HtmlTextWriter htmlWrite = new System.Web.UI.HtmlTextWriter(stringWrite);

        if (ctrl is WebControl)

        {

            Unit w = new Unit(100, UnitType.Percentage); ((WebControl)ctrl).Width = w;

        }

        // هنا نكون الصفحة

        Page pg = new Page();

        pg.EnableEventValidation = false;

        if (Script != string.Empty)

        {

            pg.ClientScript.RegisterStartupScript(pg.GetType(), "PrintJavaScript", Script);

        }

        // ثم نكون الفورم الذي يحوي كل ذلك

        HtmlForm frm = new HtmlForm();

        pg.Controls.Add(frm);

        frm.Attributes.Add("runat", "server");

        frm.Controls.Add(ctrl);

        pg.DesignerInitialize();

        pg.RenderControl(htmlWrite);

        string strHTML = stringWrite.ToString();

        HttpContext.Current.Response.Clear();

        HttpContext.Current.Response.Write(strHTML);

        HttpContext.Current.Response.Write("<script>window.print();</script>");

        HttpContext.Current.Response.End();

    }

 

 

 

الخطوة الرابعة والاخيرة

ففي زر الطباعة  نضع الكود الاتي

  protected void Button1_Click(object sender, EventArgs e)

        {

            // هنا طباعة كل الصفحة حيث نرسل اسم الديف الذي يحتوي بداخله علي كل الادوات المراد طباعتها

            // حيث وضعت اسم الديف في سشن

            Session["print"] = divprintAll;

 

            //  هنا من خلال كود جافا سكربت يتم فتح صفحة ويندو صغيرة وبها اسم الصفحة المسماة 

            //printPage.aspx والخاصة بفتح السشن الذي به الاشياء التي سوف تطبع

            ClientScript.RegisterStartupScript(this.GetType(), "onclick", "<script language=javascript>window.open('/printPage.aspx','PrintMe','height=400px,width=550,scrollbars=1');</script>");

 

        }

 

 

طبعا الزر الذي يطبع جزء من الصفحة نضع ايضا اسم الديف فقط

print part of the page in asp.net

 

تنوية بسيط

اذا كنت تستخدم ستايل معين لكي يعمل داخل الديف بنفس الشكل ويظهر في الطباعة لابد من

-          اما وضع او القاء الستايل داخل الديف المراد طباعتها وليس في وسم الهيد فقط

 

 print in asp.net

بالضغط علي زر طباعة كامل الصفحة سوف يطبع كل شئ

print in asp.net

 

 

بالضغط علي زر طباعة جزء من الصفحة سوف يطبعالجزء المحدد فقط

print in asp.net

 

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

#اسهل طريقة للطباعة بدون الكريستال ريبورت Printing pages in asp.net

رابط الموضوع
http://citystarit.com/Article_details.aspx?id=123