طباعة جزء من الصفحة او طباعة كامل الصفحة او طباعة صورة بجرافيك عالي الجودة بدون الحاجة للكريستال ريبورت او لاي اداة للطباعة داخل الدوت نت
باختصار يمكنك طباعة اي شئ بهذا المثال وعلي سبيل الامثلة لا الحصر . يمكنك طباعة الجريد فيو - الداتاليست- اللايبل - اي جزء من الصفحة ....
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
التي تحتوي الاشياء المراد طباعتها
تجربة عملية بصور
الخطوة الاولي
ننشأ صفحة انترنت فارغة ثم تعبئتها بما تريد طباعته هنا انا وضعت مثال بسيط مثل صورة بجرافيك عالي
وايضا لايبل وزرارين ووضعت كل شئ منسق داخل جدول وهم 4 صور
- زر للطباعة لجزء من الصفحة
- زر لطباعة كامل الصفحة
الخطوة الثانية
انشاء صفحة ويب عادية لا تتبع اي ماستر باج ووضعت في حدث بداية الصفحة page_load
// وضعت الكونترول المراد طباعته في سشن بكامل ما يحتوية من معلومات
Control ctrl = (Control)Session["print"];
// ثم اخبرت الكلاس الخاص بالطباعة بان ما سيطبعه هو الكونترول المرسل في سشن
PrintHelper.PrintWebControl(ctrl);
يتبقي خطوة ثالثة
انشاء كلاس الطباعة وهنا سوف انشأ كونترول وكلمة كونترول قد تكون اي شئ مثل جدول او ديف او اي شئ اخر
ثم سوف اطبع هذا الكونترول المرسل في سشن بعد الضغط علي زر طباعة
ننشأ كلاس اسمه 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
تنوية بسيط
اذا كنت تستخدم ستايل معين لكي يعمل داخل الديف بنفس الشكل ويظهر في الطباعة لابد من
- اما وضع او القاء الستايل داخل الديف المراد طباعتها وليس في وسم الهيد فقط
بالضغط علي زر طباعة كامل الصفحة سوف يطبع كل شئ
بالضغط علي زر طباعة جزء من الصفحة سوف يطبعالجزء المحدد فقط
تحميل المثال البرمجي من هنا