إنشاء ملفات DOC & DOCX & PDF برمجيا في ASP.NET

لا شك أنك في عملك المباشر مع مواقع ويب متوسطة إلى كبيرة أو في تطبيقات سطح مكتب، أن تتعرض لمشكلة إنشاء مستندات، مثلا شهادة أو فاتورة أو تقرير، ولا شك أن نوع الملف الهدف بالتأكيد سيكون إما وورد Microsoft Word  أو أكروبات Adobe PDF.

الحديث في هذا المقال  عن المكتبات والحلول المجانية المتاحة، بعيدا عن المكتبات المدفوعة، فهي كثيرة ومتنوعة، فالمشكلة دائما في المجاني
لكي نقوم بإنشاء ملف PDF هنالك العديد من المكتبات المتوفرة، أشهرها على الإطلاق مكتبة iTextSharp والأمثلة حولها متوفرة بكثرة على الإنترنت، ويجدر الإشارة هنا أن هذه المكتبة مفيدة لإنشاء تقرير ، أو فاتورة ، ولكن إذا أردت أن تنشئ ملفات أكثر تعقيد وترتيب وتنسيق ( مثلا شهادة ) سيتطلب منك الأمر الكثيرة من الكود، كذلك أي تعديل مستقبلا على الشهادة سيكلفك إعادة كتابة الكود مرة أخرى.

لكي لا أطيل في موضوع الشهادة، الحل الأنسب يكون عبر عمل قالب ( ملف ) وورد DOC  وترتيبه ، ووضع مكان الحقول المراد تعبئتها قيم معينة يتم استبدالها برمجيا ، مثلا حقل الاسم يتم كتابته في الشهادة هكذا : XName ، ويتم لاحقا برمجيا استبدالها بالاسم الفعلي ، وهي أشبه بميزة دمج المراسلات الموجودة أساسا في الوورد.
يمكن بعد إنشاء ملف الوورد تصديره وتحويله إلى PDF ، أو امتداد آخر مناسب.

السؤال إذا ما هي حلول إنشاء ملفات وورد برمجيا ( أو التعديل ) ، شرط أن تكون هذه الطريقة مجانية
الإجابة هنالك عدة حلول سأعرض أفضلها هنا
أفضل وأسهل هذه الحلول هو استخدام مكتبة DocX وهي مكتبة مفتوحة المصدر موجودة على موقع CodePlex ، عبر هذا الرابط http://docx.codeplex.com
يتوافر في الرابط نفسه  رابط لمدونة تضع أمثلة وحلول يمكن الاستفادة منها.
هذه المكتبة توفر دالة بحث واستبدال، وهي المطلوبة لحل مشكلتنا، وقد هداني الله لهذا الحل بعد مدة لا بأس بها من المعاناة، حيث تقوم بعمل شهادة محترمة بالوورد، ووضع مكان الاسم أي اسم مثلا XName  ومكان اسم الدورة XCourse ، وتقوم باستبدال الاسم برمجيا وتوتة توتة توتة ، خلصت الحدوتة.

ويا فرحة ما تمت هنالك مشكلة، وهي تصدير الملف إلى PDF ، هذه المكتبة لا تعطيك هذا الخيار، فقط هي تتيح لك إنشاء وتعديل ملفات الوورد.

لا تقلق هنالك حل حيث تتواجد مكتبة Microsoft.Office.Interop.Word المتواجدة في حزمة مايكروسوفت أوفيس عند تنصيبهاـ وهي تتيح لك القيام بهذه الخطوة.
نعلم أن الوورد فعليا له مكتبات تقوم بعمله، وهنالك واجهة تستدعي هذه المكتبات، ومكتبتنا هذه من المكتبات الأساسية ( هي الوورد نفسه ) ، تمكنك من فتح ملف الوورد برمجيا وحفظه باسم ، واختيار الامتداد الذي تريده، مثلا PDF أو HTML أو RTL ، وهذه ميزة رائعة.
تجد هذه المكتبة متوافرة عند إضافة Referece  وتجد العديد من الشروحات حولها.

سبب كتابتي لهذا المقال هو المشكلة التي سيواجهها المبرمج عند رفع العمل على السيرفر، أقصد رفع الموقع Publish، حيث ستظهر مشكلة.
المشكلة بسيطة، وهي تخبرك بأن الأوفيس يجب أن يتم تنصيبه على السيرفر لتعمل المكتبة وهذا أمر منطقي.
بعد تنصيب الأوفيس على السيرفر، يجب أيضا وضع هذه المكتبة في مجلد Bin  في مشروع ASP.NET  لتعمل بكفاءة، وحسب علمي هنالك حلول لتعمل بدون تنصيب الأوفيس كامل، لكن مع تقدمك في العمل، يصبح الوقت هام، وتبحث عن أسرع الحلول، فلا وقت تضيعه.

ما طرأ فوق بحد ذاته مشكلة، فأنت غالبا لن تستطيع الوصول للسيرفر، لأنك تكون تملك استضافة عادية، وهنا يجب البحث عن حلول، قد تخبرني بأنك تملك سيرفر، ولكن العميل غالبا يشتري استضافته بنفسه، أو سيرفره بنفسه، ولا تريد دخول دوامة معه.
إحدى الحلول الأخرى هو استخدام مكتبة Open XML SDK المجانية التي تقدمها مايكروسوفت نفسها، إلا أن هذه المكتبة للأسف لا تتيح لك تصدير إلى PDF ، فقط تتيح لك إنشاء ملفات doc & docx ، وهو للأسف أمر ليس جيد في حق مايكروسوفت.

لكي لا أطيل، هنالك حل سحري جربته من القدم وما زال يعمل بكفاءة هو استخدام مكتبات GemBox.Document وهي مكتبة مدفوعة، ولكن النسخة المجانية منها تتيح لك التعامل مع ملفات وورد لغاية 20 فقرة، وهو أمر كافي لمشكلتنا ( تعديل على شهادة صفحة واحدة ) ، وانا بصراحة ألجأ لهذا الحل كثيرا.
وحتى يكون المقال متنوع، أجد أشهر الحلول المدفوعة استخدام مكتبة Aspose.Words فهي قوية وبها خيارات كثيرة وسهلة الاستخدام، إلا أن ما يعيب هذه المكتبات سعرها الغالي نسبيا.
وكعادتي أنبه بالابتعاد عن المكتبات المسروقة والمكركة، التزم بالحلال، وكن قابض على الجمر.
بالتوفيق