03-10-12, 01:06 PM
ثانياً : ننتقل إلى ( الكود )
وفي هذا الشرح استخدمة ( Visual Studio 2008 )
في البداية اريد ان أقول ان الكود الذي كتبتة موجود في ملف واحد وأسمة ( MSWordPrintingSession.vb )
وهو عبارة عن ( عدة كلاسات [ Classes ] مدمج معها نافذة [ Form ] تبين تقدم الطباعة )
و الكلاس الذي سوف نتعامل معه هو ( WordPrintingSession ) فقط وهو المتكفل بالعملية كلها
سأقوم بشرح طريقة التخاطب مع هذا الكلاس ولن أقوم بشرح الكلاس نفسة .
بسم الله نبداء
عن طريق مشروعك ( الــ Project ) قم بإظافة ( المراجع - References ) الخاصة بالوورد
وهي ( Microsoft Word 11.0 Object Library ) كما في الصورة :
بعد الإنتهاء من إظافة المراجع ( المراجع - References ) نقوم بإظافة الملف ( MSWordPrintingSession.vb ) إلى مشروعك أو برنامجك
طبعاً عن طريق ( Add Existing Item ) أو الضغظ على ( Ctrl+D ) .
ملف الكلاس لوحدة فقط بدون المشروع
MSWordPrintingSession Calss File
إيظاً بإمكانك إظافة ملف القالب الخاص بالوورد ( قالب الطباعة الذي صممناه من قبل )
إلى [ الــ Resources ] ( الموارد أو المصادر الخاصة بمشروعك أو برنامجك )
لأنة توجد طريقتين لطلب الملف الخاص بالطباعة ( إما أن يكون في القرص الصلب وعن طريق الكود تضع مسار الملف فقط )
أو أن يكون الملف موجود في الــ ( Resources )
وعن طريق الكود تضع ( بيانات الملف على شكل [ ()Byte ] + اسم الملف [ "Template.dot" ] )
الآن سأشرح عملية إظافة الكود
لنفترض على سبيل المثال ( زر عند الضغط علية يقوم بعملية الطباعة أو بمعاينة قبل الطباعة )
سأقوم بالشرح داخل الحدث ( الــ Event ) الخاص بالضغط على الزر وهو الحدث ( PrintButton_Click )
الكود سيكون كالتالي داخل الحدث: PrintButton_Click
-----------------------------------------------------------------------------------
Private Sub PrintButton_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles PrintButton.Click
1
إنشاء متغير جديد من نوع WordPrintingSession
Dim MSPrintSession As New WordPrintingSession
2
'-- هذا الأمر لتشغيل برنامج الوورد + التأكد من ملف قالب الطباعة
'-- توجد طريقتين
----------
الأولى
جلب ملف قالب الطباعة من الـ Resources على شكل بايتات + إعطاء إسم لهذا الملف
If Not MSPrintSession.StartUp(My.Resources.TestPrintingTable, "MyTestTemplate1")
Then Exit Sub
----------
الثانية
إعطاء المسار الخاص بملف الطباعة من القرص الصلب
If Not MSPrintSession.StartUp("C:\WordTemplates\MyTestTemplate1.dot") Then Exit Sub
3
إنشاء متغير جديد من نوع WordPrintingSession.PrintJob
يتم إظافة جميع البيانات التي تود طباعتها في المتغير MyPrintJob
Dim MyPrintJob As New WordPrintingSession.PrintJob
4
في هذة المرحلة سيتم إظافة البيانات في المتغير MyPrintJob
AddText إظافة نص
----------------------------------------
سيتم إظافة النص في المكان الذي وضعة فيه الـ Bookmark
لإظافة نص في مكان محدد في مستند الطباعة بدلالة الـ Bookmark
إستخدم الطريقه AddText
'
AddImage إظافة صورة
----------------------------------------
MyPrintJob.AddImage(My.Resources.Personalphoto, "Personalphoto", _
. New WordPrintingSession.ImageMaximumSize(130, 130), _
. Word.WdLineStyle.wdLineStyleThinThickSmallGap, _
. Word.WdColor.wdColorBlack, _
. Word.WdLineWidth.wdLineWidth300pt)
أو بإمكانة وضع الصورة بدون إيطار وبدون تقييد في الحجم والإستغناء عن باقي البراميترز
MyPrintJob.AddImage(My.Resources.Personalphoto, "Personalphoto")
AddTable إظافة جدول
----------------------------------------
عند إظافة جدول نحتاج إلى عمل متغير جديد من نوع
WordPrintingSession.Table.ColumnOrder
الهدف منه لمعرفة الأعمدة المراد نقل البيانات منها
على سبيل المثال جدول يحتوي على 10 أعمدة في قاعدة البيانات
وأنت لا تحتاج إلى لأربعة فقط أو خمسة من هذة الأعمدة
ولا تريد إظهار الأعمدة الأخرى والتي تخص الرقم المسلسل
أو بعض الحقول التي تستخدمها لأغراض آخرى
نقوم الآن بعمل المتغير والتعريف بالأعمدة المطلوبة للطباعة فقط
Dim Tbl_ColmnOrder As New WordPrintingSession.Table.ColumnOrder
الآن نقوم بتعريف الأعمدة داخل هذا المتغير
مهم جداً إظافة الأعمد بالترتيب لأنها ستنقل إلى مستند الطباعة بنفس بالترتيب
لإظافة عامود يحتوي على بيانات نصية
Tbl_ColmnOrder.AddTextColumn("EmployeeName")
EmployeeName هو اسم العامود في الجدول في قاعدة البيانات
إذا كنت لا تريد إظافة بيانات في العامود فستخدم
()Tbl_ColmnOrder.AddEmptyColumn
إستخدم هذة الطريقة مع مراعات تسلسل الترتيب للعامود الذي تريدة خالياً من البيانات
لإظافة عامود يعتوي على صورة هناك طريقتان
----------
1 - لإظافة عامود يحتوي على صورة محفوظة على شكل بايتات
Tbl_ColmnOrder.AddImageColumn("EmployeePhoto", _
WordPrintingSession.Table.ColumnOrder.ColumnImageS ourceType.FromBytesArray, _
New WordPrintingSession.ImageMaximumSize(24, 24), _
Word.WdLineStyle.wdLineStyleNone, _
Word.WdColor.wdColorBlack, _
Word.WdLineWidth.wdLineWidth600pt)
-----------
2 - لإظافة عامود يحتوي على نص مسار الصورة في القرص الصلب
Tbl_ColmnOrder.AddImageColumn("EmployeePhoto", _
WordPrintingSession.Table.ColumnOrder.ColumnImageS ourceType.FromFilePathString, _
New WordPrintingSession.ImageMaximumSize(24, 24), _
Word.WdLineStyle.wdLineStyleNone, _
Word.WdColor.wdColorBlack, _
Word.WdLineWidth.wdLineWidth600pt)
------------
الفرق بين الطريقتين هو البراميتر الثاني وهو يحدد نوع مصدر الصور
WordPrintingSession.Table.ColumnOrder.ColumnImageS ourceType.FromBytesArray
WordPrintingSession.Table.ColumnOrder.ColumnImageS ourceType.FromFilePathString
بعد التعريف بالأعمدة
الآن نقوم بإظافة الجدول + المتغير الخاص بتعريف الأعمدة لهذا الجدول
MyPrintJob.AddTable(EmployeeTable, _ <------ System.Data.DataTable الجدول من نوع
Tbl_ColmnOrder, _ <------ المتغير الخاص بتعريف الأعمدة
"EmployeeTable_Head_BookmarkName", _ <----- الموجود في رأس الجدول Bookmark اسم الــ
"EmployeeTable_FirstRow_BookmarkName", _ <----- الموجود في أول حقل من السطر الأول Bookmark اسم الــ
True) <----- إذا أردت ترقيم العامود الأول True
لاحظ الصورة
لترقيم العامود الأول فقط ضع True
فقط إذا قمت بتصميم الجدول على أساس أن يكون العامود الأول للترقيم
إذا كان العامود الأول ليس للترقيم ضع False
لاحظ الصورة
بإمكانك إظافة أكثر من جدول بهذة الطريقة
تعريف الأعمدة ثم إظافة الجدول
لحذف الجدول الموجود في مستند الطباعة
إذا لم تتوفر بيانات لنقلها فية استخدم الطريقة
MyPrintJob.DeleteTable("EmployeeTable_Head_BookmarkName")
-----------
في النهاية قم بنداء هذا الأمر لبداء نقل البيانات
وإرسال ( التمغير MyPrintJob الذي أدخلنا فية جميع البيانات الرماد طباعتها ) في البراميتر
MSPrintSession.RepairPrintJob(MyPrintJob, WordPrintingSession.PrintingMode.PrintPrevew)
للعرض قبل الطباعة
WordPrintingSession.PrintingMode.PrintPrevew
للطباعة مباشرتاً
WordPrintingSession.PrintingMode.PrintOut
----------
إنتهاء إظافة الكود الخاص بالطباعة
End Sub
----------
-----------------------------------------------------------------------------------
Private Sub PrintButton_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles PrintButton.Click
1
إنشاء متغير جديد من نوع WordPrintingSession
Dim MSPrintSession As New WordPrintingSession
2
'-- هذا الأمر لتشغيل برنامج الوورد + التأكد من ملف قالب الطباعة
'-- توجد طريقتين
----------
الأولى
جلب ملف قالب الطباعة من الـ Resources على شكل بايتات + إعطاء إسم لهذا الملف
If Not MSPrintSession.StartUp(My.Resources.TestPrintingTable, "MyTestTemplate1")
Then Exit Sub
----------
الثانية
إعطاء المسار الخاص بملف الطباعة من القرص الصلب
If Not MSPrintSession.StartUp("C:\WordTemplates\MyTestTemplate1.dot") Then Exit Sub
3
إنشاء متغير جديد من نوع WordPrintingSession.PrintJob
يتم إظافة جميع البيانات التي تود طباعتها في المتغير MyPrintJob
Dim MyPrintJob As New WordPrintingSession.PrintJob
4
في هذة المرحلة سيتم إظافة البيانات في المتغير MyPrintJob
AddText إظافة نص
----------------------------------------
سيتم إظافة النص في المكان الذي وضعة فيه الـ Bookmark
لإظافة نص في مكان محدد في مستند الطباعة بدلالة الـ Bookmark
إستخدم الطريقه AddText
كود :
[color=#000000][COLOR=#0000bb] MyPrintJob[/color][color=#007700].[/color][color=#0000bb]AddText[/color][color=#007700]([/color][color=#dd0000]"ســ 32 ـنة"[/color][color=#007700], [/color][color=#dd0000]"Old"[/color][COLOR=#007700])
[/COLOR][color=#0000bb]MyPrintJob[/color][color=#007700].[/color][color=#0000bb]AddText[/color][color=#007700]([/color][color=#dd0000]"186"[/color][color=#007700], [/color][color=#dd0000]"Height"[/color][COLOR=#007700])
[/COLOR][color=#0000bb]MyPrintJob[/color][color=#007700].[/color][color=#0000bb]AddText[/color][color=#007700]([/color][color=#dd0000]"82"[/color][color=#007700], [/color][color=#dd0000]"Weight"[/color][COLOR=#007700])
[/COLOR][color=#0000bb]MyPrintJob[/color][color=#007700].[/color][color=#0000bb]AddText[/color][color=#007700]([/color][color=#dd0000]"متزوج"[/color][color=#007700], [/color][color=#dd0000]"MaritalStatus"[/color][COLOR=#007700])
[/COLOR][color=#0000bb]MyPrintJob[/color][color=#007700].[/color][color=#0000bb]AddText[/color][color=#007700]([/color][color=#dd0000]"مهندس إتصالات"[/color][color=#007700], [/color][color=#dd0000]"Job"[/color][COLOR=#007700])
[/COLOR][color=#0000bb]MyPrintJob[/color][color=#007700].[/color][color=#0000bb]AddText[/color][color=#007700]([/color][color=#dd0000]"شركة في الأحلام للإتصالات الدولية"[/color][color=#007700], [/color][color=#dd0000]"JobPlace"[/color][COLOR=#007700])
[/COLOR][color=#0000bb]MyPrintJob[/color][color=#007700].[/color][color=#0000bb]AddText[/color][color=#007700]([/color][color=#dd0000]"+0123456789"[/color][color=#007700], [/color][color=#dd0000]"PhoneNumber"[/color][COLOR=#007700])
[/COLOR][/COLOR]'
AddImage إظافة صورة
----------------------------------------
MyPrintJob.AddImage(My.Resources.Personalphoto, "Personalphoto", _
. New WordPrintingSession.ImageMaximumSize(130, 130), _
. Word.WdLineStyle.wdLineStyleThinThickSmallGap, _
. Word.WdColor.wdColorBlack, _
. Word.WdLineWidth.wdLineWidth300pt)
أو بإمكانة وضع الصورة بدون إيطار وبدون تقييد في الحجم والإستغناء عن باقي البراميترز
MyPrintJob.AddImage(My.Resources.Personalphoto, "Personalphoto")
AddTable إظافة جدول
----------------------------------------
عند إظافة جدول نحتاج إلى عمل متغير جديد من نوع
WordPrintingSession.Table.ColumnOrder
الهدف منه لمعرفة الأعمدة المراد نقل البيانات منها
على سبيل المثال جدول يحتوي على 10 أعمدة في قاعدة البيانات
وأنت لا تحتاج إلى لأربعة فقط أو خمسة من هذة الأعمدة
ولا تريد إظهار الأعمدة الأخرى والتي تخص الرقم المسلسل
أو بعض الحقول التي تستخدمها لأغراض آخرى
نقوم الآن بعمل المتغير والتعريف بالأعمدة المطلوبة للطباعة فقط
Dim Tbl_ColmnOrder As New WordPrintingSession.Table.ColumnOrder
الآن نقوم بتعريف الأعمدة داخل هذا المتغير
مهم جداً إظافة الأعمد بالترتيب لأنها ستنقل إلى مستند الطباعة بنفس بالترتيب
لإظافة عامود يحتوي على بيانات نصية
Tbl_ColmnOrder.AddTextColumn("EmployeeName")
EmployeeName هو اسم العامود في الجدول في قاعدة البيانات
إذا كنت لا تريد إظافة بيانات في العامود فستخدم
()Tbl_ColmnOrder.AddEmptyColumn
إستخدم هذة الطريقة مع مراعات تسلسل الترتيب للعامود الذي تريدة خالياً من البيانات
لإظافة عامود يعتوي على صورة هناك طريقتان
----------
1 - لإظافة عامود يحتوي على صورة محفوظة على شكل بايتات
Tbl_ColmnOrder.AddImageColumn("EmployeePhoto", _
WordPrintingSession.Table.ColumnOrder.ColumnImageS ourceType.FromBytesArray, _
New WordPrintingSession.ImageMaximumSize(24, 24), _
Word.WdLineStyle.wdLineStyleNone, _
Word.WdColor.wdColorBlack, _
Word.WdLineWidth.wdLineWidth600pt)
-----------
2 - لإظافة عامود يحتوي على نص مسار الصورة في القرص الصلب
Tbl_ColmnOrder.AddImageColumn("EmployeePhoto", _
WordPrintingSession.Table.ColumnOrder.ColumnImageS ourceType.FromFilePathString, _
New WordPrintingSession.ImageMaximumSize(24, 24), _
Word.WdLineStyle.wdLineStyleNone, _
Word.WdColor.wdColorBlack, _
Word.WdLineWidth.wdLineWidth600pt)
------------
الفرق بين الطريقتين هو البراميتر الثاني وهو يحدد نوع مصدر الصور
WordPrintingSession.Table.ColumnOrder.ColumnImageS ourceType.FromBytesArray
WordPrintingSession.Table.ColumnOrder.ColumnImageS ourceType.FromFilePathString
بعد التعريف بالأعمدة
الآن نقوم بإظافة الجدول + المتغير الخاص بتعريف الأعمدة لهذا الجدول
MyPrintJob.AddTable(EmployeeTable, _ <------ System.Data.DataTable الجدول من نوع
Tbl_ColmnOrder, _ <------ المتغير الخاص بتعريف الأعمدة
"EmployeeTable_Head_BookmarkName", _ <----- الموجود في رأس الجدول Bookmark اسم الــ
"EmployeeTable_FirstRow_BookmarkName", _ <----- الموجود في أول حقل من السطر الأول Bookmark اسم الــ
True) <----- إذا أردت ترقيم العامود الأول True
لاحظ الصورة
لترقيم العامود الأول فقط ضع True
فقط إذا قمت بتصميم الجدول على أساس أن يكون العامود الأول للترقيم
إذا كان العامود الأول ليس للترقيم ضع False
لاحظ الصورة
بإمكانك إظافة أكثر من جدول بهذة الطريقة
تعريف الأعمدة ثم إظافة الجدول
لحذف الجدول الموجود في مستند الطباعة
إذا لم تتوفر بيانات لنقلها فية استخدم الطريقة
MyPrintJob.DeleteTable("EmployeeTable_Head_BookmarkName")
-----------
في النهاية قم بنداء هذا الأمر لبداء نقل البيانات
وإرسال ( التمغير MyPrintJob الذي أدخلنا فية جميع البيانات الرماد طباعتها ) في البراميتر
MSPrintSession.RepairPrintJob(MyPrintJob, WordPrintingSession.PrintingMode.PrintPrevew)
للعرض قبل الطباعة
WordPrintingSession.PrintingMode.PrintPrevew
للطباعة مباشرتاً
WordPrintingSession.PrintingMode.PrintOut
----------
إنتهاء إظافة الكود الخاص بالطباعة
End Sub
----------
وهذه صور لمثال مرفق مع المشروع
نافذة تحتوي على بيانات سنقوم بإرسالها إلى الوورد
نافذة تبين التقدم
عرض البيانات في الوورد أثناء العرض قبل الطباعة
هذا ملف المشروع ( صمم بواسطة ) Visual Studio 2008
MSOfficePrinting Project source code - UpDate 2009-07-08
آخر تحديث 2009/08/07
تم تصحيح بعض الأخطاء ,,
أنتهى الموضوع
تحياتي لكم جميعاً وأي أستفسار أنا حاظر
أتمنى تستفيدون منة
تحياتي لكم
